Spring Mvc:初识SpringMvc

这篇具有很好参考价值的文章主要介绍了Spring Mvc:初识SpringMvc。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

编译软件:IntelliJ IDEA 2019.2.4 x64
操作系统:win10 x64 位 家庭版
Maven版本:apache-maven-3.6.3
Mybatis版本:3.5.6
SpringMvc版本:5.3.1



Spring Mvc:初识SpringMvc,SpringMvc,spring,mvc,java


一、SpringMvc是什么?

①SpringMVC是Spring的一种子框架,它是Spring为【 展现层 | 表示层 | 表述层 | 控制层】提供的基于MVC设计理念的优秀的Web框架,是目前最主流的MVC框架。

什么是Mvc设计理念?

就是Mvc设计思想,即Model (业务模型),View(用户视图)与Controller(控制层)

为什么要使用Mvc设计理念?

简单来说,MVC设计理念提供了一种结构化的方式来组织应用程序的代码,使得开发人员可以更好地管理复杂性、提高开发效率,并实现可维护、可扩展和可测试的代码。

②SpringMVC是非侵入式

什么叫非侵入式?

它强调了一种开发模式 ,在使用框架的同时尽量减少对应用程序代码的依赖和修改,使得框架与应用程序之间的耦合度降低。 具体来说,在SpringMVC中,你可以编写普通的Java类作为控制器,并通过注解或配置将其标识为处理特定URL请求的方法。这种方式让您可以保持应用程序原有的结构和业务逻辑,而不需要强制按照框架的规范去改变代码的组织方式。

③SpringMVC是用来代替Servlet,在未用到SpringMvc框架之前,我们通常都是基于Servlet处理请求,做出响应。


二、SpringMvc是如何执行业务流程的?

SpringMvc执行业务的简易流程如下所示

Spring Mvc:初识SpringMvc,SpringMvc,spring,mvc,java

  1. 用户通过浏览器向后端发出请求。
  2. DispatcherServlet是一个Servlet,它作为应用程序的入口点接收所有的请求,并负责协调整个处理流程。
  3. DispatcherServlet根据配置的处理器映射器(HandlerMapping)查询找到适合处理当前请求的处理器(控制器)。
  4. 处理器映射器根据请求的URL或其他条件将请求映射到合适的处理器。处理器可以是一个类,通常会使用注解(如@Controller)标识,也可以是实现了特定接口(如HandlerInterceptor)的类。
  5. 处理器映射器将请求做简单的封装得到处理器执行链对象(HandlerExecutionChain)返回给DispatcherServlet,该链包括处理器本身、拦截器以及其他辅助处理器。
  6. DispatcherServlet通过拦截器链调用处理器的预处理方法(preHandle),这样可以进行一些共享数据的准备工作以及对请求进行预处理。
  7. 根据处理器执行链中的处理器,DispatcherServlet查找到与之相应的处理器适配器对象HandlerAdapter。这是由于处理器的种类不只一种,不同的处理器需要不同的处理器适配器 HandlerAdapter 来执行。
  8. 找到对应的处理器适配器后,DispatcherServlet立即调用处理器适配器,让其执行处理器。
  9. 处理器适配器执行处理器后,处理器将 ModelAndView 返回给处理器适配器。
  10. 处理器适配器在接收到处理器返回的 ModelAndView 后,直接将 ModelAndView 返回给DispatcherServlet。
  11. DispatcherServlet在接收到处理器适配器发送来的 ModelAndView 后,并不是将其作为最终的调度结果,而是首先调用执行处理器执行链中的拦截器后端方法。因为DispatcherServlet将ModelAndView 对象传递给了拦截器的后端方法,使后端方法可以修改 ModelAndView。
  12. 视图解析器的工作将视图名称与响应目标定位对象进行绑定,形成视图对象返回给DispatcherServlet。
  13. 在得到相应的视图对象后,DispatcherServlet调用视图对象的渲染方法,真正对视图进行渲染。
  14. DispatcherServlet执行了收尾工作,它执行处理器执行链拦截器的afterCompletion()方法。由 afterCompletion()方法发出对请求的最终响应。
  15. 浏览器接收到响应

三、如何搭建基于SpringMvc的第一个HelloWorld

3.1 搭建SpringMvc框架的步骤

①在IDEA中创建一个Maven项目,导入相关jar包

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

<!-- https://mvnrepository.com/artifact/org.thymeleaf/thymeleaf-spring5 -->
<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring5</artifactId>
    <version>3.0.12.RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

这里为何把javax.servlet-api的scope设为provided?

