当前位置: 首页 > news >正文

在一个web应用中应该如何完成资源的跳转

在一个web应用中通过两种方式,可以完成资源的跳转:

        第一种方式:请求转发

        第二种方式:重定向

转发和重定向的区别:

        代码上的区别:

                请求转发

                        // 获取请求转发器对象

                        RequestDispatcher dispatcher = request.getRequestDispatcher("/dept/list");

                        // 调用请求转发器对象的forward方法完成转发

                        dispatcher.forward(request, response);

                        // 合并一行代码

                        request.getRequestDispatcher("/dept/list").forward(request, response);

                        // 转发的时候是一次请求,不管你转发了多少次。都是一次请求。

                        // AServlet转发到BServlet,再转发到CServlet,再转发到DServlet,不管转发了多少次,都在同一个request当中。

                        // 这是因为调用forward方法的时候,会将当前的request和response对象传递给下一个Servlet。

                重定向

                        // 注意:路径上要加一个项目名。

                        // 浏览器发送请求,请求路径上是需要添加项目名的。

                        // 以下这一行代码会将请求路径“/oa/dept/list”发送给浏览器

                        // 浏览器会自动的向服务器发送一次全新的请求:/oa/dept/list

                        response.sendRedirect("/oa/dept/list");

        形式上的区别:

                请求转发(一次请求)

                在浏览器地址栏上发送的请求是:http://localhost:8080/servlet10/a ,最终请求结束之后,浏览器地址栏上的地址还是这个。没变。

                重定向(两次请求)

                在浏览器地址栏上发送的请求是:http://localhost:8080/servlet10/a ,最终在浏览器地址栏上显示的地址是:http://localhost:8080/servlet10/b

        转发和重定向的本质区别:

                请求转发:是由WEB服务器来控制的。A资源跳转到B资源,这个跳转动作是Tomcat服务器内部完成的。

                重定向:是浏览器完成的。第二次请求是由浏览器发出的。

        请求转发和重定向应该如何选择?

                - 如果在上一个Servlet当中向request域当中绑定了数据,希望从下一个Servlet当中把request域里面的数据取出来,使用请求转发机制。

                - 剩下所有的请求均使用重定向。(重定向使用较多。

        跳转的下一个资源有没有要求呢?必须是一个Servlet吗?

                回答:不一定,跳转的资源只要是服务器内部合法的资源即可。包括:Servlet、JSP、HTML.....

        请求转发会存在浏览器的刷新问题。

请求转发示意图:

                

 重定向示意图:

                  

http://www.lryc.cn/news/38654.html

相关文章:

  • 前缀和部分题目
  • 三天吃透MySQL面试八股文
  • Giving You A guide to learning any topic faster than 95% of people
  • (七十七)大白话MySQL是如何根据成本优化选择执行计划的?(中)
  • 原来CSS 也可以节流啊
  • UE官方教程笔记03-功能、术语、操作简介
  • BN,LN,IN,GN的理解和用法
  • Linux:epoll模式web服务器代码,代码debug
  • SpringSecurity学习(四)密码加密、RememberMe记住我
  • vue专项练习
  • 【笔试题】百度+美团
  • 【8.索引篇】
  • MySQL InnoDB存储引擎锁与事务实现原理解析(未完成)
  • P1683 入门(洛谷)JAVA
  • yocto编译烧录和脚本解析
  • Proteus 8.15安装包安装教程
  • Spring——AOP工作流程
  • c++11多线程之condition_variable、wait()、notify_one()、notify_all()的使用。
  • skywalking扩展实现 —— 监控数据的动态上报
  • 【GoF 23】23种设计模式与OOP七大原则概述
  • Java 日期时间
  • Face Forgery Suvery
  • 案例学习--016 消息队列作用和意义
  • 【MySQL】MySQL的锁机制
  • HTML 背景
  • Lombok
  • Koa源码学习
  • 一种延迟加载自定义元素的方法
  • Pytho经典面试题荟萃:第一期
  • 01背包问题(大彻大悟版)