浏览器向服务器发送请求,ATestServlet
接收请求后,使用重定向/转发两种方式向BTestServlet
进行资源跳转
ATestServlet.java
@WebServlet(name = "ATestServlet", urlPatterns = "/chap3red_for_a")
public class ATestServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置request范围内的共享变量
request.setAttribute("user", "admin");
// 重定向至 BTestServlet
response.sendRedirect("/webpro/chap3red_for_b");
// 转发至 BTestServlet
request.getRequestDispatcher("/chap3red_for_b").forward(request, response);
}
}
BTestServlet.java
@WebServlet(name = "BTestServlet", urlPatterns = "/chap3red_for_b")
public class BTestServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Object obj = request.getAttribute("user");
System.out.println("user = " + obj);
}
}
代码的运行流程图
response重定向
request转发
理解重定向与转发
重定向:张三找李四借钱,李四没钱,所以让张三找王五借钱,张三从王五那借到了钱。张三很感激王五
转发:张三找李四借钱,李四没钱,李四就找王五借钱,并把借来的钱又借给了张三。张三很感激李四
张三相当于浏览器的请求,而李四、王五相当于处理请求的web资源
重定向与转发的对比
web资源跳转的两种方法 | 转发 | 重定向 |
---|---|---|
代码 | request .getRequestDispatcher(“url-patterns”).forward(request, response) | respond .sendRedirect(‘web资源相对于web 的路径’) |
request对象触发 | response对象触发 | |
跳转范围 | 项目内资源跳转 | 跨项目资源跳转 |
数据是否丢失 | 不丢失 | 丢失 |
何时使用 | 项目内资源跳转;web资源间传递request范围内的数据 | 跨项目资源跳转;页面刷新问题 |
参考内容:
【动力节点】Servlet__老杜