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";
               }
相关推荐
步步为营DotNet23 分钟前
深度解析CancellationToken:.NET中的优雅取消机制
java·前端·.net
JH30739 小时前
SpringBoot 优雅处理金额格式化:拦截器+自定义注解方案
java·spring boot·spring
Coder_Boy_10 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
invicinble10 小时前
对tomcat的提供的功能与底层拓扑结构与实现机制的理解
java·tomcat
较真的菜鸟10 小时前
使用ASM和agent监控属性变化
java
黎雁·泠崖10 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
qq_124987075312 小时前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
Coder_Boy_12 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
Mr_sun.12 小时前
Day06——权限认证-项目集成
java
瑶山12 小时前
Spring Cloud微服务搭建四、集成RocketMQ消息队列
java·spring cloud·微服务·rocketmq·dashboard