转发和重定向

1.转发和重定向的区别

  1. 转发是一次请求。因此浏览器地址栏上的地址不会发生变化。 重定向是两次请求。因此浏览器地址栏上的地址会发生变化。
  2. 转发的代码实现:request.getRequestDispatcher("/index").forward(request, response);重定向的代码实现:response.sendRedirect("/webapproot/index");
  3. 转发是服务器内部资源跳转,由服务器来控制。不可实现跨域访问。 重定向可以完成内部资源的跳转,也可以完成跨域跳转。
  4. 转发的方式可以访问WEB-INF目录下受保护的资源。 重定向相当于浏览器重新发送了一次请求,在浏览器直接发送的请求是无法访问WEB-INF目录下受保护的资源的。
  5. 转发原理:
    1. 假设发送了 /a 请求,执行了 AServlet
    2. 在AServlet 中通过request.getRequestDispatcher("/b").forward(request,response);转发到BServlet
    3. 从AServlet跳转到BServlet是服务器内部来控制的。对于浏览器而言,浏览器只发送了一个 /a 请求。
  6. 重定向原理:
    1. 假设发送了 /a 请求,执行了 AServlet
    2. 在AServlet 中通过response.sendRedirect("/webapproot/b")重定向到BServlet
    3. 此时服务器会将请求路径/webapproot/b响应给浏览器
    4. 浏览器会自发的再次发送/webapproot/b请求来访问BServlet
    5. 因此对于重定向来说,发送了两次请求,一次是 /webapproot/a,另一次是/webapproot/b

2.在SpringMVC中实现转发和重定向

2.1 SpringMVC实现转发
@Controller
public class IndexController {

    @RequestMapping("/a")
    public String toA(){
        return "forward:/b";
    }

    @RequestMapping("/b")
    public String toB(){
        return "b";
    }
}
2.2 SpringMVC实现重定向

普通重定向:

@Controller
public class IndexController {

    @RequestMapping("/a")
    public String toA(){
        return "redirect:/b";
    }

    @RequestMapping("/b")
    public String toB(){
        return "b";
    }
}

跨域重定向:

@RequestMapping("/a")
public String a(){
    return "redirect:http://localhost:8080/springmvc2/b";//全路径
}
posted @ 2024-07-03 22:54  BLBALDMAN  阅读(2)  评论(0编辑  收藏  举报