Spring框架中的SpringMvc三种方案实现的页面跳转(第十五课)

简介: Spring框架中的SpringMvc三种方案实现的页面跳转(第十五课)

本文章的大纲

页面跳转的三种方式 重定向 请求转发   ModelAndView实现页面的跳转 理解这三种跳转方式应用的场景和作用

本文章采用的技术是

配置文件+Maven+SpringMvc

最终目标:是理解页面跳转的三种方式和灵活运用所讲的三种方式.

本文章 是先理论后实战:

1 SpringMvc定义:

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts 2(一般老项目使用)等等。

2 SpringMvc的优点和缺点:

SpringMVC的优点:

1、springMVC是使用了MVC设计思想的轻量级web框架,对web层进行解耦,是的我们开发更简洁。

2、与Spring无缝衔接。

3、灵活的数据验证,格式化,数据绑定机制。

SpringMVC的缺点:

1, Spring与MVC 的Servlet API 耦合,难以脱离容器独立运行,

2, 太过于细分,开发效率低

3, 过度追求完美,有过度设计的危险

3 请求转发和重定向的区别:

  • 请求转发浏览器地址不会发生变化
  • 重定向跳转浏览器地址会发生变化,
  • 重定向是两次请求,请求转发是一次请求
  • 重定向属于浏览器跳转,请求转发属于服务器内部跳转
  • 重定向跳转页面是不能发送数据,
  • 请求转发是可以携带数据的

4 总结一

1.请求转发是在服务器完成的,重定向是在浏览器完成的
2.请求转发的速度快,重定向速度慢
3.请求转发的是同一次请求,重定向是二次不同的请求
4.请求转发地址栏没有变化,重定向地址栏有变化
5.转发必须是在同一台服务器下完成,重定向可以在不同的服务器下完成的

5 在xml文件中如何对控制器进行注册:

<bean name="页面跳转的地址" class="控制器完整的包名"></bean>

<bean name="/aaa" class="Com.SpringMvc.Controller.OneController"></bean>
<bean name="/bbb" class="Com.SpringMvc.Controller.TwoController"></bean>
<bean name="/ccc" class="Com.SpringMvc.Controller.ThreeController"></bean>

6 设置 监听控制层 在23设计模式属于观察这模式 这个方式只能监听ModelAndView

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--设置页面跳转的前缀和后缀-->
        <!--页面跳转的前缀-->
        <property name="prefix" value="WEB-INF/jsp/"></property>
        <!--跳转页面ModelAndView -->
        <!--设置页面跳转的后缀-->
        <property name="suffix" value=".jsp"></property>
    </bean>

因为本案例采用的是Maven工具开发所以在pom.xml文件中要导入依赖:官网:https://mvnrepository.com/search?q=Spring

<!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.3.23</version>
</dependency>

7 Demo1 $$ 请求转发的方式:

public class OneController  extends AbstractController {
    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest Request, HttpServletResponse Response) throws Exception {
        System.out.println("恭喜你进入了控制层的Controller");
        System.out.println("------------------------------------------");
        Request.setAttribute("name","王小三");
        Request.setAttribute("age",34);
        Request.setAttribute("sex","男");
        Request.setAttribute("height",167);
        Request.setAttribute("weight","78");
        Request.setAttribute("color","蓝色红色白色");
        Request.setAttribute("text1","我是对象一利用请求转发");
        Request.setAttribute("text","我是 Request对象内容利用 Request.getRequestDispatcher(\"index.jsp\").forward(Request,Response);");
        //请求转发的方式
        Request.getRequestDispatcher("WEB-INF/jsp/index.jsp").forward(Request,Response);
        return null;
    }

请求转发的运行结果

 

结果如图

 

8 Demo2 $$  重定向的方式的方式:

public class TwoController extends AbstractController {
    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest Request, HttpServletResponse Response) throws Exception {
        System.out.println("欢迎你进入第二个控制器的内容TwoController");
        //重定向的内容
        //重定向 不能带数据 跳转的地址变为了index.jsp
        /*浏览器访问不了WEB-INF /jsp/index.jsp*/
        Request.getSession().setAttribute("text", "欢迎你进入第二个控制器的内容TwoController");
        //  Response.sendRedirect("WEB-INF/jsp/index.jsp");
        Response.sendRedirect("WEB-INF/jsp/index.jsp");
        return null;
    }

结果二

9 Demo3 $$  ModelAndView 方式:

