Servlet 请求转发和重定向
来源:互联网 发布:知乎 pocket 编辑:程序博客网 时间:2024/06/10 01:22
servlet中的请求转发和重定向都是对资源的请求,以前对这两者的区分比较模糊,于是查阅了一些资料,再结合一两个实例,终于在脑海里有了比较明确的区分。
请求转发:
request.getRequsetDispatcher().forward(requset,response),是一种服务器行为,转发时request对象会被保存,也就是说被转发到的另外一个servlet或其他资源中的request对象,跟请求转发的request是通一个对象。又由于这个过程是服务端行为,所以客户端的地址栏不会发生改变。
重定向
response.sendRedirect(url),是一种客户端行为,实际上期间发生的是两次请求,前一次的请求request对象不会作保存,且地址栏地址会发生改变。
现在来看看一个例子:假设TestServlet是要请求的资源
@WebServlet("/TestServlet")public class TestServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("Test servlet is showing!"); System.out.println("my name is : "+ request.getAttribute("name")); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }}
请求转发servlet:TestForwardServlet
@WebServlet("/TestForwardServlet")public class TestForwardServlet extends HttpServlet { private static final long serialVersionUID = 1L; public TestForwardServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("forward servlet is showing!"); request.setAttribute("name", "licha"); System.out.println("my name is : "+request.getAttribute("name")); request.getRequestDispatcher("/TestServlet").forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }}
重定向servlet:TestRedirectServlet
@WebServlet("/TestRedirectServlet")public class TestRedirectServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("redirect servlet is showing!"); request.setAttribute("name", "John"); System.out.println("my name is : "+request.getAttribute("name")); response.sendRedirect("TestServlet"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }}
启动tomcat服务器,先试一下请求转发,在地址栏输入http://localhost:8080/TestSpringmvc/TestForwardServlet ,控制台的输出为:
再试一下重定向的例子,在地址栏输入:http://localhost:8080/TestSpringmvc/TestRedirectServlet ,控制台输入为:
可见,两者主要体现有两点不同:
1、转发的地址栏url还是原来的http://localhost:8080/TestSpringmvc/TestForwardServlet ,而重定向的地址栏url变成http://localhost:8080/TestSpringmvc/TestServlet 。
2、TestForwardServlet 中request对象中的属性name跟TestServlet中的一样,说明TestForwardServlet 中的request对象被保存并传到TestServlet。对比之下TestRedirectServlet 中request对象中的属性name并没有传到TestServlet中,因为TestServlet的request对象name属性为null。
- servlet的重定向和请求转发
- servlet请求转发和重定向
- Servlet请求转发和重定向
- servlet之重定向和请求转发
- Servlet 请求转发和重定向
- Servlet:重定向和请求转发
- Servlet的请求转发和重定向
- Servlet之请求转发和重定向
- servlet的请求转发和重定向
- Servlet请求转发和重定向
- servlet的请求转发和重定向
- Servlet的请求转发和重定向转发
- Servlet请求转发和请求重定向之间的区别
- servlet请求转发和请求重定向区别
- servlet的请求转发和请求重定向的理解
- Servlet(10)—请求转发和请求重定向
- Servlet请求转发与请求重定向
- servlet小结 请求转发和重定向的区别
- Android 颜色,6位和8位数颜色的区别和应用
- transition
- No idea
- 博客搬家通知
- 怎样实现MindMapper中图例的运用
- Servlet 请求转发和重定向
- 工作队列
- 技术人员创业经
- java四舍五入保留两位小数方法整理
- Android中的进程优先级
- Codeforces - 337B(div2) - Vika and Squares(练习)
- 关于android 中控件位置动态设置的问题
- 廖雪峰python教程笔记01
- YII2自定义公共方法