SpringMVC
一、SpringMVC简介
- MVC(Model View Controller)是软件工程中的一种软件架构模式,它把软件系统分为模型、视图和控
制器三个基本部分。
- SpringMVC是一种基于Java实现MVC模型的轻量级Web框架
- 优点:使用简单、开发便捷(相比于Servlet)、灵活性强
二、请求与响应
2.1请求映射路径
- 为了解决请求路径冲动我们可以采用一下两种方式
- 为不同模块设置模块名作为请求路径前置 (不推荐)
@Controller
public class UserController {
@RequestMapping("/user/save")
@ResponseBody
public String save(){
System.out.println("user save ...");
return "{'module':'user save'}";
}
@RequestMapping("/user/delete")
@ResponseBody
public String save(){
System.out.println("user delete ...");
return "{'module':'user delete'}";
}
}
@Controller
public class BookController {
@RequestMapping("/book/save")
@ResponseBody
public String save(){
System.out.println("book save ...");
return "{'module':'book save'}";
}
}
- 在类前加RequestMapping
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/save")
@ResponseBody
public String save(){
System.out.println("user save ...");
return "{'module':'user save'}";
}
@RequestMapping("/delete")
@ResponseBody
public String save(){
System.out.println("user delete ...");
return "{'module':'user delete'}";
}
}
@Controller
@RequestMapping("/book")
public class BookController {
@RequestMapping("/save")
@ResponseBody
public String save(){
System.out.println("book save ...");
return "{'module':'book save'}";
}
}
当类上和方法上都添加了@RequestMapping注解,前端发送请求的时候,要和两个注解的value值相加匹配才能访问到。
2.2请求参数(get/post)
2.2.1get传参
- 普通参数:url地址传参,地址参数名与形参变量名相同,定义形参可以接受参数
2.2.2post传参
- 普通参数:from表单post请求传参,表单参数名与形参变量名相同,定义形参即可接受参数
2.2.3get中文乱码
- 出现乱码的原因相信大家都清楚,Tomcat8.5以后的版本已经处理了中文乱码的问题,但是IDEA中的Tomcat插件目前只到Tomcat7,所以需要修改pom.xml来解决GET请求中文乱码问题
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>80</port><!--tomcat端口号-->
<path>/</path> <!--虚拟目录-->
<uriEncoding>UTF-8</uriEncoding><!--访问路径编解码字符集-->
</configuration>
</plugin>
</plugins>
</build>
2.2.4post解决中文乱码
- 在config包的ServletContainersInitConfig类中配置过滤器
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
return new Filter[]{filter};
}
public class ServletContainersInitConfig extends
AbstractAnnotationConfigDispatcherServletInitializer {
protected Class<?>[] getRootConfigClasses() {
return new Class[0];
}
protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringMvcConfig.class};
}
protected String[] getServletMappings() {
return new String[]{"/"};
}
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
return new Filter[]{filter};
}
}
2.2.5普通参数形参名与传递值不相同
- 使用@RequestPaam绑定参数
2.2.6POJO类型参数
- POJO类型:请求参数名与形参对象属性名相同,定义POJO类型形参即可接收参数
2.2.7数组类型参数
- 数组参数:请求参数名与形参对象属性名相同且请求参数为多个,定义数组类型形参即可接受参数
2.2.8JOSN数据的传递(重点)
- 添加JSON相关的依赖
- 在配置类前加@EnableWebMvc注解
2.3日期类型参数传递
2.4响应JSON数据
- 响应JOSN数据
1.返回POJO对象
2.返回POJO集合对象
- 返回值为实体类对象,设置返回值为实体类类型,即可实现返回对应对象的json数据,需要依赖
@ResponseBody注解和@EnableWebMvc注解
三、REST风格
- REST(Representational State Transfer),表现形式状态转换,它是一种软件架构风格
- REST代码:
@RestController //@Controller + ReponseBody
@RequestMapping("/books")
public class BookController {
//@RequestMapping(method = RequestMethod.POST)
@PostMapping
public String save(@RequestBody Book book){
System.out.println("book save..." + book);
return "{'module':'book save'}";
}
//@RequestMapping(value = "/{id}",method = RequestMethod.DELETE)
@DeleteMapping("/{id}")
public String delete(@PathVariable Integer id){
System.out.println("book delete..." + id);
return "{'module':'book delete'}";
}
//@RequestMapping(method = RequestMethod.PUT)
@PutMapping
public String update(@RequestBody Book book){
System.out.println("book update..." + book);
return "{'module':'book update'}";
}
//@RequestMapping(value = "/{id}",method = RequestMethod.GET)
@GetMapping("/{id}")
public String getById(@PathVariable Integer id){
System.out.println("book getById..." + id);
return "{'module':'book getById'}";
}
//@RequestMapping(method = RequestMethod.GET)
@GetMapping
public String getAll(){
System.out.println("book getAll...");
return "{'module':'book getAll'}";
}
}