SpringMVC概述以及入门案例
目录
SpringMVC概述
为什么需要Spring MVC?
SpringMVC入门
工作流程分析
SpringMVC概述
SpringMVC技术与Servlet技术功能等同,均属于Web层开发技术。SpringMVC是一种基于java实现MVC模型的轻量级Web框架。
为什么需要Spring MVC?
在传统Java Web开发中,Servlet直接处理请求会导致代码臃肿(一个功能对应一个Servlet)。Spring MVC通过分层设计和组件解耦,让开发者更专注于业务逻辑。
SpringMVC入门
新建项目,模版选择org.apache.maven.archetypes:maven-archetype-webapp
添加完后没有java源项目,选择项目结构,在main下面新建名为java的目录并标记为源代码。
接下来导入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.3.20</version>
</dependency>
然后新建一个控制器类UserController:这个类里面有处理请求的方法,同时这个类要交给spring管理
@Controller
public class UserController {
//定义处理请求操作,设置访问路径
@RequestMapping("/save")
//设置当前操作的返回值类型
@ResponseBody
public String save(){
System.out.println("save 正在执行");
return "{'module':'springmvc'}";
}
}
//创建springmvc的配置文件
@Configuration
@ComponentScan("com.cc.controller")
public class SpringMvcConfig {
}
接下来定义servlet容器启动的配置类,在里面加载spring的配置。配置类要继承AbstractDispatcherServletInitializer类并重写3个方法,分别是:
- WebApplicationContext createServletApplicationContext:加载springMVC容器配置。加载时使用AnnotationConfigWebApplicationContext。
- String[] getServletMappings:设置哪些请求归属springMVC处理
- WebApplicationContext createRootApplicationContext:加载spring容器配置。
public class ServletConfig extends AbstractDispatcherServletInitializer {
//加载springmvc容器配置
@Override
protected WebApplicationContext createServletApplicationContext() {
AnnotationConfigWebApplicationContext app = new AnnotationConfigWebApplicationContext();
app.register(SpringMvcConfig.class);
return app;
}
//设置哪些请求归属springMVC处理
@Override
protected String[] getServletMappings() {
return new String[]{"/"}; //所有请求
}
//加载spring容器配置
@Override
protected WebApplicationContext createRootApplicationContext() {
return null;
}
}
接下来就要配置Tomcat,详细请看:IDEA2024如何创建Web项目以及配置Tomcat_idea社区版怎么配置tomcat-CSDN博客
启动后打开浏览器,输入localhost/save或者127.0.0.1/save
工作流程分析
启动服务器初始化过程:
- 服务器启动,执行ServletContainersInitConfig类,初始化web容器
- 执行createServletApplicationContext方法,创建了webApplicationContext对象
- 加载SpringMvcConfig
- 执行@ComponentScan加载对应的bean
- 加载UserController,每个@RequestMapping的名称对应一个具体的方法
- 执行getServletMapping方法,定义所有的请求都通过Spring。
单次请求过程:
- 发送请求localhost/save
- web容器发现所有的请求都经过SpringMVC,将请求交给SpringMVC处理
- 解析请求路径/save
- 由/save匹配执行对应的方法save()
- 执行save()
- 检测到有ResponseBody直接将save()方法的返回值作为响应求体返回给请求方