天天看点

Servlet重定向和请求转发的区别

Servlet 请求转发和重定向的区别

先看看怎么实现的

// 1、容器内请求转发
request.getRequestDispatcher("url").forward(request,response);

// 2、浏览器重定向
response.sendRedirect("url");
           

共同点:

  1. 都可以产生页面跳转。

不同点:

  1. url的变化
    • 请求转发不会发生 url 的改变。
    • 重定向的 url 会发生变化。
  2. 数据传递:
    • 请求转发可以携带数据
    • 重定向不能携带数据
  3. 路径问题:
    • 相对路径:没有区别
    • 绝对路径:
      • 请求转发是在容器内部进行转发的。也就是说在当前web项目下,所以根目录就是 当前项目 /index.jsp 或者 /servlet/LoginServlet 既可以。
      • 重定向是服务器向浏览器发送一个 response 响应,然后浏览器重新请求服务器,此时是来自服务器外部的请求,根目录就是当前服务器的根目录 webapp ,所以就要带上 当前 module 的项目名称 如:/webserviceModule/servlet/LoginServlet 或者 /webserviceModule/index.jsp

可以通过两个示意图来进行分析:

  1. 请求转发示意图:
    Servlet重定向和请求转发的区别
  2. 浏览器重定向示意图:
    Servlet重定向和请求转发的区别
    执行顺序:1----->2 -----> 断开连接 -----> 3 -----> 4。

继续阅读