转发与重定向

请求转发

使用:forward 方法
流程:服务器将当前的request 和 response 对象交给指定的 web 组件处理
转发与重定向对浏览器不透明,浏览器视角:一次请求一次响应;地址栏 url 不变。

服务器端流程:

  • 获取转发对象 RequsetDispatcher
    • 从当前请求中获取转发对象,通过 HttpServletRequest 实现;
    • 通过servletContext 获取转发对象
  • 调用 转发对象的 forward 方法;

RequsetDispatcher 由 servlet 容器创建,封装一个由路径所标识的服务器资源。
有两个比较常用的方法, forward 和 include ;
include 方法让原组件和被转发到的组件都能输出响应信息

从当前请求中获取转发对象

RequestDispatcher rd = request.getRequestDispatcher("/servletFE");创建转发对象,设置转发路径
rd.forward(request,response);     // 转发

转发路径可以设置为绝对路径和相对路径,这里用的是绝对路径。

从 ServletContext 中获取转发对象

有两种获取方式,分别是通过转发对象名和转发路径;这里只能使用绝对路径;

所以一般为了避免失误,我们在通过路径获取转发对象的时候一般都是用绝对路径的

//        通过servletContext 获取转发对象; 有两种方式获取转发对象
        rd = this.getServletContext().getNamedDispatcher("ServletForwardEX");
        rd = this.getServletContext().getRequestDispatcher("/servletFE");
        rd.forward(request,response);     // 转发

请求重定向

通过 response 对象发送给浏览器一个新的 url 地址,让其重新请求;
即 两次请求两次响应

通过原请求的响应对象进行重定向

response.sendRedirect("servletRE");//设置请求重定向地址

重定向地址填写:
相对路径:重定向到项目资源
绝对路径:重定向到外部资源

总结

浏览器地址栏变化
请求范围

  • 请求转发: 只能在同一个 web-app 中
  • 重定向: 跨 web-app,服务器;重定位资源请求

请求过程

  • 请求转发:一次请求一次响应
  • 重定向: 两次请求两次响应
项目地址:https://github.com/wengfe/JAVA/tree/master/servletforward/src/main
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容