1. Spring MVC 简介
Spring MVC技术与Servlet功能技术等同,均属于web层开发技术
2. Spring MVC 入门案例
2.1 导入sevlet和springmvc坐标
pom.xml
XML
<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>
2.2 创建SpringMVC控制器类
com.gtc.controller.UserController.java
java
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/save")
@ResponseBody
public String save(){
System.out.println("user save...");
return "{'user':'save'}";
}
@RequestMapping("/delete")
@ResponseBody
public String delete(){
System.out.println("user delete...");
return "{'user':'delete'}";
}
}
2.3 初始化SpringMVC环境(同Spring环境),设定SpringMVC加载对应的bean
com.gtc.config.SpringMvcConfig.java
java
@Configuration
@ComponentScan("com.gtc.controller")
public class SpringMvcConfig {
}
2.4 初始化Servlet容器,加载SpringMVC环境,并设置SpringMVC技术处理的请求
com.gtc.config.ServletContainerInitConfig.java
java
public class ServletContainerInitConfig extends AbstractDispatcherServletInitializer {
// 加载springmvc容器配置
@Override
protected WebApplicationContext createServletApplicationContext() {
// 创建空容器
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
// 注册容器的配置
context.register(SpringMvcConfig.class);
return context;
}
// 加载哪些请求归属springmvc处理
@Override
protected String[] getServletMappings() {
// 所有请求都由mvc处理
return new String[]{"/"};
}
// 加载spring容器配置
@Override
protected WebApplicationContext createRootApplicationContext() {
return null;
}
}
2.5 导入Tomcat插件(或用本地Tomcat)
XML
<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.6 启动服务器

3. bean 加载控制
SpringMVC容器加载controller的表现层bean
Spring容器控制service的业务bean、dao的数据bean等
因为功能不同,如何避免Spirng错误加载到SpringMVC的bean?
**解决办法:**SpringMvcConfig只加载mvc的bean,Spring加载所有(排除掉springmvc的bean)的bean

- SpringMVC相关bean加载控制
- SpringMVC加载的bean对应的包均在com.gtc.controller内
- Spring相关bean加载控制
- 方式一: Sring加载的bean设定扫描范围为com.gtc,排除掉controller包内的bean
- 方式二: Spring加载的bean设定扫描范围为精准扫描,例如service包、dao包等
3.1 Spring MVC加载表现层bean
com.gtc.config.SpringMvcConfig.java
java
@Configuration
@ComponentScan("com.gtc.controller")
public class SpringMvcConfig {
}
3.2 Spring加载其他bean
com.gtc.config.SpringConfig.java
**方式一:**Sring加载的bean设定扫描范围为com.gtc,排除掉controller包内的bean
java
@Configuration
@ComponentScan(value="com.gtc", excludeFilters = @ComponentScan.Filter(type= FilterType.ANNOTATION,classes=Controller.class))
public class SpringConfig {
}
**方式二:**Spring加载的bean设定扫描范围为精准扫描,例如service包、dao包等
java
@Configuration
@ComponentScan("com.gtc.service","com.gtc.dao")
public class SpringConfig {
}
4. 请求与响应
4.1 请求映射路径
@RequestMapping注解实现

4.2 请求参数
在Postman中发送Get请求:

在Postman中发送Post请求:

普通参数传递:
java
@Controller
public class ParamController {
// 普通参数
@RequestMapping("/commonParam")
@ResponseBody
public String commonParam(String name, int age) {
System.out.println("普通参数传递 name ==> " + name);
System.out.println("普通参数传递 age ==> " + age);
return "{'module':'common param'}";
}
// 普通参数---请求参数与形参名不同
@RequestMapping("/commonParam02")
@ResponseBody
public String commonParam02(@RequestParam("name") String userNname, int age) {
System.out.println("普通参数2传递 name ==> " + userNname);
System.out.println("普通参数2传递 age ==> " + age);
return "{'module':'common param'}";
}
}
POJO类型参数
前提:有一个User类,定义了String name和int age两个属性,写了getter和setter方法和toString方法
java
// POJO类型参数
@RequestMapping("/pojoParam")
@ResponseBody
public String pojoParam(User user) {
System.out.println("pojo类型参数传递 ==> " + user);
return "{'module':'pojo param'}";
}
4.3 响应json数据
Postman发送json数据

(1)加入jackson-databind坐标
XML
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
(2)配置SpringMvcConfig.java加入EnableWebMvc注解
java
package com.gtc.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
@Configuration
@ComponentScan("com.gtc.controller")
@EnableWebMvc // 开启外部发送的json转换为对象功能
public class SpringMvcConfig{
}
(3)
java
// 集合参数: json格式
@RequestMapping("/listParamForJson")
@ResponseBody
public String listParamForJson(@RequestBody List<String> likes){
System.out.println(likes);
return "{'module':'list param'}";
}
4.4 响应
响应页面
java
@Controller
@RequestMapping("/user")
public class UserController {
// 响应页面
@RequestMapping("/toJumpPage")
public String toJumpPage() {
System.out.println("跳转页面");
return "index.jsp";
}
}
响应数据
5. REST风格
5.1 REST简介
REST(Representational State Transfer),表现形式状态转换



5.2 RESTful入门案例
SpringMVC支持的八种请求方式:
主要四种:增PUT删DELETE改POST查GET



