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";
               }
相关推荐
江沉晚呤时15 分钟前
深入解析外观模式(Facade Pattern)及其应用 C#
java·数据库·windows·后端·microsoft·c#·.netcore
爱吃鱼饼的猫35 分钟前
【Spring篇】Spring的生命周期
java·开发语言
程序猿大波43 分钟前
基于Java,SpringBoot和Vue高考志愿填报辅助系统设计
java·vue.js·spring boot
m0_740154671 小时前
SpringMVC 请求和响应
java·服务器·前端
橘猫云计算机设计1 小时前
基于Java的班级事务管理系统(源码+lw+部署文档+讲解),源码可白嫖!
java·开发语言·数据库·spring boot·微信小程序·小程序·毕业设计
多多*1 小时前
JavaEE企业级开发 延迟双删+版本号机制(乐观锁) 事务保证redis和mysql的数据一致性 示例
java·运维·数据库·redis·mysql·java-ee·wpf
计算机-秋大田1 小时前
基于Spring Boot的个性化商铺系统的设计与实现(LW+源码+讲解)
java·vue.js·spring boot·后端·课程设计
士别三日&&当刮目相看1 小时前
JAVA学习*String类
java·开发语言·学习
烂蜻蜓2 小时前
深度解读 C 语言运算符:编程运算的核心工具
java·c语言·前端
王嘉俊9252 小时前
ReentranLock手写
java·开发语言·javase