转发和重定向的对比
来源:互联网 发布:淘宝外贸原单死人衣服 编辑:程序博客网 时间:2024/05/21 22:52
转发和重定向的区别:
1、 转发不会改变浏览器的地址栏,而重定向会
2、 转发是在服务器端执行跳转,重定向是在浏览器端执行跳转
3、 转发客户端只发一次请求,重定向整个过程会发两次请求
4、 转发可以传递数据,而重定向不可以
5、 转发只是进行域内跳转,重定向可以跳转到其他应用(如:www.baidu.com)
转发:
servletDemo1:
@WebServlet("/demo1")public class ServletDemo1 extends HttpServlet {private static final long serialVersionUID = 1L;public ServletDemo1() { }protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {/*转发*/System.out.println("A:我要办事");System.out.println("B:你的事我办不了,我可以找人给你办");ServletContext application = this.getServletContext();application.getRequestDispatcher("/demo2").forward(request, response);System.out.println("事办完了");}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}
servletDemo2:
@WebServlet("/demo2")public class ServletDemo2 extends HttpServlet {private static final long serialVersionUID = 1L; public ServletDemo2() { }protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("C:***我能帮你办***");}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}
当在浏览器中访问demo1时,demo1将请求(由服务器端的servletContext域对象)转发给demo2,并且在转发前后浏览器地址栏不会发生变化。
由输出结果看出,在执行跳转后,程序还是回到demo1执行剩余的代码。
转发数据的共享:
更该上面程序的代码:
@WebServlet("/demo1")public class ServletDemo1 extends HttpServlet {private static final long serialVersionUID = 1L;public ServletDemo1() { }protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {/*转发*/ServletContext application = this.getServletContext();//两个servlet共享域数据application.setAttribute("name", "tom");application.getRequestDispatcher("/demo2").forward(request, response);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}
@WebServlet("/demo2")public class ServletDemo2 extends HttpServlet {private static final long serialVersionUID = 1L; public ServletDemo2() { }protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {ServletContext application = this.getServletContext();//两个servlet共享域数据String name = (String)application.getAttribute("name");System.out.println(name);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}
因为这是一次访问过程,servletContext是域对象,所以进行跳转后,在demo2中可以得到demo1中的数据,因此转发可以共享数据。
重定向:
这是servletDemo7
@WebServlet("/demo7")public class ServletDemo7 extends HttpServlet {private static final long serialVersionUID = 1L; public ServletDemo7() { super(); }protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//请求重定向System.out.println("A:我要借钱");System.out.println("B:我没钱,但我可以告诉你谁有");response.sendRedirect("/day09_response/demo8"); System.out.println("事办完了");}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}
这是servletDemo8
WebServlet("/demo8")public class ServletDemo8 extends HttpServlet {private static final long serialVersionUID = 1L; public ServletDemo8() { super(); }protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("C:我借给你...");}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}
当在浏览器端访问servletDemo7时,浏览器的地址
访问结束后,浏览器的地址
由此可以看出,进行重定向改变了浏览器的地址栏信息。
执行结果:
若上面代码为:response.sendRedirect(“http://www.baidu.com”);会跳转到百度
用一张图来表示上述的过程:
好了,就写这么多,排版不太好看,各位大佬凑合看看!
阅读全文
0 0
- 请求转发和重定向的对比
- 转发和重定向的对比
- 转发(forward)和重定向(redirect)的对比
- 请求转发和请求重定向的对比
- 转发和重定向
- 转发和重定向
- 转发和重定向
- 重定向和转发
- 转发和重定向
- 转发和重定向
- 重定向和转发
- 转发和重定向
- 转发和重定向
- 转发和重定向
- 重定向和转发
- 重定向 和转发
- 转发和重定向
- 转发和重定向
- PopupWindow在7.0上显示的坑
- linux 下 启动mysql服务出错!Starting MySQL.The server quit without updating PID file (XXX.pid)
- Java基础之JMX
- BZOJ 1009: [HNOI2008]GT考试(DP+KMP失配+矩阵快速幂)
- Android 能让你少走弯路的干货整理
- 转发和重定向的对比
- POJ3740-Easy Finding
- Python脚本进行主播招募相关数据统计的案例
- 三星公佈Bixby2.0升級後比蘋果更酷
- 微信小程序获取scope中权限管理
- iOS h5与原生态混编
- Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)【Dalston版】
- 决策树(Decision Tree)
- android helloCharts 柱状图小结