Loading

HttpServletRequset&Response

1 HttpServletRequest类

1.1 HttpServletRequest类有什么作用

每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析好封装到Request对象中。然后传递到service方法(doGET和doPOST方法)中给我们使用。我们可以通过HttpServletRequest对象,获取到所有请求的信息

1.2 HttpServletRequest类常用方法

1. getRequestURI()·····································获取请求的资源路径
2. getRequestURL()·····································获取请求的统一资源定位符(绝对路径)
3. getRemoteHost()·····································获取客户端的IP地址
4. getHeader()············································获取请求头
5. getParameter()········································获取请求的参数
6. getParameterValues()································获取请求的参数(多个值时使用)
7. getMethod()············································获取请求的方式
8. setAttribute(key,value)·······························设置域对象
9. getAttribute(key)······································获取域对象
10. getRequestDispatcher()·····························获取请求转发对象

1.3 请求的中文乱码问题

如果不对请求进行处理,获取的表单数据中的中文在控制台上输出,就会乱码
  • 方法1

    //先获取请求参数,将参数以iso8859-1进行编码,再以utf-8进行解码
    
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取请求参数
        String username = req.getParameter("username");
        //1、先用iso8859-1进行编码
        //2、再用utf-8进行解码
        String name = new String(username.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
    }
    
  • 方法2

    //直接设置请求体的字符集为utf-8
    
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
    }
    

1.4 请求的转发

  • 什么是请求转发

    服务器收到请求后,从一个资源跳到另一个资源的操作
    
  • 请求转发的特点

    1. 浏览器地址栏没有变化
    2. 它们是一次请求
    3. 共享Request域中的数据
    4. 可以转发到WEB-INF目录下
    5. 不可以访问工程以外的资源
    

    image

  • 编码

    req.getRequestDispatcher("/test5").forward(req,resp);
    

1.5 请求的重定向

  • 什么是请求的重定向

    客户端给服务器发送请求,服务器给了客户端一个新地址,然后客户端去访问新地址
    
  • 请求重定向的特点

    1. 浏览器地址栏变化
    2. 是两次请求
    3. 不能共享Request域中数据
    4. 不能访问WEB-INF下的资源
    5. 可以访问工程外的资源
    

    image

  • 编码

    • 方法1

      //设置响应状态码,表示重定向
      resp.setStatus(302);
      //设置响应头,说明新的地址在哪里
      resp.setHeader("Location","http://localhost:8080");
      
    • 方法2

      resp.sendRedirect("http://localhost:8080");
      

2 HttpServletResponse类

2.1 HttpServletResponse有什么作用

每次请求进入,Tomcat服务器都会创建一个Response对象传递给Servlet程序去使用,表示所有响应的信息,我们需要设置返回客户端的信息,可以通过这个类的对象来设置

2.2 两个输出流的说明

字节流 getOutputStream 常用于下载(传递二进制数据)
字符流 getWriter 常用于回传字符串

注意: 两个流不能同时使用

2.3 往客户端回传数据

  • 显式的往客户端回传数据

    //先获取输出流对象,利用输出流对象将数据传回客户端
    
    resp.getWriter().println(req.getAttribute("key1"));
    
  • out.writer和out.print的区别

    1. out.writer
    
       只能输出字符串
    
    2. out.print
    
       可以输出对象
    

2.4 响应的中文乱码问题

  • 方法1

    //设置响应体字符集为UTF-8,通过响应头,设置浏览器也使用UTF-8字符集
    
    resp.setCharacterEncoding("UTF-8"); 
    resp.setHeader("Content-Type", "text/html; charset=UTF-8");
    
  • 方法2

    //同时设置服务器和客户端都使用UTF-8字符集,还设置了响应头.此方法在获取流对象之前调用才有效
    
    resp.setContentType("text/html; charset=UTF-8");
    
posted @ 2022-06-29 09:57  苏无及  阅读(23)  评论(0编辑  收藏  举报