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";
               }
相关推荐
Zzxy1 分钟前
HikariCP连接池
java·数据库
罗超驿5 分钟前
Java数据结构_栈_算法题
java·数据结构·
希望永不加班11 分钟前
SpringBoot 主启动类解释:@SpringBootApplication 到底做了什么
java·spring boot·后端·spring
蝎子莱莱爱打怪39 分钟前
别再裸用 Claude Code 了!32 个亲测Skills + 8 个 MCP,开发效率直接拉满!
java·后端·claude
野犬寒鸦1 小时前
JVM垃圾回收机制面试常问问题及详解
java·服务器·开发语言·jvm·后端·算法·面试
_杨瀚博1 小时前
JAVA找出哪个类import了不存在的类
java·后端
OKkankan1 小时前
深入理解linux进程
java·linux·c++
java1234_小锋2 小时前
Java高频面试题:Spring-AOP通知和执行顺序?
java·开发语言·spring
番茄去哪了2 小时前
Java基础面试题day02
java·开发语言·面向对象编程
我是咸鱼不闲呀2 小时前
力扣Hot100系列22(Java)——[图论]总结(岛屿数量,腐烂的橘子,课程表,实现Trie(前缀树))
java·leetcode·图论