response使用方法以及下载案例
1,response常用api案例
1,相应状态码含义
OK | 请求已成功,请求所希望的响应头或数据体将随此响应返回。出现此状态码是表示正常状态。 | |
302 | Move temporarily | 重定向,请求的资源临时从不同的 URI响应请求。 |
304 | Not Modified | 从缓存中读取数据,不从服务器重新获取数据 |
404 | Not Found | 请求资源不存在。通常是用户路径编写错误,也可能是服务器资源已删除。 |
403 | Forbidden | 服务器已经理解请求,但是拒绝执行它 |
405 | Method Not Allowed | 请求行中指定的请求方法不能被用于请求相应的资源 |
500 | Internal Server Error | 服务器内部错误。通常程序抛异常 |
2,操作响应行
setStatus(int code) 向浏览器中发送状态码 response.setStatus(302);
3,操作响应头
addHeader(String name, String value) addIntHeader(String name, int value) addDateHeader(String name, long date) setHeader(String name, String value) //设置响应头信息 setDateHeader(String name, long date) setIntHeader(String name, int value) //add表示添加,set表示设置
refresh 定时刷新
response.setHeader("refresh","5;url=servlet2");//定时跳转刷新
content-type设置相应数据的类型和编码格式,解决中文乱码
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // response.setCharacterEncoding("utf-8"); // response.setHeader("content-type","text/html;charset=utf-8"); response.setContentType("text/html;charset=utf-8");//优化写法 PrintWriter writer = response.getWriter(); writer.write("你好 世界!!"); }
location 相应的路径,重定向
什么情况下使用转发?什么时候使用重定向?
1,转发是可以携带数据的,
转发
2,URL需要变化的时候
使用重定向
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /*response.setStatus(302); response.setHeader("Location","/servlet2");*/ response.setContentType("text/html;charset=utf-8"); //优化写法 response.sendRedirect("/servlet2"); }
content-disposition 通过浏览器以附件形式解析正文
4,操作响应体
PrintWriter getWriter()
@WebServlet(name = "Servlet2",urlPatterns="/servlet2") public class Servlet2 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); response.getWriter().write("hell,哈哈"); } }
ServletOutputStream getOutputStream()
获得字节流,通过该字节流的write(byte[] bytes)可以向response缓冲区中写入字节
ServletOutputStream outputStream = response.getOutputStream();
2,下载案例
public class DownLoadServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String filename = request.getParameter("filename"); String realPath = getServletContext().getRealPath("/WEB-INF/" + filename); ////设置响应头: response.setContentType(mimeType) 告诉浏览器下载的文件的类型; String mimeType = getServletContext().getMimeType(filename); response.setContentType(mimeType); String encode = URLEncoder.encode(filename, "utf-8"); //设置响应头:Content-Disposition 告诉浏览器以附件的形式来处理文件; response.setHeader("Content-Disposition","attachment;filename="+encode); //将文件读取到流里边: File file = new File(realPath); if(file.exists()){ ServletOutputStream outputStream = response.getOutputStream(); FileInputStream in = new FileInputStream(file); int len = 0; byte[] bytes = new byte[1024]; //将流写给浏览器:response.getOutputStream().write(arr,0,len); while((len = in.read(bytes)) != -1){ outputStream.write(bytes,0,len); } in.close(); } } }