SpringMVC简介&&快速入门
- 1. SpringMVC概述
- 2. SpringMVC快速入门案例
- 2.1:创建web工程(Maven结构)
- 2.2:导入坐标(SpringMVC,Servlet)
- 2.2:设置tomcat服务器,加载web工程(tomcat插件)
- 2.4 创建SpringMVC配置类
- 2.5:定义处理请求的功能类(==UserController==)
- 2.6:将SpringMVC设定加载到Tomcat容器中
- 2.7:在浏览器中测试访问
- 3. 入门案例总结与工作流程解析
- 3.1:入门案例总结
- 3.2:工作流程解析
- 3.2.1:启动服务器初始化过程
- 3.2.2:单次请求过程
1. SpringMVC概述
SpringMVC是一种基于Java实现MVC模型的轻量级Web框架
- 使用简单、开发便捷(相比于Servlet)
- 灵活性强
SpringMVC主要负责的就是
- controller如何接收请求和数据
- 如何将请求和数据转发给业务层
- 如何将响应数据转换成json发回到前端
web程序大都基于三层架构来实现:
- 将后端服务器Servlet拆分成三层,分别是
web/controller
、service
和dao/mapper
(解耦合) - web/controller层主要由servlet来处理,负责页面请求和数据的收集以及响应结果给前端;
- service层主要负责业务逻辑的处理;
- dao/mapper层主要负责数据的增删改查操作;
2. SpringMVC快速入门案例
2.1:创建web工程(Maven结构)
创建方式参考文章Tomcat + Maven创建Web项目 + 在IDEA中使用Tomcat:https://lushimeng.blog.csdn.net/article/details/125239813
2.2:导入坐标(SpringMVC,Servlet)
<dependencies>
<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>
2.2:设置tomcat服务器,加载web工程(tomcat插件)
pom.xml中添加tomcat插件
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port> <!--http://127.0.0.1:8080/xxx-->
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
2.4 创建SpringMVC配置类
package com.itheima.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* @Author Mr.Lu
* @Date 2022/12/14 16:56
* @ClassName SpringMvcConfig
* @Version 1.0
*/
@Configuration
@ComponentScan("com.itheima.controller")
public class SpringMvcConfig {
}
2.5:定义处理请求的功能类(UserController)
package com.itheima.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @Author Mr.Lu
* @Date 2022/12/14 16:58
* @ClassName UserController
* @Version 1.0
*/
@Controller
public class UserController {
/**
* RequestMapping:设置当前操作的访问路径
* ResponseBody:设置当前操作的返回类型
* @return
*/
@RequestMapping("/save")
@ResponseBody
public String save(){
System.out.println("user save ...");
return "{'info':'springMvc'}";
}
@RequestMapping("/delete")
@ResponseBody
public String delete(){
System.out.println("user delete ...");
return "{'info':'springMvc delete'}";
}
}
2.6:将SpringMVC设定加载到Tomcat容器中
将webapp下的web.xml删除,换成config目录下的ServletContainersInitConfig类
package com.itheima.config;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;
/**
* @Author Mr.Lu
* @Date 2022/12/14 16:59
* @ClassName ServletContainersInitConfig
* @Version 1.0
*/
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
/**
* 加载springmvc配置类
* @return
*/
@Override
protected WebApplicationContext createServletApplicationContext() {
// 加载springmvc配置类
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
// 加载指定配置类
ctx.register(SpringMvcConfig.class);
return ctx;
}
/**
* 设置由springmvc控制器处理的请求映射路径
* @return
*/
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
/**
* 加载spring配置类
* @return
*/
@Override
protected WebApplicationContext createRootApplicationContext() {
return null;
}
}
2.7:在浏览器中测试访问
运行tomact:在2.2步配置了之后才会有,双击即可。
访问:http://localhost:8080/save
访问:http://localhost:8080/delete
注意事项
- SpringMVC是基于Spring的,在pom.xml只导入了
spring-webmvc
jar包的原因是它会自动依赖spring相关坐标 - AbstractDispatcherServletInitializer类是SpringMVC提供的快速初始化Web3.0容器的抽象类
- AbstractDispatcherServletInitializer提供了三个接口方法供用户实现
createServletApplicationContext方法,创建Servlet容器时,加载SpringMVC对应的bean并放入WebApplicationContext对象范围中,而WebApplicationContext的作用范围为ServletContext范围,即整个web容器范围
getServletMappings方法,设定SpringMVC对应的请求映射路径,即SpringMVC拦截哪些请求
createRootApplicationContext方法,如果创建Servlet容器时需要加载非SpringMVC对应的bean,使用当前方法进行,使用方式和createServletApplicationContext相同。
- createServletApplicationContext用来加载SpringMVC环境
- createRootApplicationContext用来加载Spring环境
3. 入门案例总结与工作流程解析
3.1:入门案例总结
- 一次性工作
- 创建工程,设置服务器,加载工程
- 导入坐标
- 创建web容器启动类,加载SpringMVC配置,并设置SpringMVC请求拦截路径
- SpringMVC核心配置类(设置配置类,扫描controller包,加载Controller控制器bean)
- 多次工作
- 定义处理请求的控制器类(controller包下的控制类)
- 定义处理请求的控制器方法,并配置映射路径(@RequestMapping)与返回json数据(@ResponseBody)
3.2:工作流程解析
3.2.1:启动服务器初始化过程
-
服务器启动,执行ServletContainersInitConfig类,初始化web容器.
-
执行createServletApplicationContext方法,创建了WebApplicationContext对象。该方法加载SpringMVC的配置类SpringMvcConfig来初始化SpringMVC的容器。
-
加载SpringMvcConfig配置类。
-
执行@ComponentScan加载对应的bean。扫描指定包及其子包下所有类上的注解,如Controller类上的@Controller注解。
-
加载UserController,每个@RequestMapping的名称对应一个具体的方法。此时就建立了
/save
和 save方法的对应关系。 -
执行getServletMappings方法,设定SpringMVC拦截请求的路径规则。其中
/
代表所拦截请求的路径规则,只有被拦截后才能交给SpringMVC来处理请求。
3.2.2:单次请求过程
- 发送请求
http://localhost:8080/save
. - web容器发现该请求满足SpringMVC拦截规则,将请求交给SpringMVC处理.
- 解析请求路径/save.
- 由/save匹配执行对应的方法save().
- 上面的第五步已经将请求路径和方法建立了对应关系,通过/save就能找到对应的save方法.
- 执行save().
- 检测到有@ResponseBody直接将save()方法的返回值作为响应体返回给请求方.