springMVC中转发和重定向的简介及写法

转发与重定向的区别及详解

核心区别
特性 转发(Forward) 重定向(Redirect)
请求次数 1次(服务器内部跳转) 2次(客户端重新发起请求)
地址栏变化 不变化 变化
代码示例 request.getRequestDispatcher("/index").forward(request, response); response.sendRedirect("/webapp/index");
资源访问范围 可访问WEB-INF目录下的资源 无法直接访问WEB-INF目录下的资源
跨域/外部跳转 仅限服务器内部资源 支持跨域或外部资源跳转

详细说明
  1. 请求与响应流程

    • 转发

      • 客户端发送请求到AServlet,服务器内部转发到BServlet,最终返回响应。

      • 浏览器地址栏始终显示初始请求(如/a)。

    • 重定向

      • 客户端发送请求到AServlet,服务器返回302状态码和新地址(如/b)。

      • 浏览器自动发起第二次请求到新地址,地址栏显示/b

  2. 资源访问限制

    • WEB-INF目录下的资源(如JSP)对客户端隐藏,只能通过服务器内部转发访问。

    • 重定向由浏览器发起新请求,无法直接访问WEB-INF资源。

  3. 适用场景

    • 转发

      • 需要共享请求数据(通过request.setAttribute)。

      • 隐藏资源路径(如跳转到受保护的页面)。

    • 重定向

      • 防止表单重复提交(如提交后跳转到结果页)。

      • 跨域跳转(如从http跳转到https)。

总结:转发适合服务器内部资源跳转且需保留请求数据,重定向适合跨域或防止重复提交的场景。在Spring MVC中,合理使用配置可简化视图和静态资源管理。


在springMVC中如何完成转发和重定向

当return a 时候返回了一个逻辑视图名称,这种方式跳转到视图,默认采用的就是forward方式跳转

复制代码
@RequestMapping("/a")
    public String toA() {
        //重定向使用较多
        return "a";
    }

转发语法格式是什么

注: 底层创建的是InternalResourceView对象

java 复制代码
@RequestMapping("/a")
        public String toA() {
            //转发的时候格式有特殊要求
            //return "forward:转发到下一个资源的路径";
            //这个就不是逻辑视图名称了,是以转发的方式跳转是一个资源的路径
            return "forward:/b";
        }

重定向语法格式

注: 这是两次请求。底层创建的是RedirectView对象

javascript 复制代码
@RequestMapping("/a")
               public String toA() {
                   //重定向使用较多
                   //转发的时候格式有特殊要求
                   //return "forward:转发到下一个资源的路径";
                   //这个就不是逻辑视图名称了
                   return "redirect:/b";
               }

重定向跨域写全路径,例如:

javascript 复制代码
@RequestMapping("/springmvc")
               public String toB() {
                   //重定向使用较多
                   //转发的时候格式有特殊要求
                   //return "forward:转发到下一个资源的路径";
                   //这个就不是逻辑视图名称了
                   return "redirect:http://localhost:8088/springmvc2/b";
               }
相关推荐
程序员张32 小时前
Maven编译和打包插件
java·spring boot·maven
ybq195133454313 小时前
Redis-主从复制-分布式系统
java·数据库·redis
weixin_472339463 小时前
高效处理大体积Excel文件的Java技术方案解析
java·开发语言·excel
小毛驴8504 小时前
Linux 后台启动java jar 程序 nohup java -jar
java·linux·jar
DKPT4 小时前
Java桥接模式实现方式与测试方法
java·笔记·学习·设计模式·桥接模式
好奇的菜鸟6 小时前
如何在IntelliJ IDEA中设置数据库连接全局共享
java·数据库·intellij-idea
DuelCode7 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
优创学社27 小时前
基于springboot的社区生鲜团购系统
java·spring boot·后端
幽络源小助理7 小时前
SpringBoot基于Mysql的商业辅助决策系统设计与实现
java·vue.js·spring boot·后端·mysql·spring
猴哥源码7 小时前
基于Java+springboot 的车险理赔信息管理系统
java·spring boot