1. Spring MVC 简介
Spring MVC技术与Servlet功能技术等同,均属于web层开发技术
2. Spring MVC 入门案例
2.1 导入sevlet和springmvc坐标
pom.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
@Controller
@RequestMapping("/user")
public class UserController {@RequestMapping("/save")@ResponseBodypublic String save(){System.out.println("user save...");return "{'user':'save'}";}@RequestMapping("/delete")@ResponseBodypublic String delete(){System.out.println("user delete...");return "{'user':'delete'}";}
}
2.3 初始化SpringMVC环境(同Spring环境),设定SpringMVC加载对应的bean
com.gtc.config.SpringMvcConfig.java
@Configuration
@ComponentScan("com.gtc.controller")
public class SpringMvcConfig {}
2.4 初始化Servlet容器,加载SpringMVC环境,并设置SpringMVC技术处理的请求
com.gtc.config.ServletContainerInitConfig.java
public class ServletContainerInitConfig extends AbstractDispatcherServletInitializer {// 加载springmvc容器配置@Overrideprotected WebApplicationContext createServletApplicationContext() {// 创建空容器AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();// 注册容器的配置context.register(SpringMvcConfig.class);return context;}// 加载哪些请求归属springmvc处理@Overrideprotected String[] getServletMappings() {// 所有请求都由mvc处理return new String[]{"/"};}// 加载spring容器配置@Overrideprotected WebApplicationContext createRootApplicationContext() {return null;}
}
2.5 导入Tomcat插件(或用本地Tomcat)
<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
@Configuration
@ComponentScan("com.gtc.controller")
public class SpringMvcConfig {
}
3.2 Spring加载其他bean
com.gtc.config.SpringConfig.java
方式一:Sring加载的bean设定扫描范围为com.gtc,排除掉controller包内的bean
@Configuration
@ComponentScan(value="com.gtc", excludeFilters = @ComponentScan.Filter(type= FilterType.ANNOTATION,classes=Controller.class))
public class SpringConfig {
}
方式二: Spring加载的bean设定扫描范围为精准扫描,例如service包、dao包等
@Configuration
@ComponentScan("com.gtc.service","com.gtc.dao")
public class SpringConfig {
}
4. 请求与响应
4.1 请求映射路径
@RequestMapping注解实现
4.2 请求参数
在Postman中发送Get请求:
在Postman中发送Post请求:
普通参数传递:
@Controller
public class ParamController {// 普通参数@RequestMapping("/commonParam")@ResponseBodypublic String commonParam(String name, int age) {System.out.println("普通参数传递 name ==> " + name);System.out.println("普通参数传递 age ==> " + age);return "{'module':'common param'}";}// 普通参数---请求参数与形参名不同@RequestMapping("/commonParam02")@ResponseBodypublic 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方法
// POJO类型参数@RequestMapping("/pojoParam")@ResponseBodypublic String pojoParam(User user) {System.out.println("pojo类型参数传递 ==> " + user);return "{'module':'pojo param'}";}
4.3 响应json数据
Postman发送json数据
(1)加入jackson-databind坐标
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.0</version></dependency>
(2)配置SpringMvcConfig.java加入EnableWebMvc注解
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)
// 集合参数: json格式@RequestMapping("/listParamForJson")@ResponseBodypublic String listParamForJson(@RequestBody List<String> likes){System.out.println(likes);return "{'module':'list param'}";}
4.4 响应
响应页面
@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