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

相关文章
|
26天前
|
XML 安全 Java
|
29天前
|
缓存 NoSQL Java
什么是缓存?如何在 Spring Boot 中使用缓存框架
什么是缓存?如何在 Spring Boot 中使用缓存框架
46 0
|
4天前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
11天前
|
IDE Java 测试技术
互联网应用主流框架整合之Spring Boot开发
通过本文的介绍,我们详细探讨了Spring Boot开发的核心概念和实践方法,包括项目结构、数据访问层、服务层、控制层、配置管理、单元测试以及部署与运行。Spring Boot通过简化配置和强大的生态系统,使得互联网应用的开发更加高效和可靠。希望本文能够帮助开发者快速掌握Spring Boot,并在实际项目中灵活应用。
28 5
|
22天前
|
缓存 Java 数据库连接
Spring框架中的事件机制:深入理解与实践
Spring框架是一个广泛使用的Java企业级应用框架,提供了依赖注入、面向切面编程(AOP)、事务管理、Web应用程序开发等一系列功能。在Spring框架中,事件机制是一种重要的通信方式,它允许不同组件之间进行松耦合的通信,提高了应用程序的可维护性和可扩展性。本文将深入探讨Spring框架中的事件机制,包括不同类型的事件、底层原理、应用实践以及优缺点。
51 8
|
25天前
|
缓存 NoSQL Java
Spring Boot中的分布式缓存方案
Spring Boot提供了简便的方式来集成和使用分布式缓存。通过Redis和Memcached等缓存方案,可以显著提升应用的性能和扩展性。合理配置和优化缓存策略,可以有效避免常见的缓存问题,保证系统的稳定性和高效运行。
43 3
|
1月前
|
存储 Java 关系型数据库
在Spring Boot中整合Seata框架实现分布式事务
可以在 Spring Boot 中成功整合 Seata 框架,实现分布式事务的管理和处理。在实际应用中,还需要根据具体的业务需求和技术架构进行进一步的优化和调整。同时,要注意处理各种可能出现的问题,以保障分布式事务的顺利执行。
57 6
|
1月前
|
Java Kotlin 索引
学习Spring框架特性及jiar包下载
Spring 5作为最新版本,更新了JDK基线至8,修订了核心框架,增强了反射和接口功能,支持响应式编程及Kotlin语言,引入了函数式Web框架,并提升了测试功能。Spring框架可在其官网下载,包括文档、jar包和XML Schema文档,适用于Java SE和Java EE项目。
34 0
|
Java Spring
spring框架之AOP模块(面向切面),附带通知类型---超详细介绍
spring框架之AOP模块(面向切面),附带通知类型---超详细介绍
133 0
|
缓存 监控 Java
Spring框架之AOP(面向切面编程)
Spring框架之AOP(面向切面编程)
64 0