转发和重定向的区别和使用
疑问
-
能否在OneServlet中保存值到请求域中,在另一个TwoServlet中打印出来? 如果是不同的请求,不能取出来。如果是同一次请求是可以取出来的。
概念
由服务器端进行的页面跳转
原理图
案例
需求
步骤
- TwoServlet就从请求域中取出键和值,打印到浏览器上。
效果
代码
OneServlet
TwoServlet
package com.itheima.servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; //从请求域中取出值 @WebServlet(name = "Demo7TwoServlet", urlPatterns = "/two") public class Demo7TwoServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.print("这是Two,从请求域中取出one中的值:" + request.getAttribute("name")); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }
- 地址栏不发生变化,显示的是上一个页面的地址
- 请求次数:只有1次请求
- 根目录:
- 请求域中数据不会丢失
request.getRequestDispatcher("/地址").forward(request, response);
页面的跳转:重定向
- 重定向原理
- 重定向的方法
什么是重定向
概念
由浏览器端进行的页面跳转
原理图
重定向方法
重定向案例
需求
从OneServlet重定向到TwoServlet
步骤
- 在OneServlet中向请求域中添加键和值
- 使用重定向到TwoServlet,在TwoServlet中看能否取出请求域的值
效果
代码
OneServlet
TwoServlet
package com.itheima.servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; //从请求域中取出值 @WebServlet(name = "Demo7TwoServlet", urlPatterns = "/two") public class Demo7TwoServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.print("这是Two,从请求域中取出one中的值:" + request.getAttribute("name")); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }
重定向的特点
- 地址栏:显示新的地址
- 请求次数:2次
- 根目录: 没有项目的名字
- 请求域中的数据会丢失,因为是2次请求