public class ThreeController  extends AbstractController {
    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest Request, HttpServletResponse Response) throws Exception {
        /*SpingMvc独有的创建方式*/
        /*ModelAndView 带上数据跳转页面  Model  View   模型  数据 */
        System.out.println("");
        ModelAndView mav= new ModelAndView();
        //带上数据
        mav.addObject("A属性","第三种ModelAndView欢迎你进入第三个控制器的内容TwoControllerA值");
        mav.addObject("B","第三种ModelAndView欢迎你进入第三个控制器的内容TwoControllerB");
        mav.addObject("C","第三种ModelAndView欢迎你进入第三个控制器的内容TwoControllerC");
        mav.addObject("D","第三种ModelAndView欢迎你进入第三个控制器的内容TwoControllerD");
        mav.addObject("name","我是ModelAndView");
        mav.addObject("age",34);
        mav.addObject("sex","男");
        mav.addObject("height",167);
        mav.addObject("weight",67);
        mav.addObject("color","黄色蓝色白色粉色");
        //跳转页面 等价于 HttpServletRequest
        mav.setViewName("index");
        return mav;
    }

运行结果

最终结论:

请求转发是在服务器完成的,重定向是在浏览器完成的

请求转发的速度快,重定向速度慢

请求转发的是同一次请求,重定向是二次不同的请求

请求转发地址栏没有变化,重定向地址栏有变化

转发必须是在同一台服务器下完成,重定向可以在不同的服务器下完成的

ModelAndView跳转页面 等价于 HttpServletRequest

设置 监听控制层 在23设计模式属于观察这模式 这个方式只能监听ModelAndView

下文会讲述SpringMvc注解的方式页面跳转

相关文章
|
9月前
|
安全 Java Ruby
我尝试了所有后端框架 — — 这就是为什么只有 Spring Boot 幸存下来
作者回顾后端开发历程,指出多数框架在生产环境中难堪重负。相比之下,Spring Boot凭借内置安全、稳定扩展、完善生态和企业级支持,成为构建高可用系统的首选,真正经受住了时间与规模的考验。
658 2
|
10月前
|
XML JSON Java
Spring框架中常见注解的使用规则与最佳实践
本文介绍了Spring框架中常见注解的使用规则与最佳实践,重点对比了URL参数与表单参数的区别,并详细说明了@RequestParam、@PathVariable、@RequestBody等注解的应用场景。同时通过表格和案例分析,帮助开发者正确选择参数绑定方式,避免常见误区,提升代码的可读性与安全性。
|
8月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
8月前
|
前端开发 Java 微服务
《深入理解Spring》:Spring、Spring MVC与Spring Boot的深度解析
Spring Framework是Java生态的基石,提供IoC、AOP等核心功能;Spring MVC基于其构建,实现Web层MVC架构;Spring Boot则通过自动配置和内嵌服务器,极大简化了开发与部署。三者层层演进,Spring Boot并非替代,而是对前者的高效封装与增强,适用于微服务与快速开发,而深入理解Spring Framework有助于更好驾驭整体技术栈。
|
8月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
663 8
|
9月前
|
监控 Kubernetes Cloud Native
Spring Batch 批处理框架技术详解与实践指南
本文档全面介绍 Spring Batch 批处理框架的核心架构、关键组件和实际应用场景。作为 Spring 生态系统中专门处理大规模数据批处理的框架,Spring Batch 为企业级批处理作业提供了可靠的解决方案。本文将深入探讨其作业流程、组件模型、错误处理机制、性能优化策略以及与现代云原生环境的集成方式,帮助开发者构建高效、稳定的批处理系统。
817 1
|
11月前
|
安全 Java 微服务
Java 最新技术和框架实操:涵盖 JDK 21 新特性与 Spring Security 6.x 安全框架搭建
本文系统整理了Java最新技术与主流框架实操内容,涵盖Java 17+新特性(如模式匹配、文本块、记录类)、Spring Boot 3微服务开发、响应式编程(WebFlux)、容器化部署(Docker+K8s)、测试与CI/CD实践,附完整代码示例和学习资源推荐,助你构建现代Java全栈开发能力。
972 1
|
10月前
|
Cloud Native Java API
Java Spring框架技术栈选和最新版本及发展史详解(截至2025年8月)-优雅草卓伊凡
Java Spring框架技术栈选和最新版本及发展史详解(截至2025年8月)-优雅草卓伊凡
1653 0
|
11月前
|
Java Spring 容器
SpringBoot自动配置的原理是什么?
Spring Boot自动配置核心在于@EnableAutoConfiguration注解,它通过@Import导入配置选择器,加载META-INF/spring.factories中定义的自动配置类。这些类根据@Conditional系列注解判断是否生效。但Spring Boot 3.0后已弃用spring.factories,改用新格式的.imports文件进行配置。
1375 0
|
12月前
|
人工智能 Java 测试技术
Spring Boot 集成 JUnit 单元测试
本文介绍了在Spring Boot中使用JUnit 5进行单元测试的常用方法与技巧,包括添加依赖、编写测试类、使用@SpringBootTest参数、自动装配测试模块(如JSON、MVC、WebFlux、JDBC等),以及@MockBean和@SpyBean的应用。内容实用,适合Java开发者参考学习。
1236 0