学习目标:
1.掌握基于SpringMVC获取请求参数与响应json数据操作
2.熟练应用基于REST风格的请求路径设置与参数传递
3.能够根据实际业务建立前后端开发通信协议并进行实现
4.基于SSM整合技术开发任意业务模块功能
目录
一、SpringMVC简介
1.1概述
SpringMVC是一种基于java实现MVC模型的轻量级web框架
使用简单,开发快捷
1.2 SpringMVC入门案例
1.导入SpringMVC坐标与Servlet坐标,tomcat7插件
<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> <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>
2.创建SpringMVC控制类(等同于Servlet功能)
//定义表现层控制器bean
@Controller
public class UserController {
//设置映射路径为/save,即外部访问路径
@RequestMapping("/save")
//设置当前操作返回结果为指定json数据(本质上是一个字符串信息)
@ResponseBody
public String save(){
System.out.println("user save ...");
return "{'info':'springmvc'}";
}
}
3.初始化SpringMVC环境(同Spring环境),设定SpringMVC加载对应的bean
//springmvc配置类,本质上还是一个spring配置类
@Configuration
@ComponentScan("com.itheima.controller")
public class SpringMvcConfig {
}
4.初始化Servlet容器,加载SpringMVC环境,并设置SpirngMVC技术处理的请求5
//web容器配置类
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
//加载springmvc配置类,产生springmvc容器(本质还是spring容器)
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;
}
}
1.2.1 注解说明:
1.2.2 开发总结:
一次性工作: | 多次工作: |
1.创建工程,设置服务器,加载工程 | 1.定义处理请求的控制器类 |
2.导入坐标 | |
3.创建web容器启动类,今安在SpringMVC配置,并设置SpringVC请求拦截路径 | 2.定义处理请求的控制器方法,并配置映射路径(@RequestMapping)与返回json数据(@ResponseBody) |
4.SpringMVC核心配置类(设置配置类,扫描controller包,加载Controller控制器bean) |
·AbstractDispatcherServletInitializer类是SpringMVC提供的快速初始化Web3.0容器的抽象类
·AbstractDispatcherServletInitializer提供三个接口方法供用户实现
1.createServletApplicationContext(),创建Servlet容器时,加载SpringMVC对应的bean并放入 WebApplicationContext对象范围中,而WebApplicationContext的作用范围为ServletContext范围,即整个web容器范围。
protected WebApplicationContext createServletApplicationContext() {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringMvcConfig.class);
return ctx;
}
2.getServletMappings(),设定SpringMVC对应的请求映射路径,设置为/表示拦截所用请求,任意请求都将转入到SpringMVC进行处理。
protected String[] getServletMappings() {
return new String[]{"/"};
}
3.createRootApplicationContext(),如果创建Servlet容器时需要加载非SpringMVC对应的bean,使用当前方法进行,方式同createServletApplicationContext()。
protected WebApplicationContext createRootApplicationContext() {
return null;
}
1.3 入门案例工作流程分析
1.4 Controller加载控制与业务bean加载控制
//一下两种方式取其一
//@ComponentScan({"com.itheima.service","com.itheima.dao"})
@ComponentScan(value = "com.itheima",
excludeFilters = @ComponentScan.Filter(
type = FilterType.ANNOTATION,
classes = Controller.class
)
)
public class SpringConfig {
}
//第三种办法
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
protected WebApplicationContext createServletApplicationContext() {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringMvcConfig.class);
return ctx;
}
protected WebApplicationContext createRootApplicationContext() {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringConfig.class);
return ctx;
}
protected String[] getServletMappings() {
return new String[]{"/"};
}
简化开发
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
二、请求与响应
2.1 请求映射路径
2.2 请求参数
2.2.1 普通参数
Get请求传参
Post请求传参
Post请求中文乱码处理
为web容器添加过滤器并指定字符集,Spring-web包中提供了专用的字符过滤器
@Override
protected Filter[] getServletFilters() {
//配字符编码过滤器
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("utf-8");
return new Filter[]{filter};
}
2.2.2 POJO参数
2.2.3 嵌套参数
2.2.4 数组参数
2.2.5 集合参数
2.2.6 json参数
1. 导入坐标
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.0</version> </dependency>
2. 设置发送json数据(请求body中添加json数