请求转发
使用: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,服务器;重定位资源请求
请求过程
- 请求转发:一次请求一次响应
- 重定向: 两次请求两次响应