SpringMVC简介
尚硅谷 2023 SSM:BV1AP411s7D7,p100~p139
https://www.wolai.com/v5Kuct5ZtPeVBk4NBUGBWF
SpringMVC 介绍
官网地址:Spring Web MVC :: Spring Framework
Spring Web MVC是基于 Servlet API 构建的原始Web框架,从一开始就包含在Spring Framework中。正式名称“Spring Web MVC”来自其源模块的名称( spring-webmvc ),但它通常被称为“Spring MVC”。
在控制层框架历经Strust、WebWork、Strust2等诸多产品的历代更迭之后,目前业界普遍选择了SpringMVC作为Java EE项目表述层开发的首选方案。之所以能做到这一点,是因为SpringMVC具备如下显著优势:
- Spring 家族原生产品,与IOC容器等基础设施无缝对接
- 表述层各细分领域需要解决的问题全方位覆盖,提供全面解决方案
- 代码清新简洁,大幅度提升开发效率
- 内部组件化程度高,可插拔式组件即插即用,想要什么功能配置相应组件即可
- 性能卓著,尤其适合现代大型、超大型互联网项目要求
JavaWeb 项目,都是基于Servlet API开发的,SpringMVC 进行了高度的集成和简化,使得开发专注于业务逻辑的处理,而更少地关注于数据的获取和响应。
原生Servlet开发:
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String userName = request.getParameter("userName");
System.out.println("userName="+userName);
}基于SpringMVC开发:
@RequestMapping("/user/login")
public String login(@RequestParam("userName") String userName,Sting password){
log.debug("userName="+userName);
//调用业务即可
return "result"; // 返回逻辑视图
}SpringMVC 作用

SSM框架构建起单体项目的技术栈需求!其中的SpringMVC负责表述层(控制层)实现简化!
SpringMVC的作用主要覆盖的是表述层,例如:请求映射、数据输入、视图界面、请求分发、表单回显、会话控制、过滤拦截、异步交互、文件上传、文件下载、数据校验、类型转换等等。核心作用就是:
- 简化前端参数接收
- 简化后端数据响应
核心组件和调用流程

SpringMVC 组件理解:
DispatcherServlet: SpringMVC提供,使用web.xml配置进行注册,使其接管请求,它是整个流程处理的核心,所有请求都经过它的处理和分发。[CEO]HandlerMapping: SpringMVC提供,加入IoC容器方可生效,它内部缓存 handler 和 handler访问路径,被DispatcherServlet调用,用于查找路径对应的handler。[秘书]HandlerAdapter: SpringMVC提供,加入IoC容器方可生效,它可以处理请求参数和处理响应数据数据,每次DispatcherServlet都是通过handlerAdapter间接调用handler,他是handler和DispatcherServlet之间的适配器![经理]Handler: handler又称处理器,是Controller类内部的方法简称。由我们自己定义,用来接收参数,向后调用业务,最终返回响应结果![打工人]ViewResovler: 视图解析器。SpringMVC提供,加入IoC容器方可生效。主要作用是简化模版视图页面查找。视图解析器,相对其他的组件不是必须的;对于前后端分离项目,后端只返回JSON数据,不返回页面,那就不需要视图解析器。[财务]
快速开始
新建Web项目
导入依赖
<properties> <spring.version>6.0.9</spring.version> <servlet.api>10.0.0</servlet.api> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!-- springioc相关依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <!-- springwebmvc相关依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!-- Servlet API --> <dependency> <groupId>jakarta.platform</groupId> <artifactId>jakarta.jakartaee-web-api</artifactId> <version>${servlet.api}</version> <scope>provided</scope> </dependency> </dependencies>编写SpringMVC 核心组件配置类:声明SpringMVC组件需要的信息
- 将 HandlerMapping (CEO)纳入IOC容器
- 将 HandlerAdapter (经理)纳入IOC容器
- 将 ViewResovler (财务)纳入IOC容器(可选)
导入handlerMapping和handlerAdapter的两种方式:
- 自动导入handlerMapping和handlerAdapter。springmvc会检查是否配置handlerMapping和handlerAdapter,没有配置默认加载
- 使用
@Bean将handlerMapper和handlerAdapter装入IOC容器
@Configuration @ComponentScan(basePackages = "com.guitar.mvc.controller") // 实现 WebMvcConfigurer 可以提供相关配置的默认信息(即使用接口的默认实现) public class SpringMvcConfig implements WebMvcConfigurer { @Bean // HM public HandlerMapping handlerMapping(){ return new RequestMappingHandlerMapping(); } @Bean // HA public HandlerAdapter handlerAdapter(){ return new RequestMappingHandlerAdapter(); } }编写 WebAPP 配置类:提供WebApp的配置信息,让Spring接管WebApp
WebAPP 在转入类的时候,会检测类是否实现了
WebApplicationInitializer接口,如果实现了,则调用接口中的onStart()方法完成Web上下文的初始化。这个接口是 Servlet API 提供的,也是规范要求的。SpringMVC 封装了这个接口,通过继承
AbstractAnnotationConfigDispatcherServletInitializer这个抽象类,即可完成WebApp的配置,让Spring接管WebApp,onStart()由SpringMVC在这个类的祖父类中实现。public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { /** * 指定service / mapper层的配置类 */ @Override protected Class<?>[] getRootConfigClasses() { return null; } /** * 指定springmvc的配置类,让配置类的配置信息生效 */ @Override protected Class<?>[] getServletConfigClasses() { return new Class<?>[] { SpringMvcConfig.class }; } /** * 设置 DispatcherServlet 的处理路径! * 一般情况下为 / 代表处理所有请求! */ @Override protected String[] getServletMappings() { return new String[] { "/" }; } }编写Controller + handler
Controller是MVC架构中对业务类的统称,handler是SpringMVC对业务方法的称呼。
@Controller // 将此类作为Conrtoller纳入IOC public class HelloController { @RequestMapping("/hello") // 配置请求路径 @ResponseBody // 标识返回响应体,不经过视图解析器 // 一个业务方法即称为一个 handler public String hello(){ System.out.println("HelloController.hello"); return "Hello SpringMVC!!"; } }配置Web容器(Tomcat)并启动
访问:
http://localhost:8080/WebApp上下文/helloWebApp上下文:独立于Web容器外的部分,是访问Web容器的“前缀”,与Web实现无关。

image-20231202203314236
