HttpServletRequest 类
每次有请求进入 Tomcat 服务器,Tomcat 服务器就会将请求过来的 Http 协议信息封装到 Request 对象中,然后传递到 service 方法(doGet 和 doPost)中给我们使用。可以通过 HttpServletRequest 对象,获取到所有请求信息
常用方法
- getRequestRI() 获取请求的资源路径
- getRequestURL() 获取请求的统一资源定位符(绝对路径)
- getRemoteHost() 获取客户端的 ip 地址
- getHeader() 获取请求头
- getParameter() 获取请求参数
- getParameterValues() 请求参数为多个值时使用
- getMethod() 获取请求方式
- setAttribute(key, value) 设置域数据
- getAttribute(key) 获取域数据
getRequestDispatcher() 获取请求转发对象
- 服务器收到请求后,从一个资源跳转到另一个资源的操作
- 两个资源共同处理一个请求,并且共享 request 域
- 可以转发到 WEB-INF 目录下(一般访问不到,可以转发进去)
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
public class RequestAPIServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1. getRequestRI() 获取请求的资源路径
System.out.println("URI:" + req.getRequestURI());
// 2. getRequestURL() 获取请求的统一资源定位符(绝对路径)
System.out.println("URL:" + req.getRequestURL());
// 3. getRemoteHost() 获取客户端的 ip 地址
/*
* 本地使用 localhost 访问将得到 127.0.0.1
* 使用本地真实 ip 访问得到本地真实 ip
* */
System.out.println("客户端 IP:" + req.getRemoteHost());
// 4. getHeader() 获取请求头
System.out.println(req.getHeader("User-Agent"));
// 5. getParameter() 获取请求参数
System.out.println(req.getParameter("username"));
System.out.println(req.getParameter("gender"));
// 6. getParameterValues() 请求参数为多个值时使用
System.out.println(Arrays.toString(req.getParameterValues("hobby")));
// 7. getMethod() 获取请求方式
System.out.println(req.getMethod());
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// post 请求中包含中文时,要设置请求体的字符集
// 要在获取请求前调用
req.setCharacterEncoding("UTF-8");
System.out.println(Arrays.toString(req.getParameterValues("hobby")));
}
}
getRequestDispatcher() 获取请求转发对象
DispatcherServlet1
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
public class DispatcherServlet1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
System.out.println("在 DispatcherServlet1 查看到 username:" + username);
// 设置域数据并共享到 DispatcherServlet2 中
request.setAttribute("key1", "DispatcherServlet1 已处理");
// 转发到哪个地址(在 web.xml 中)
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/dispatcher2");
// 转向转发地址
requestDispatcher.forward(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
DispatcherServlet2
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
public class DispatcherServlet2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
System.out.println("在 DispatcherServlet2 查看到 username:" + username);
// 查看是否已经经过 DispatcherServlet1 处理
System.out.println(request.getAttribute("key1"));
// 处理自己业务
System.out.println("DispatcherServlet2 进行处理");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}