day17-Servlet06

Servlet0615.HttpServletResponse15.1HttpServletResponse介绍

  1. 每次HTTP请求,Tomcat都会创建一个HttpServletResponse对象传递给Servlet程序使用
  2. HttpServletRequest表示请求过来的信息 , HttpServletResponse表示所有响应的信息,如果需要设置返回给客户端的信息,通过HttpServletResponse对象来设置即可 。
  • HttpServletResponse类图

day17-Servlet06

文章插图

day17-Servlet06

文章插图

day17-Servlet06

文章插图
  • 向客户端返回数据方法:

day17-Servlet06

文章插图
  1. 字节流getOutputStreamWriter(); 常用于下载(处理二进制数据)
  2. 字符流getWriter(); 常用于回传字符串
  3. 两个流同时只能使用一个,使用了字节流 , 就不能使用字符流,反之亦然 , 否则就会报错 。
例子

day17-Servlet06

文章插图
15.2返回数据时注意事项和细节
  1. 处理中文乱码问题-方案1(推荐)
    day17-Servlet06

    文章插图
    response.setContentType("text/html;charset=utf-8");
  2. 处理中文乱码问题-方案2
    day17-Servlet06

    文章插图
    //1.设置服务器使用utf-8response.setCharacterEncoding("utf-8");//2.设置浏览器端是utf-8,而且类型是text/htmlresponse.setHeader("Content-Type","text/html;charset=utf-8");
15.3请求重定向15.3.1请求重定向介绍请求重定向:一个web资源收到客户端请求后,通知客户端去访问另外一个web资源,这称之为请求重定向
day17-Servlet06

文章插图
请求重定向的地址栏会改变
15.3.2请求重定向应用实例需求:演示请求重定向的使用 , 当访问DownServlet下载文件,重定向到DownServletNew下载文件
DownServlet:
package com.li.servlet.response;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.annotation.*;import java.io.IOException;import java.io.PrintWriter;@WebServlet(urlPatterns = {"/downServlet"})public class DownServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//完成自己的业务..//请求重定向->downServletNew//1.sendRedirect本质 会返回一个 302的状态码 和一个Location:/servlet_demo/downServletNew//2.因此302和location是浏览器解析的,而不是服务器//3.浏览器会将/servlet_demo/downServletNew 解析成//=>http://localhost:8080/servlet_demo/downServletNew//浏览器不能知道服务器上的web应用名称,只能将当前所在页面的主机名和端口拼上来,// 所以重定向需要把/web应用名也写上来//而请求转发是在服务器端的,可以获取到web应用名称,所以请求转发直接写/资源名即可response.sendRedirect("/servlet_demo/downServletNew");}}DownServletNew:
package com.li.servlet.response;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.annotation.*;import java.io.IOException;import java.io.PrintWriter;@WebServlet(urlPatterns = {"/downServletNew"})public class DownServletNew extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("DownServletNew-doPost()被调用..");response.setContentType("application/x-tar;charset=utf-8");PrintWriter writer = response.getWriter();writer.print("ok");writer.flush();writer.close();}}down.html:
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>下载文件</title></head><body><h1>下载文件</h1><a href="http://localhost:8080/servlet_demo/downServlet">天龙八部</a></body></html>
day17-Servlet06

文章插图
15.3.3请求重定向注意事项和细节
  1. 最佳应用场景:网站迁移,比如原域名是www.abc.com,迁移到www.xyz.com,但是百度抓取的还是原网址

    推荐阅读