java response方法_Java学习之Response篇

Java学习之Response篇

0x00 前言

续上篇文章内容,这篇本章来更新Response。

0x01 Response

常用方法:

setStatus(int sc) : 设置响应状态码

setHeader(String name, String value) 设置响应头

resp.sendRedirect(String Redirect); 302跳转

这里的转发和重定向不一样,来看看两者的区别。

重定向:

1. 地址栏发生变化

2. 重定向可以访问其他站点(服务器)的资源

3. 重定向是两次请求。不能使用request对象来共享数据

转发:

1. 转发地址栏路径不变

2. 转发只能访问当前服务器下的资源

3. 转发是一次请求,可以使用request对象来共享数据

重定向代码:

Response类:

@WebServlet("/response")

public class Response extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

resp.setStatus(302);

resp.setHeader("location","/demo1");

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

super.doPost(req, resp);

}

}

ServletDemo类:

@WebServlet("/demo1")

public class ServeletDemo1 extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

System.out.println("已跳转");

resp.sendRedirect("http://www.baidu.com");

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

super.doPost(req, resp);

}

}

writer方法使用:

@WebServlet("/response")

public class Response extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

resp.setCharacterEncoding("gbk"); //设置编码

PrintWriter writer = resp.getWriter(); //获取输出对象

writer.write("response");//输出内容

writer.println("1235");

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

super.doPost(req, resp);

}

}

输出字节流

ServletOutputStream outputStream = resp.getOutputStream();

outputStream.write("abc".getBytes());

0x02 ServletContext

ServletContext: 代表整个web应用,可以和程序的容器(服务器)来通信

常用方法:

request.getServletContext(); : 通过request对象获取

this.getServletContext(); : 通过HttpServlet获取

String getMimeType(String file) : 获取MIME对象

域对象:共享数据

1. setAttribute(String name,Object value)

2. getAttribute(String name)

3. removeAttribute(String name)

获取文件的真实(服务器)路径:

String getRealPath(String path)

文件下载小案例:

编写一个html页面,里面写一个超链接对图片进行下载。

HTML:

downlaod

图片查看

图片下载

downloadSerlet类:

@WebServlet("/downloadServlet")

public class downloadServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

this.doGet(request,response);

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String filename = request.getParameter("filename"); //接收filename传参的值

ServletContext servletContext = this.getServletContext(); //创建servletContext 对象

String Path = servletContext.getRealPath("/img/" + filename); //获取文件真实路径

String mimeType = servletContext.getMimeType(filename);//获取mimel类型

FileInputStream fis = new FileInputStream(Path); //路径参数文件输入流对象中

response.setHeader("content-type",mimeType); //响应头设置mime类型

response.setHeader("content-disposition","attachment;filename="+filename); //设置为附件类型

ServletOutputStream outputStream = response.getOutputStream(); //获取文件输出流

byte[] buff = new byte[1024]; //设置每次读取的字节大小

int len =0;

while ((len = fis.read(buff))!=-1){

outputStream.write(buff,0,len);

}

}

}

这里简单的一个案例就完成了。

0x03 结尾

这里的几个内容无非就是几个方法的一个使用,这就体现了Java面向对象语言的强大。


版权声明:本文为weixin_33791941原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。