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注解的方式页面跳转

相关文章
|
22天前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
|
1月前
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
36 0
|
13天前
|
缓存 Java Spring
实战指南:四种调整 Spring Bean 初始化顺序的方案
本文探讨了如何调整 Spring Boot 中 Bean 的初始化顺序,以满足业务需求。文章通过四种方案进行了详细分析: 1. **方案一 (@Order)**:通过 `@Order` 注解设置 Bean 的初始化顺序,但发现 `@PostConstruct` 会影响顺序。 2. **方案二 (SmartInitializingSingleton)**:在所有单例 Bean 初始化后执行额外的初始化工作,但无法精确控制特定 Bean 的顺序。 3. **方案三 (@DependsOn)**:通过 `@DependsOn` 注解指定 Bean 之间的依赖关系,成功实现顺序控制,但耦合性较高。
实战指南:四种调整 Spring Bean 初始化顺序的方案
|
26天前
|
前端开发 Java 数据库连接
Spring 框架:Java 开发者的春天
Spring 框架是一个功能强大的开源框架,主要用于简化 Java 企业级应用的开发,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,并由Pivotal团队维护。
43 1
Spring 框架:Java 开发者的春天
|
19天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
37 2
|
18天前
|
消息中间件 NoSQL Java
springboot整合常用中间件框架案例
该项目是Spring Boot集成整合案例,涵盖多种中间件的使用示例,每个案例项目使用最小依赖,便于直接应用到自己的项目中。包括MyBatis、Redis、MongoDB、MQ、ES等的整合示例。
74 1
|
26天前
|
Java 数据库连接 开发者
Spring 框架:Java 开发者的春天
【10月更文挑战第27天】Spring 框架由 Rod Johnson 在 2002 年创建,旨在解决 Java 企业级开发中的复杂性问题。它通过控制反转(IOC)和面向切面的编程(AOP)等核心机制,提供了轻量级的容器和丰富的功能,支持 Web 开发、数据访问等领域,显著提高了开发效率和应用的可维护性。Spring 拥有强大的社区支持和丰富的生态系统,是 Java 开发不可或缺的工具。
|
1月前
|
人工智能 开发框架 Java
总计 30 万奖金,Spring AI Alibaba 应用框架挑战赛开赛
Spring AI Alibaba 应用框架挑战赛邀请广大开发者参与开源项目的共建,助力项目快速发展,掌握 AI 应用开发模式。大赛分为《支持 Spring AI Alibaba 应用可视化调试与追踪本地工具》和《基于 Flow 的 AI 编排机制设计与实现》两个赛道,总计 30 万奖金。
|
2月前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
1月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
164 2