DAY4 -- SpringMVC
其他springMvc笔记
SpringMVC _ 起步(http://mxzfun.xyz/index.php/archives/553/)
springMvc _ 请求与响应(http://mxzfun.xyz/index.php/archives/557)
SpringMVC _ REST风格(http://mxzfun.xyz/index.php/archives/558)
SpringMVC _ SSM整合、拦截器(http://mxzfun.xyz/index.php/archives/562/)
零、学习目标
- 掌握基于springMVC获取请求参数与响应json数据操作。
- 熟练应用基于REST风格的请求路径设置与参数传递。
- 能够根据实际业务建立前后端开发通信协议并进行实现。
- 基于SSM整合技术开发任意业务模块功能。
一、SpringMVC简介
1.1 SpringMVC概述
- SpringMVC是一种基于Java实现MVC模型的轻量级web框架
1.1.1 优点
- 使用简单,开发便捷(相比于servlet)灵活性强。
1.1.2 小结
- SpringMVc是一种表现层框架技术。
- SpringMVC用于进行表现层功能开发。
1.2 SpringMVC入门案例
- 虽然但是,我这访问/save是404.....
1.2.1 导坐标(SpringMVC坐标与servlet坐标)
<!-- 导坐标(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>
<scope>provided</scope>
</dependency>
</dependencies>
1.2.2 创建SpringMVC控制器类(等同于Servlet功能)
//定义controller
//使用@Controller定义Bean
@Controller
public class UserController {
//设置当前操作的访问路径
@RequestMapping("/save")
//设置当前操作的返回值类型
@ResponseBody
public String save(){
System.out.println("user save....");
return "{'module':'springmvc'}";
}
}
1.2.3 初始化SpringMVC环境(同Spring环境),设定SpringMVC加载对应的bean
//创建springmvc的配置文件,加载controller对应的bean
@Configuration
@ComponentScan("com.li.controller")
public class SpringMvcConfig {
}
1.2.4 初始化Servlet容器,加载SpringMVC环境,并设置SpringMVC技术处理的请求
//定义一个servlet容器启动的配置类,在里面加载spring的配置
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
//加载springMVC容器配置
@Override
protected WebApplicationContext createServletApplicationContext() {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringMvcConfig.class);
return ctx;
}
//设置哪些请求归属springMVC处理
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
//加教spring容器配置
@Override
protected WebApplicationContext createRootApplicationContext() {
return null;
}
}
1.2.5 知识点
1.2.6 入门案例总结
一次性工作
- 创建工程,设置服务器,加载工程
- 导入坐标
- 创建web容器启动类,加载SpringMVC配置,并设置SpringMVC请求拦截路径
- SpringMVC核心配置类(设置配置类,扫描controller包,加载Controller控制器bean)
多次工作
- 定义处理请求的控制器类
- 定义处理请求的控制器方法,并配置映射路径(@RequestMapping)与返回json数据。
1.2.7 注意事项
- 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环境。
1.3 入门案例工作流程分析
1.3.1 启动服务器初始化过程
- 服务器启动,执行ServletContainersInitconfig类,初始化web容器。
- 执行createServletApplicationContext方法,创建了webApplicationContext对象。
- 加载SpringMvcConfig。
- 执行@ComponentScan加载对应的bean。
- 加载UserController,每个@RequestMapping的名称对应一个具体的方法
- 执行getservletMappings方法,定义所有的请求都通过springMVC。
1.3.2 单次请求过程
- 发送请求localhost/save
- web容器发现所有请求都经过SpringMVC,将请求交给springMVC处理。
- 解析请求路径/save
- 由/save匹配执行对应的方法save()
- 执行save()
- 检测到有@ResponseBody直接将save()方法的返回值作为响应求体返回给请求方
1.4 Controller加载控制与业务bean加载控制
1.4.1 思考
1.4.2 知识点 —— @ComponentScan
1.4.3 实例
方式一:修改Spring配置类,设定扫描范围为精准范围
@Configuration
@ComponentScan({"com.li.service","com.li.dao"})
public class SpringConfig {
}
方式二:修改Spring配置类,设定扫描范围为com.li,排除掉controller包中的bean
@Configuration
@ComponentScan(value="com.li",
excludeFilters=@ComponentScan.Filter(
type = FilterType.ANNOTATION,
classes = Controller.class
)
)
public class SpringConfig {
}
1.4.4 简化开发
- 有了Spring的配置类,要想在tomcat服务器启动将其加载,我们需要修改 ServletContainersInitConfig。
- (就是这个超长的,要继承AbstractDispatcherServletInitializer的)
//就是这个超长的,要继承AbstractDispatcherServletInitializer的
public class ServletContainersInitConfig extends
AbstractDispatcherServletInitializer {
protected WebApplicationContext createServletApplicationContext() {
AnnotationConfigWebApplicationContext ctx = new
AnnotationConfigWebApplicationContext();
ctx.register(SpringMvcConfig.class);
return ctx;
}
protected String[] getServletMappings() {
return new String[]{"/"};
}
protected WebApplicationContext createRootApplicationContext() {
AnnotationConfigWebApplicationContext ctx = new
AnnotationConfigWebApplicationContext();
ctx.register(SpringConfig.class);
return ctx;
}
}
- 因此,Spring还提供了一种更简单的配置方式,可以不用再去创建
AnnotationConfigWebApplicationContext
对象,不用手动register对应的配置类。
public class ServletContainersInitConfig extends
AbstractAnnotationConfigDispatcherServletInitializer {
protected Class<?>[] getRootConfigClasses() {
return new Class[]{SpringConfig.class};
}
protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringMvcConfig.class};
}
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
1.5 PostMan
- Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件
- 作用:常用于进行接口测试。
Comments | NOTHING