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

目录
打赏
0
0
0
0
6
分享
相关文章
Spring框架初识
Spring 是一个分层的轻量级开源框架,核心功能包括控制反转(IOC)和面向切面编程(AOP)。主要模块有核心容器、Spring 上下文、AOP、DAO、ORM、Web 模块和 MVC 框架。它通过 IOC 将配置与代码分离,简化开发;AOP 提供了声明性事务管理等增强功能。
31 21
Spring框架初识
通过springboot框架创建对象(一)
在Spring Boot中,对象创建依赖于Spring框架的核心特性——控制反转(IoC)和依赖注入(DI)。IoC将对象的创建和管理交由Spring应用上下文负责,开发者只需定义依赖关系。DI通过构造函数、setter方法或字段注入实现依赖对象的传递。Spring Boot的自动配置机制基于类路径和配置文件,自动为应用程序配置Spring容器,简化开发过程。Bean的生命周期包括定义扫描、实例化、依赖注入、初始化和销毁回调,均由Spring容器管理。这些特性提高了开发效率并简化了代码维护。
对Spring、SpringMVC、MyBatis框架的介绍与解释
Spring 框架提供了全面的基础设施支持,Spring MVC 专注于 Web 层的开发,而 MyBatis 则是一个高效的持久层框架。这三个框架结合使用,可以显著提升 Java 企业级应用的开发效率和质量。通过理解它们的核心特性和使用方法,开发者可以更好地构建和维护复杂的应用程序。
109 29
Spring Boot中的日志框架选择
在Spring Boot开发中,日志管理至关重要。常见的日志框架有Logback、Log4j2、Java Util Logging和Slf4j。选择合适的日志框架需考虑性能、灵活性、社区支持及集成配置。本文以Logback为例,演示了如何记录不同级别的日志消息,并强调合理配置日志框架对提升系统可靠性和开发效率的重要性。
理解和解决Spring框架中的事务自调用问题
事务自调用问题是由于 Spring AOP 代理机制引起的,当方法在同一个类内部自调用时,事务注解将失效。通过使用代理对象调用、将事务逻辑分离到不同类中或使用 AspectJ 模式,可以有效解决这一问题。理解和解决这一问题,对于保证 Spring 应用中的事务管理正确性至关重要。掌握这些技巧,可以提高开发效率和代码的健壮性。
128 13
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
互联网应用主流框架整合之Spring Boot开发
通过本文的介绍,我们详细探讨了Spring Boot开发的核心概念和实践方法,包括项目结构、数据访问层、服务层、控制层、配置管理、单元测试以及部署与运行。Spring Boot通过简化配置和强大的生态系统,使得互联网应用的开发更加高效和可靠。希望本文能够帮助开发者快速掌握Spring Boot,并在实际项目中灵活应用。
80 5
Spring Boot 两种部署到服务器的方式
本文介绍了Spring Boot项目的两种部署方式:jar包和war包。Jar包方式使用内置Tomcat,只需配置JDK 1.8及以上环境,通过`nohup java -jar`命令后台运行,并开放服务器端口即可访问。War包则需将项目打包后放入外部Tomcat的webapps目录,修改启动类继承`SpringBootServletInitializer`并调整pom.xml中的打包类型为war,最后启动Tomcat访问应用。两者各有优劣,jar包更简单便捷,而war包适合传统部署场景。需要注意的是,war包部署时,内置Tomcat的端口配置不会生效。
230 17
Spring Boot 两种部署到服务器的方式
springboot自动配置原理
Spring Boot 自动配置原理:通过 `@EnableAutoConfiguration` 开启自动配置,扫描 `META-INF/spring.factories` 下的配置类,省去手动编写配置文件。使用 `@ConditionalXXX` 注解判断配置类是否生效,导入对应的 starter 后自动配置生效。通过 `@EnableConfigurationProperties` 加载配置属性,默认值与配置文件中的值结合使用。总结来说,Spring Boot 通过这些机制简化了开发配置流程,提升了开发效率。
61 17
springboot自动配置原理
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等