Servlet、JSP实现页面跳转的两种方式

实现页面跳转的两种方式:

  • 转发:客户端发送HTTP请求——>web端接受请求——>容器内部完成请求和转发动作——>将跳转到的那个网页资源返回给客户端
  • 重定向:客户端发送HTTP请求——>web服务器接受请求后发送302状态码以及新的位置给客户端——>客户浏览器发现是302响应,则自动再发送一个新的HTTP请求,请求指向新的地址——>服务器根据此请求寻找资源发个客户

转发和重定向的区别:

  • 转发只能在同一个容器内完成,转发的时候浏览器地址是不会变的,在客户浏览器里只会显示第一次进入的那个网址或者路径,客户看不到这个过程,只是得到了想要的目标资源。转发行为浏览器只做了一次请求。(转发只能跳转一次)
  • 重定向在客户浏览器中显示的是重定向之后的路径,客户可以看到地址的变化。重定向行为浏览器做了至少两次请求。(重定向可以跳转多次)
  • 转发是服务器行为,重定向是客户端行为
  • 转发耗时比重定向少

关于302的解释:

Found  临时移动,但资源只是临时被移动。即你访问网址A,但是网址A因为服务器端的拦截器或者其他后端代码处理的原因,会被重定向到网址B

转发和重定向的选择

  • 重定向的速度比转发慢,因为浏览器还得发出一个新的请求,如果在使用转发和重定向都无所谓的时候建议使用转发。
  • 因为转发只能访问当前WEB的应用程序,所以不同WEB应用程序之间的访问,特别是要访问到另外一个WEB站点上的资源的情况,这个时候就只能使用重定向了
  • 使用重定向可以避免在用户重新加载页面时两次调用相同的动作

Servlet实现请求转发

  • RequestDispatcher对象

        RequestDispatcher对象由Servlet容器来创建,封装一个由路径所标识的服务器资源,它让两个servlet相互通信成为可能,就像是浏            览器发送request请求一样

  • 获取RequestDispatcher对象

         ServletRequest 接口中定义了一个获取RequestDispatcher对象的方法

方法声明 功能描述

RequestDispatcher getRequestDispatcher (String path)

返回封装了某条路径所指定资源的 RequestDispatcher 对象。其中,参数 path 必须以“/”开头,用于表示当前 Web 应用的根目录。需要注意的是,WEB-INF 目录中的内容对 RequestDispatcher 对象也是可见的。因此,传递给 getRequestDispatcher(String path) 方法的资源可以是 WEB-INF 目录中的文件

         ServletContext接口中getNamedDispatcher(String path)和getRequestDispatcher(String path)方法

         ServletRequest接口和ServletContext接口中

             1.参数的区别

              参数虽然都是资源路径名,ServletContext接口的中参数路径必须以“/”开始,是相对于当前Servlet上下文根

              ServletRequest接口中的参数路径不仅可以相对于当前Servlet上下文根,还可以相对与当前Servlet路径
             2.跨WEB应用程序访问资源
              通过ServletContext.getContext()方法获取另个WEB应用程序的上下文环境对象来调用此方法将请求转发到另一个WEB应用程                序的资源
 

  • 获取到 RequestDispatcher 对象后,最重要的工作就是通知其他 Web 资源处理当前的 Servlet 请求

        RequestDispatcher 接口定义了两个相关方法:

方法声明 功能描述
forward(ServletRequest request,ServletResponse response) 该方法用于将请求从一个 Servlet 传递给另一个 Web 资源。在 Servlet 中,可以对请求做一个初步处理,然后通过调用这个方法,将请求传递给其他资源进行响应。需要注意的是,该方法必须在响应提交给客户端之前被调用,否则将抛出 IllegalStateException 异常
include(ServletRequest request,ServletResponse response)
该方法用于将其他的资源作为当前响应内容包含进来

Servlet实现重定向

猜你喜欢

转载自blog.csdn.net/qq_36310162/article/details/102586176
今日推荐