SpringMVC概念
Notes
SpringMVC概述
- SpringMVC是一种基于Java实现MVC模型的轻量级Web框架
- SpringMVC技术与Servlet技术功能等同,均属于web层开发技术(表现层)
- 优点
- 使用简单,开发便捷(相对于Servlet)
- 灵活性强
入门案例
springMVC入门程序总结(1+N),通常一个项目配置一次就行,请求层需要多次使用
- 一次性工作-配置
- 创建工程,设置服务器,加载工程
- 导入坐标
- 创建web容器启动类,加载SpringMVC配置,并设置SpringMVC请求拦截路径
- SpringMVC核心配置类(设置配置类,扫描controller包,加载Controller控制器bean)
- 多次工作(请求控制类,后面会细说,入门主要关注配置)
创建Maven工程,选择web工程目录结构,设置Tomcat服务器用以启动项目。【后续开发都是使用springboot快速启动开发,这里只要了解一下Tomcat的配置即可】
需要导入的坐标如下
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>4.0.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>6.1.6</version>
</dependency>
//下面是tomcat和maven编译的插件,无需特别关注,后续使用springboot集成简化的这些配置
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>80</port>
<path>/</path>
</configuration>
</plugin>创建web容器启动类,加载SpringMVC配置,并设置SpringMVC请求拦截路径
//定义一个Servlet容器启动的配置类,在里面加载spring配置
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
//加载springMVC容器配置
protected WebApplicationContext createServletApplicationContext() {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.register(SpringMvcConfig.class);
return context;
}
//设置哪些请求归属springMVC处理
protected String[] getServletMappings() {
return new String[] {"/"};
}
//加载spring容器的配置
protected WebApplicationContext createRootApplicationContext() {
return null;
}
}这个启动器的作用就是使用servlet容器加载springMVC的配置,并拦截Tomcat的请求路径给到SpringMVC
SpringMVC核心配置类(设置配置类,扫描controller包,加载Controller控制器的bean)
//创建springMVC的配置文件,加载controller对应的bean
public class SpringMvcConfig {
}Contoller请求控制器的基本写法和bean管理
public class UserController {
//设置当前操作访问路径
//设置当前操作的返回值
public String save() {
System.out.println("user save ...");
return "{'modules':'springmvc'}";
}
}
补充一点
- AbstractDispatcherServletInitializer类是SpringMVC提供的快速初始化web3.0容器的抽象类
- AbstractDispatcherServletInitializer提供三个接口方法供用户实现(参考上文)
入门案例流程分析
服务器启动初始化过程
- 服务器启动,执行ServletContainersInitConfig类,初始化web容器
- 执行createServletApplicationContext方法,创建WebApplicationContext对象(SpringMVC容器)
- 加载SpringMvcConfig
- 执行@ComponentScan加载对应的bean
- 加载UserController,每个@RequestMapping的名词对应一个具体方法(但方法和路径的映射不是在ControllerBean中配置的,spring有统一配置)
- 执行getServletMappings方法,定义所有请求都通过SpringMVC
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
//加载springMVC容器配置
protected WebApplicationContext createServletApplicationContext() {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.register(SpringMvcConfig.class);
return context;
}
//设置哪些请求归属springMVC处理
protected String[] getServletMappings() {
return new String[] {"/"};
}
//加载spring容器的配置
protected WebApplicationContext createRootApplicationContext() {
return null;
}
}单次请求过程
- 发送请求localhost/save
- web容器发现所有的请求都经过SpringMVC,将请求交给SpringMVC处理
- 解析请求路径/save
- 由/save匹配执行对应方法save()
- 执行save()
- 检测到有@ResponsBody直接将save()方法的返回值作为响应体返回给请求方。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Hspace!