response使用方法以及下载案例

1,response常用api案例
1,相应状态码含义
200 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();
    }
  }
}
 
 

猜你喜欢

转载自www.cnblogs.com/cyxy31521/p/9388299.html