概念
一种基于spring的表现层web框架,利用了spring框架的IoC和AOP特性,同时也提供了一些web应用程序开发所需的组件和功能。
案例
步骤:
1.创建maven项目
maven archetype选择org.apache.maven.archetypes:maven-archetype-webapp
类型
2.补全目录结构
3.导入jar包
删除pom.xml中多余的内容,添加springmvc需要的依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yuan</groupId>
<artifactId>springmvc_01_quickstart</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<!--1.导入坐标springmvc和servlet-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
</dependencies>
<!--添加tomcat插件-->
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>80</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
</project>
tomcat是一个web应用服务器,主要功能是提供 Web 应用程序的运行环境。它可以处理 HTTP 请求并将其传递给相应的 Web 应用程序进行处理。
注意
- 这里的springmvc,servlet和tomcat版本不能随便写,否则会起冲突。
- servlet的坐标为什么需要添加
<scope>provided</scope>
?- scope是maven中jar包依赖作用范围的描述,
- 如果不设置默认是
compile
,在编译、运行、测试时均有效 - 如果运行有效的话就会和tomcat中的servlet-api包发生冲突,导致启动报错
- provided代表的是该包只在编译和测试的时候用,运行的时候无效直接使用tomcat中的,就避免冲突
- 这里项目打包方式选择war而不是jar,具体区别参考Jar和War的区别
4.创建配置类
@Configuration
@ComponentScan("com.itheima.controller")
public class SpringMvcConfig {
}
5.创建Controller类
@Controller
public class UserController {
@RequestMapping("/save")
public void save(){
System.out.println("user save ...");
}
}
6.使用配置类替换web.xml
因为web项目需要在服务器启动,所以需要配置tomcat容器:删除web.xml,建立ServletContainersInitConfig
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
//让tomcat加载springmvc配置类
protected WebApplicationContext createServletApplicationContext() {
//初始化WebApplicationContext对象
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
//加载指定配置类
ctx.register(SpringMvcConfig.class);
return ctx;
}
//设置由springmvc控制器处理的请求映射路径
protected String[] getServletMappings() {
return new String[]{"/"};
}
//加载spring配置类
protected WebApplicationContext createRootApplicationContext() {
return null;
}
}
观察spring和springmvc配置所在的方法名的不同可以发现,root配置是spring(使用bean ioc aop基础框架功能),而springmvc承担了servlet的作用(controller)。
7.配置tomcat环境
案例工作流程分析
1.启动服务器初始化过程
- 服务器启动,执行
ServletContainersInitConfig
类,初始化web容器- 功能类似于以前的web.xml
- 执行
createServletApplicationContext
方法,创建了WebApplicationContext对象- 该方法加载SpringMVC的配置类SpringMvcConfig来初始化SpringMVC的容器
- 加载
SpringMvcConfig
配置类 - 执行
@ComponentScan
加载对应的bean- 扫描指定包及其子包下所有类上的注解,如Controller类上的@Controller注解
- 加载
UserController
,每个@RequestMapping的名称对应一个具体的方法- 此时就建立了
/save
和 save方法的对应关系
- 此时就建立了
- 执行getServletMappings方法,设定SpringMVC拦截请求的路径规则
/
代表所拦截请求的路径规则,只有被拦截后才能交给SpringMVC来处理请求
2.单次请求过程
- 发送请求
http://localhost/save
- web容器发现该请求满足SpringMVC拦截规则,将请求交给SpringMVC处理
- 解析请求路径/save
- 由/save匹配执行对应的方法save()
- 上面的第五步已经将请求路径和方法建立了对应关系,通过/save就能找到对应的save方法
- 执行save()
- 检测到有@ResponseBody直接将save()方法的返回值作为响应体返回给请求方