Servlet 请求转发和重定向的区别
先看看怎么实现的
// 1、容器内请求转发
request.getRequestDispatcher("url").forward(request,response);
// 2、浏览器重定向
response.sendRedirect("url");
共同点:
- 都可以产生页面跳转。
不同点:
-
url的变化
- 请求转发不会发生 url 的改变。
- 重定向的 url 会发生变化。
-
数据传递:
- 请求转发可以携带数据
- 重定向不能携带数据
-
路径问题:
- 相对路径:没有区别
- 绝对路径:
- 请求转发是在容器内部进行转发的。也就是说在当前web项目下,所以根目录就是 当前项目 /index.jsp 或者 /servlet/LoginServlet 既可以。
- 重定向是服务器向浏览器发送一个 response 响应,然后浏览器重新请求服务器,此时是来自服务器外部的请求,根目录就是当前服务器的根目录 webapp ,所以就要带上 当前 module 的项目名称 如:/webserviceModule/servlet/LoginServlet 或者 /webserviceModule/index.jsp
可以通过两个示意图来进行分析:
-
请求转发示意图:
-
浏览器重定向示意图:
执行顺序:1----->2 -----> 断开连接 -----> 3 -----> 4。