• Spring MVC的转发与重定向


    重定向是将用户从当前处理请求定向到另一个视图(例如 JSP)或处理请求,以前的请求(request)中存放的信息全部失效,并进入一个新的 request 作用域;转发是将用户对当前处理的请求转发给另一个视图或处理请求,以前的 request 中存放的信息不会失效。

    转发是服务器行为,重定向是客户端行为。

    1)转发过程

    客户浏览器发送 http 请求,Web 服务器接受此请求,调用内部的一个方法在容器内部完成请求处理和转发动作,将目标资源发送给客户;在这里转发的路径必须是同一个 Web 容器下的 URL,其不能转向到其他的 Web 路径上,中间传递的是自己的容器内的 request。

    在客户浏览器的地址栏中显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。

    2)重定向过程

    客户浏览器发送 http 请求,Web 服务器接受后发送 302 状态码响应及对应新的 location 给客户浏览器,客户浏览器发现是 302 响应,则自动再发送一个新的 http 请求,请求 URL 是新的 location 地址,服务器根据此请求寻找资源并发送给客户。

    在这里 location 可以重定向到任意 URL,既然是浏览器重新发出了请求,那么就没有什么 request 传递的概念了。在客户浏览器的地址栏中显示的是其重定向的路径,客户可以观察到地址的变化。重定向行为是浏览器做了至少两次的访问请求。

    在 Spring MVC 框架中,控制器类中处理方法的 return 语句默认就是转发实现,只不过实现的是转发到视图。示例代码如下:

    1. @RequestMapping("/register")
    2. public String register() {
    3. return "register"; //转发到register.jsp
    4. }

    在 Spring MVC 框架中,重定向与转发的示例代码如下:

    1. package controller;
    2. import org.springframework.stereotype.Controller;
    3. import org.springframework.web.bind.annotation.RequestMapping;
    4. @Controller
    5. @RequestMapping("/index")
    6. public class IndexController {
    7. @RequestMapping("/login")
    8. public String login() {
    9. //转发到一个请求方法(同一个控制器类可以省略/index/)
    10. return "forward:/index/isLogin";
    11. }
    12. @RequestMapping("/isLogin")
    13. public String isLogin() {
    14. //重定向到一个请求方法
    15. return "redirect:/index/isRegister";
    16. }
    17. @RequestMapping("/isRegister")
    18. public String isRegister() {
    19. //转发到一个视图
    20. return "register";
    21. }
    22. }

    在 Spring MVC 框架中,不管是重定向或转发,都需要符合视图解析器的配置,如果直接转发到一个不需要 DispatcherServlet 的资源,例如:

    return “forward:/html/my.html”;

    则需要使用 mvc:resources 配置:

  • 相关阅读:
    postgresql-DML
    Spring系列16:ApplicationContext扩展国际化
    【实验技术笔记】细胞表型检测之细胞粘附(细胞粘附实验) + 细胞侵袭(transwell实验)
    如何与Excel聊天?
    快速入门:如何使用HTTP代理进行网络请求
    【JVM】jvm的类加载机制
    java版Spring Cloud+Mybatis+Oauth2+分布式+微服务+实现工程管理系统
    列表和标签企业报告版的完整报告解决方案
    当当API接口开发系列(商品详情页面和按关键词搜索商品列表)
    zookeeper实现程序高可用
  • 原文地址:https://blog.csdn.net/unbelievevc/article/details/128130174