• springmvc的转发和重定向的案例演示 到底什么是转发和重定向两者有什么区别?


     案例演示

    Spring MVC中,你可以使用`ModelAndView`或直接返回`String`来实现转发和重定向。以下是转发和重定向的示例:

    ### 1. 使用`ModelAndView`

    #### 转发(Forward)

    ```java

    1. @RequestMapping("/forwardDemo")
    2. public ModelAndView forwardWithModelAndView() {
    3.     ModelAndView mav = new ModelAndView();
    4.     mav.addObject("message", "This is a forwarded message.");
    5.     mav.setViewName("forward:/targetPage");
    6.     return mav;
    7. }


    ```

    在上述代码中,`forward:/targetPage`将请求转发到`/targetPage` URL。

    #### 重定向(Redirect)

    ```java

    1. @RequestMapping("/redirectDemo")
    2. public ModelAndView redirectToExternalURLWithModelAndView() {
    3.     ModelAndView mav = new ModelAndView();
    4.     mav.setViewName("redirect:http://www.google.com");
    5.     return mav;
    6. }


    ```

    上述代码将请求重定向到外部URL `http://www.google.com`。

    ### 2. 直接返回`String`

    #### 转发

    ```java

    1. @RequestMapping("/forwardDemo")
    2. public String forwardWithString() {
    3.     return "forward:/targetPage";
    4. }


    ```

    #### 重定向

    ```java

    1. @RequestMapping("/redirectDemo")
    2. public String redirectWithString() {
    3.     return "redirect:http://www.google.com";
    4. }


    ```

    在这些示例中,`/targetPage`是你的应用中另一个处理方法的URL,而`http://www.google.com`是外部网站的URL。根据你的具体需求,你可以将这些URL替换为你想要的任何有效URL。

    注意,当你使用`forward`时,客户端(例如浏览器)不知道这个转发的存在,因为它是在服务器内部发生的。而使用`redirect`时,浏览器会收到一个新的URL,并导航到该URL。

    什么是转发和重定向    两者有什么区别?

    转发(Forward)和重定向(Redirect)是Web开发中两种常用的导航方式,它们在功能和用途上有显著的区别:

    ### 转发 (Forward)

    1. **服务器端行为**:转发是在服务器内部完成的。当一个请求到达服务器,服务器可以将这个请求转发给另一个资源进行处理,客户端并不知道发生了转发。
       
    2. **地址不变**:在浏览器地址栏中,用户看到的URL不会发生变化,因为整个转发过程在服务器端完成,客户端没有被重新定向到其他地址。
       
    3. **效率较高**:由于整个过程在同一个服务器内部完成,没有额外的客户端到服务器的往返,因此效率相对较高。
       
    4. **共享请求范围的数据**:在转发前后,可以在请求范围内共享数据,因为它们是同一次请求的不同部分。

    ### 重定向 (Redirect)

    1. **客户端行为**:重定向涉及到两次请求。首先,客户端发送一个请求到服务器,然后服务器以一个特殊的响应指示客户端向另一个URL发送第二次请求。

    2. **地址改变**:浏览器地址栏中的URL会改变,因为浏览器被指示访问一个新的URL。

    3. **效率相对较低**:由于涉及两次完整的客户端-服务器往返,所以相对于转发,重定向的效率较低。

    4. **无法共享请求范围的数据**:由于重定向涉及两次完全独立的请求,所以你不能在两次请求之间共享请求范围的数据。但是,你可以使用会话范围或URL参数来传递数据。

    ### 总结

    - **转发**是服务器内部的行为,只涉及一次请求,地址栏不变。
    - **重定向**涉及到客户端和两次请求,地址栏会显示新的URL。

    选择使用转发还是重定向取决于你的具体需求。例如,如果你完成了表单的提交并想防止重复提交,重定向通常是一个好选择。如果你只是想在服务器内部导航,而不想改变浏览器中显示的URL,那么转发可能更合适。

  • 相关阅读:
    c++ void*讲解
    技战法-信息收集
    HTML5-CSS3
    手机裁剪音频的软件有哪些?来看看这几个吧
    旋转链表-双指针思想-LeetCode61
    Centos7环境下搭建Rabbitmq 集群
    python二次开发Solidworks:齿轮生成器
    手托html页面和在浏览器中输入地址访问的背后不同原因、默认访问的工程和默认访问的资源
    FL Studio21傻瓜式编曲音乐编辑器FL水果软件
    写给自己:入职两个月的收获与变化
  • 原文地址:https://blog.csdn.net/qq_58647634/article/details/132639103