声明
文章大部分内容转载自公众号(Java3y),如需转载请关注Java3y公众号联系作者 ;本文已经获得转载声明

 Tomcat收到客户端的http请求,会针对每一次请求分别创建一个代表请求的request对象和代表响应的response对象

HttpServletResponse对象

 http响应由状态行、实体内容、信息头、一个空行组成.httpServletResponse对象就封装了http响应的信息

  • 1.向浏览器输出信息
     乱码问题:数据响应的格式需要和浏览器显示的格式一致(统一使用UTF-8)
     输出二进制数据--response.getOutputStream()

    //告诉浏览器响应的数据编码格式
    response.setHeader("Content-Type","text/html;chatset=UTF-8")
    //设置响应数据编码格式
    response.getOutputStream().write("你好".getBytes("
    

     输出字符数据--getWriter()

    //只需设置浏览器使用utf9显示数据
    response.setContentType("text/html;chatset=utf-8");
    PrintWriter printWriter = response.getWriter();
    printWriter.write("你好");
  • 2.实现文件下载
     当访问指定的Servlet时就可以下载其中的文件

    //获取资源的路径--站点下的xx.png
    String path = this.getServletContext().getResource("/xx.png");
    //读取资源
    FileInputStream fileInputStream = new FileInputStream(path);
    //获取文件名
    String fileName = path.substring(path.lastIndexOf("\\")+1);
    //设置信息头,告诉浏览器下载xx.png
    response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
    //把读取到的资源写给浏览器
    int len = 0;
    byte[] bytes = new byte[1024];
    ServletOutputStream servletOutputStream = response.getOutputStream();
    while ((len = fileInputStream.read(bytes)) > 0) {
     servletOutputStream.write(bytes, 0, len);
    }
    //关闭资源
    servletOutputStream.close();
    fileInputStream.close();
  • 设置自动刷新
     修改信息头response.setHeader("Refresh","3");

    response.setContentType("text/html;charset=UTF-8");
    response.getWriter().write("3秒后跳转页面.....");
    //三秒后跳转到index.jsp页面去,web应用的映射路径我设置成/,url没有写上应用名
    response.setHeader("Refresh", "3;url='/index.jsp'");
  • 设置缓存
  • 设置压缩
  • 重定向跳转(302)
     通知浏览器跳转到另一个页面,sendRedirect方法封装了http消息头实现重定向跳转
    response.sendRedirect("/xx.jsp");
    //消息头
    response.setStatus(302);
    //HttpServletResponse把常用的状态码封装成静态常量了,所以我们可以使用SC_MOVED_TEMPORARILY代表着302      response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);
    //跳转的地址是index.jsp页面
    response.setHeader("Location", "/xx.jsp");

getWriter()和getOutputStream()两个方法不能同时调用

Servlet程序向ServletOutputStream或PrintWriter对象中写入的数据将被Servlet引擎从response里面获取,Servlet引擎将这些数据当作响应消息的正文,然后再与响应状态行和各响应头组合后输出到客户端

Servlet的serice()方法结束后【也就是doPost()或者doGet()结束后】,Servlet引擎将检查getWriter或getOutputStream方法返回的输出流对象是否已经调用过close方法,如果没有,Servlet引擎将调用close方法关闭该输出流对象.