SpringMVC概述
Spring Web MVC 是一种基于Java的实现Web MVC设计模式的请求驱动类型的轻量级Web框架。
MVC的设计模式
M:model 模型
业务模型 数据模型 实体,业务代码,数据代码
V: View 视图
用于渲染数据,显示给客户
html jsp framemarker
C:Controller 控制器
主要用于接受参数,处理请求,返回结果
servlet controller
控制器主要作用:
- 接受参数
- 请求处理:调用模型
- 结果返回。大多为josn格式
SpringMVC工作流程
基于XML方式配置SpringMVC
操作步骤
导入Spring、SpringMVC依赖
代码语言:javascript复制 org.springframework
spring-context
5.1.9.RELEASE
org.springframework
spring-webmvc
5.1.9.RELEASE
...
在web.xml文件中配置前端控制器
代码语言:javascript复制 springmvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring_mvc.xml
springmvc
/
...
编写控制器
一个加上注解的普通Java类
代码语言:javascript复制@Controller
@RequestMapping(value = "/helloController")
//控制器
public class HelloController {
@RequestMapping("/sayHello")
public void sayHello(){
System.out.println("say hello");
}
@RequestMapping("/sayHi")
public void sayHi(){
System.out.println("say hi");
}
}
...
配置spring_mvc.xml
代码语言:javascript复制...
部署项目
将项目部署在Tomcat上
测试效果
输入路径:localhost/helloContorlle/sayHleeo
参数处理
基本数据类型:
可以直接传参
代码语言:javascript复制public void sayHello(int id,@RequestParam("test") String name){
System.out.println(id);
System.out.println(name);
System.out.println("say hello");
}...
@RequestParam("test") 注解用于传递的参数名和方法的参数名不一致时
2、dto对象:
如果参数是一堆,会封装在对象中
代码语言:javascript复制@RequestMapping("/add")
// 将前端传过来的参数自动映射到实体中
//如果前端的是json格式对象 @RequestBody
public void add(CompanyDTO companyDTO){
System.out.println("添加方法");
System.out.println(companyDTO);
}
...
要求:传过来的参数名与实体中的属性名一致,才可以自动映射
resulful风格
一杠一值
简化了请求参数
对比:
get请求:/请求地址?id=1&name=admin
resultful请求:/请求路径/1/admin
在RequestMapping("/请求的地址/{id}/{name}")
代码语言:javascript复制@Controller
@RequestMapping("/restfulController")
public class RestfulController {
@RequestMapping("/test/{id}/{name}")
public void test(@PathVariable("id") int id,@PathVariable("name") String name){
System.out.println("id:" id);
System.out.println("name:" name);
}
}
...
示例:
http://localhost/restfulController/test/10/zhangsan
id:10
name:zhangsan
日期格式:将前端传过来的参数(字符串)转换为日期对象
@DateTimeFormat
代码语言:javascript复制@DateTimeFormat 将前端传过来的参数(字符串)转换为日期对象
//将字符串转换为日期格式数据
@DateTimeFormat(pattern = "yyyy-MM-dd")...
@JsonFormat
代码语言:javascript复制@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss",timezone = "GMT 8")
//返回值中要将日期对象转换为字符串...
扩展:Lombok插件
简写实体
对比:
以前的实体:需要自己添加setter,getter,tostring等方法
使用Lombok:只要加上@Data注解 就可以自动完成以上操作
只需要在pom.xml中添加依赖:
代码语言:javascript复制 org.projectlombok
lombok
1.18.4
...
结果的返回
前后端分离后,一般返回JSON格式数据
步骤:
引入依赖
代码语言:javascript复制 com.fasterxml.jackson.core
jackson-databind
2.9.8
...
使用@ResponseBody //@ResponseBody 将结果转换为json格式
代码语言:javascript复制//查询所有的公司列表
@RequestMapping("/list")
@ResponseBody //@ResponseBody 将结果转换为json格式
public List showAllCompanies(){
//返回的是一个集合 要把这个集合转换为json的数据格式
List companies = new ArrayList<>();
Company company1 = new Company();
company1.setId(1);
company1.setName("国信安");
company1.setLocation("云华路");
company1.setBuildDate("2009-10-01");
Company company2 = new Company();
company2.setId(2);
company2.setName("华为");
company2.setLocation("郫县");
company2.setBuildDate("2000-10-01");
companies.add(company1);
companies.add(company2);
return companies;
}
...
代码语言:javascript复制{
"code":0,
"msg":"查询成功",
"count":100,
"data":[
[{"id":1,"name":"国信安","location":"云华路","buildDate":"2009-10-01"}, {"id":2,"name":"华为","location":"郫县","buildDate":"2000-10-01"}]
]
}...
可以自己封装结果对象
代码语言:javascript复制package com.gxa.util;
import lombok.Data;
import java.util.List;
@Data
public class ResutData {
private int code;
private String msg;
private int count;
private List data;
public static ResutData success(String msg,int count,List data){
ResutData resutData = new ResutData();
resutData.code = 0;
resutData.msg = msg;
resutData.count = count;
resutData.data = data;
return resutData;
}
public static ResutData error(String msg){
ResutData resutData = new ResutData();
resutData.code = 1;
resutData.msg = msg;
return resutData;
}
}
...