因为tomcat服务器中已经有了一个javax.servlet-api,若pop.xml中将javax.servlet-api这个jar包依赖范围设到Tomcat服务器中,则两个servlet的jar包会发生冲突。

Spring Mvc:初识SpringMvc,SpringMvc,spring,mvc,java

②编写配置文件

  • 在web.xml中注册DispatcherServlet

    • ur配置:/
      • init-param:contextConfigLocation,设置springmvc,xml配置文件路径【管理容器对象】
      • <load-on-startup>:设置DispatcherServlet优先级【启动服务器时,创建当前Servleti对象】
  • 在springmvc.xml实现以下功能

    • 开启组件扫描
    • 配置视图解析器【解析视图(设置视图前缀&后缀】

③编写请求处理器【Controller | Handler】

  • 使用@Controlleri注解标识请求处理器
  • 使用@RequestMapping注解标识处理方法【URL】

Spring Mvc:初识SpringMvc,SpringMvc,spring,mvc,java

④准备页面进行以测试

3.2 HelloWorld之实战

①准备

新建一个Maven工程,在其上搭建web工程环境,工程结构如下所示

Spring Mvc:初识SpringMvc,SpringMvc,spring,mvc,java

②在Maven工程中的pop.xml中导入相关jar包

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

<!-- https://mvnrepository.com/artifact/org.thymeleaf/thymeleaf-spring5 -->
<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring5</artifactId>
    <version>3.0.12.RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

③在spring的配置文件中【springmvc.xml】中开启组件扫描和配置视图解析器

<!--  开启组件扫描  -->
<context:component-scan base-package="spring"></context:component-scan>

<!-- 配置视图解析器【解析视图(设置视图前怨后缀)】 -->
<!--  配置视图解析器  -->
<bean id="thymeleafViewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
    <!--鹿置字符集属性 -->
    <property name="characterEncoding" value="UTF-8"></property>
    <!--鹿置模板引擎厨性-->
    <property name="templateEngine">
        <!--鹿置内bean-->
        <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
            <!--鹿置馍块的解析器雨性-->
            <property name="templateResolver">
                <!--     配置内部bean       -->
                <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
                    <!--  配置前缀        -->
                    <property name="prefix" value="/WEB-INF/pages/"></property>
                    <!--   配置后缀       -->
                    <property name="suffix" value=".html"></property>
                    <!--   配置字符集                     -->
                    <property name="characterEncoding" value="UTF-8"></property>
                </bean>
            </property>
        </bean>
    </property>
</bean>

④在web.xml中注册DispatcherServlet【前端控制器】

<!-- 注册 Dispatcherservlet【前满控制器】-->
<servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springmvc.xml</param-value>
    </init-param>

    <!--  设置DispatcherServlet优先级      -->
    <!--   启动服务器时,创建当前Servleti对象     -->
    <load-on-startup>1</load-on-startup>

</servlet>
<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

⑤从当前工程下/src/main/spring/Controller下新建一个类HelloController,作为请求处理器,使用@Controlleri注解标识它为请求处理器,并且使用@RequestMapping注解标识处理方法【URL】

Spring Mvc:初识SpringMvc,SpringMvc,spring,mvc,java

@Controller
//标识此类为请求处理器
public class HelloController {

    //配置url【/】  映射到wEB-INF/index.html
    @RequestMapping("/")
    public String toIndex(){
        //WEB-INF/pages/index.html
        //物理视图名=视图前餐+逻辑视图名+视图后缀
        return "index";
    }

    /**
     * 配置url【/HelloControllerMethod】,浏览器中的请求会基于该url,找到并进入下面的方法
     */
    @RequestMapping("/HelloControllerMethod")
    public String HelloControllerMethod(){
        System.out.println("--->请求已经进入到HelloControllerMethod方法中");
        //默认是转发请求
        return "success";
    }
}

⑥编写相关前端页面【index.html & success.html】

<!-- index.html -->
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>首页</h1>
<a th:href="@{/HelloControllerMethod}">发送请求</a>
</body>
</html>
<!-- success.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>转发成功,到达成功页面</title>
</head>
<body>
<h1>成功页面</h1>
</body>
</html>

⑦开启Tomcat服务器,运行测试

Spring Mvc:初识SpringMvc,SpringMvc,spring,mvc,java
Spring Mvc:初识SpringMvc,SpringMvc,spring,mvc,java
Spring Mvc:初识SpringMvc,SpringMvc,spring,mvc,java文章来源地址https://www.toymoban.com/news/detail-542660.html


到了这里,关于Spring Mvc:初识SpringMvc的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • (第六天)初识Spring框架-SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录

    ​ 昨天我们已经把Mybatis框架的基本知识全部学完,内容有Mybatis是一个半自动化的持久层ORM框架,深入学习编写动态SQL,Mybatis的关联映射,一对一、一对多、多对多、Mybatis的缓存机制,一二级缓存的开启和设置,缓存命中率、如何使用idea链接数据库自动生成pojo类等。我们学

    2024年02月10日
    浏览(67)
  • 【Spring框架全系列】初识Spring MVC(上)

    🌃哈喽,大家好,我是小浪。接着上篇博客,我们学习了springboot配置日志文件,到此,那么springboot的内容也更新的差不多了,由于是初学阶段,所以不学习那么深入,那么我们学习框架都知道SSM,当前我们已经学习完毕springboot了,那么今天就来学习第二个S,Spring MVC;📬📬

    2024年02月07日
    浏览(124)
  • 【SpringMVC】Spring Web MVC入门(一)

    前面我们了解了什么是Spring,那么今天我将为大家分享一种在日常网站开发中使用非常广泛的框架——Spring Web MVC。 先来看看官方解释。 Spring Web MVC是Spring Framework提供的Web组件,它是一个MVC设计模式的框架,主要用于开发灵活、松散耦合的Web应用程序。它提供了模型-视图-控

    2024年02月05日
    浏览(44)
  • 【JavaEE进阶】 初识Spring Web MVC

    Spring Web MVC 是 基于 Servlet API 构建的原始 Web 框架 ,从⼀开始就包含在Spring框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为)Spring MVC). Servlet是⼀种实现动态⻚⾯的技术.准确来讲Servlet是⼀套Java Web 开发的规范,或者说是⼀套Java Web 开发的

    2024年02月03日
    浏览(45)
  • 【SpringMVC】基于 Spring 的 Web 层MVC 框架

    🎄欢迎来到@边境矢梦°的csdn博文🎄 🎄本文主要梳理SpringMVC : 基于 Spring 的 Web 层MVC 框架 🎄 🌈我是边境矢梦°,一个正在为秋招和算法竞赛做准备的学生🌈 🎆喜欢的朋友可以关注一下 🫰🫰🫰 ,下次更新不迷路🎆 Ps: 月亮越亮说明知识点越重要 (重要性或者难度越大

    2024年02月08日
    浏览(41)
  • SpringMVC-2-Spring MVC拦截器详解:从入门到精通

    能够编写拦截器并配置拦截器 1.1 拦截器概念和作用 拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行 作用: 在指定的方法调用前后执行预先设定的代码 阻止原始方法的执行 总结:增强 核心原理:AOP思想 1.2 拦截器和过滤器的区别

    2024年02月12日
    浏览(49)
  • SpringMVC-1-解密Spring MVC:构建优雅、灵活的Web应用的秘诀

    能够编写SpringMVC入门案例 了解SpringMVC原理 思考:SpringMVC框架有什么优点? SpringMVC是一种基于Java实现MVC模型的轻量级Web框架 优点 使用简单,开发便捷(相比于Servlet) 天然的与Spring框架集成(如IOC容器、AOP等) 请求处理简化:支持用户请求数据自动映射封装 响应处理简化:

    2024年02月12日
    浏览(44)
  • 73.是否可以把我们所需的Bean都放入Spring­mvc子容器里面来管理(springmvc的spring-servlet.xml中配置全局扫描)?

    可以 , 因为父容器的体现无非是为了获取子容器不包含的bean, 如果全部包含在子容器完全用不到父容器了, 所以是可以全部放在springmvc子容器来管理的。 虽然可以这么做不过一般应该是不推荐这么去做的,一般人也不会这么干的。如果你的项目里有用到事物、或者aop记得也

    2024年02月21日
    浏览(46)
  • 【Java】Spring MVC程序开发

    Spring Web MVC是基于Servlet API构建的原始Web框架,从一开始就包含在Spring框架中。它的正式名称是“Spring Web MVC”来自其原模块的名称,但是它通常被称为“Spring MVC” 从上述定义我们可以看到两个信息: Spring MVC 是一个Web框架 Spring MVC 是基于Servlet API构建的 然而要真正的搞懂S

    2024年01月16日
    浏览(55)
  • Java配置方式使用Spring MVC

    上一节,我们学习了如何基于XML配置与注解的方式使用Spring MVC,涉及到三个XML配置文件:Spring配置文件(spring-config.xml)、Spring MVC配置文件(spring-mvc-config.xml)、Web部署描述文件(web.xml),这一节,我们通过案例学习如何基于Java配置类与注解的方式使用Spring MVC,只有Java配

    2024年02月05日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包