title: 【学习之路】Servlet学习
draft: true
tags:


HttpServletReques类


HttpServletReques类的作用

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

HttpServletRequest类的常用方法

方法名 方法作用
getRequestURI() 获取请求资源的路径
getRequestURL() 获取请求资源统一定位符(绝对路径)
getRemoteHost() 获取客户端的ip地址
getParameter() 获取请求参数
getParameterValues() 获取请求参数(多个值的时候使用)
setAttribute(key, value) 设置域数据
getAttribute(key) 获取域数据
getRequestDispatcher() 获取请求转发对象
getHeader() 获取请求头
getMethod() 获取请求方式(GET或POST)

解决POST请求中文乱码问题

  • 需要在获取请求参数之前调用才有效
  1. reques.setCharacterEncoding("UTF-8");

Servlet请求转发

  • 当客户端发送请求给Servlet1程序后,Servlet1程序将会查看客户端的请求参数,处理完请求参数后设置一个key值,获取地址到下一个Servlet2程序中。
  • Servlet2程序获取请求参数后,查看Servlet1所设置的key值,再处理自己的业务,返回Servlet处理结果给客户端。

中间Servlet1到Servlet2程序之间的过程就叫做请求转发

  • Servlet1代码
  1. //获取请求参数
  2. String username = request.getParameter("username");
  3. //设置key值
  4. request.setAttribute("key", "value");
  5. /*
  6. 设置Servlet2的路径
  7. 请求转发必须以 "/" 开始 /代表地址为 http://ip地址/端口号/工程名/
  8. */
  9. request.getRequestDispatcher("/servlet2");
  10. //走向Servlet2程序
  11. requestDispatcher.forward(reques, respons);
  • Servlet2代码
  1. //获取请求参数
  2. String username = request.getParameter("username");
  3. //查看Servle1的key
  4. request.getAttribute("key");
  5. //处理自己的业务

HttpServletResponse类


HttpServletResponse类的作用

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

两个流的输出说明

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

两个流同时只能使用一个否则就会报错

Servlet2 - 图1

进行流操作的时候出现中文乱码的解决

  1. 方法一:
  1. // 设置服务器字符集为UTF-8
  2. response.setCharacterEncoding("UTF-8");
  3. // 设置浏览器的字符集
  4. response.setHeader("Content-Tpye", "text/html; charset=UTF-8");
  1. 方法二:
  1. //会同时设置服务器和客户端都使用相同的字符集,还设置的响应头
  2. response.setContentType("text/html; charset=UTF-8");

此方法必须在获取流之前调用否则会没有作用

请求重定向


请求重定向介绍

  • 请求重定向,是指客户端给服务器发送请求,服务器给客户端新的地址,让浏览器去新地址访问(可能之前的地址已经被废弃)

请求重定向实现方法

  1. 请求重定向第一种方案

    • response1

      1. //设置响应状态码
      2. resp.setStatus(302);
      3. //设置响应头 说明新的地址
      4. resp.setHeader("Location", "http://localhost:8080/servlet/response2")
    • response2将会执行具体的业务

  2. 请求重定向第二种方案
    1. resp.sendRedirect("http://localhost:8080");

请求重定向的特点

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