概述
用来解决javaee开发过程种web层问题
web层问题:请求问题,调用业务层,响应
开发流程
![](https://img-blog.csdnimg.cn/img_convert/306b7fd149bb653c6b9e81b215851390.png)
SpringMvc入门
创建web工程
打war包
<groupId>com.itheima</groupId>
<artifactId>springmvc-01-request</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
引入tomcat插件
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port>
<path>/</path>
<!-- 处理GET 请求乱码 -->
<!-- 处理POST乱码过滤器 -->
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>
</plugins>
</build>
补全目录webapp
引入springmvc依赖
<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>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
配置springmvc基础配置
// tomcat启动自动加载
public class TomcatInitConfig extends AbstractDispatcherServletInitializer {
@Override
protected WebApplicationContext createServletApplicationContext() {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.register(SpringMvcConfig.class);
return context;
}
@Override
protected String[] getServletMappings() {
// 拦截所以请求交springmvc处理
return new String[]{"/"};
}
// ssm整合
@Override
protected WebApplicationContext createRootApplicationContext() {
return null;
}
}
@Configuration
@ComponentScan(basePackages = "com.itheima.request.controller")
@EnableWebMvc
public class SpringMvcConfig {
}
Controller
@Controller
public class RequestController1 {
@RequestMapping("/path")
@ResponseBody
public String requestPath(){
System.out.println("path.......");
return "path";
}
@RequestMapping(value = "/get",method = RequestMethod.GET)
@ResponseBody
public String requestPath1(){
System.out.println("get.......");
return "path";
}
@RequestMapping(value = "/post",method = RequestMethod.POST)
@ResponseBody
public String requestPath2(){
System.out.println("post.......");
return "path";
}
}
请求
请求路径资源
@RequestMapping:
作用:是绑定一个路径到一个方法上,请求这个路径就会让这个方法执行
作用:限定我们请求方式,method属性
请求参数
url地址参数
![](https://img-blog.csdnimg.cn/img_convert/b3dcba7ca3f47c2ed32f11cf4973d75d.png)
表单传参
@RequestMapping(value = "param2",method = RequestMethod.POST)
@ResponseBody // 文本方式响应数据,没有这个注解默认找页面。
public String param2(String username,String password){
System.out.println(username + password);
return username+password;
}
![](https://img-blog.csdnimg.cn/img_convert/5b312b1743f0183a8c14820c5246ffe9.png)
form表单传参-对象传参
@RequestMapping(value = "param3",method = RequestMethod.POST)
@ResponseBody // 文本方式响应数据,没有这个注解默认找页面。
public String param3(User user){
System.out.println(user);
return "user";
}
![](https://img-blog.csdnimg.cn/img_convert/dc7995fb936123e9409d25c94aebf0f9.png)
json传参
@RequestMapping(value = "param4",method = RequestMethod.POST)
@ResponseBody // 文本方式响应数据,没有这个注解默认找页面。
public String param4(@RequestBody User user){
System.out.println(user);
return "user";
}
![](https://img-blog.csdnimg.cn/img_convert/06919a3ee4a7becb58da3e23037ab046.png)
json传参,封装到map
@RequestMapping(value = "param5",method = RequestMethod.POST)
@ResponseBody // 文本方式响应数据,没有这个注解默认找页面。
public String param5(@RequestBody Map user){
System.out.println(user);
return "user";
}
![](https://img-blog.csdnimg.cn/img_convert/a07dd9b241d13a1e39508d65475a69f9.png)
json传参,数组
@RequestMapping(value = "param6",method = RequestMethod.POST)
@ResponseBody // 文本方式响应数据,没有这个注解默认找页面。
public String param6(@RequestBody String[] list){
for (String s : list) {
System.out.println(s);
}
return "list";
}
![](https://img-blog.csdnimg.cn/img_convert/abaf0ec5a5e1a3d5bdab832b01612b44.png)
日期传参
@RequestMapping(value = "param7",method = RequestMethod.POST)
@ResponseBody // 文本方式响应数据,没有这个注解默认找页面。
// springmvc 默认只接收 yyyy/MM/ddd 日期
// 如果前端传递的式 yyyy-MM-dd 日期 后端有两种方式 ① @DateTimeFormat ② String 接收
public String param7(@DateTimeFormat(pattern = "yyyy-MM-dd") Date date){
System.out.println(date);
return "date";
}
![](https://img-blog.csdnimg.cn/img_convert/93ae312fb17e39ea38106663f3d92339.png)
日期传参,string接收
@RequestMapping(value = "param8",method = RequestMethod.POST)
@ResponseBody // 文本方式响应数据,没有这个注解默认找页面。
// springmvc 默认只接收 yyyy/MM/ddd 日期
// 如果前端传递的式 yyyy-MM-dd 日期 后端有两种方式 ① @DateTimeFormat ② String 接收
public String param8(String date){
System.out.println(date);
return "date";
}
![](https://img-blog.csdnimg.cn/img_convert/93ae312fb17e39ea38106663f3d92339.png)
前端传递参数和后端对不上名称不一致
@RequestMapping(value = "param9",method = RequestMethod.GET)
@ResponseBody // 文本方式响应数据,没有这个注解默认找页面。
// 前端传递参数名称与后端不一致 ,需要使用一个注解 @RequestParam("name")
// 把前端参数叫name参数值赋值 后端叫username参数
public String param9(@RequestParam("name") String username){
System.out.println(username);
return "date";
}
![](https://img-blog.csdnimg.cn/img_convert/ac4970c3be981880ec9da3b4226b190a.png)
请求方式
浏览器中接收的都是get请求
响应
父子容器
![](https://img-blog.csdnimg.cn/img_convert/16087d580eb74fc563d3c72f5c56a892.png)
响应一个页面
转发到一个页面
重定向一个页面
响应一个json
概述
json是轻量级数据交换格式
解决:前后端交换过程中数据格式问题
基本构成:
Object(对象):{ }
Array(数组):[ ]
常用嵌套结构
数组套对象
对象套数组
对象转json,json转对象
public class JacksonTest {
/**
* 对象转为json
* @throws JsonProcessingException
*/
@Test
public void testObject2Json() throws JsonProcessingException {
User user = new User(); // 未来这个对象大概率从数据库查询出来的对象
user.setId(111);
user.setUsername("tom");
user.setAge(18);
ObjectMapper objectMapper = new ObjectMapper();
String s = objectMapper.writeValueAsString(user);
System.out.println(s);
}
/**
* json转为对象
* @throws IOException
*/
// {"id":111,"username":"tom","age":18}
@Test
public void testJson2Object() throws IOException {
String jsonStr = "{\"id\":111,\"username\":\"tom\",\"age\":18}";
ObjectMapper objectMapper = new ObjectMapper();
User user = objectMapper.readValue(jsonStr, User.class);
System.out.println(user);
}
}
@JsonIgnore
生成json数据有多余字段,这个时候我们可以使用注解@JsonIgnore
使用map响应一个json
响应一个文本
注解
请求注解
请求路径映射
@RequestMapping
参数封装
@RequestBody:前端传递的是json
@RequestParam:当前端传递参数与后端接收的参数不一致
Restfull风格开发
Get和Post的区别
携带数据量:get小,post大
安全性:post安全,get不安全
幂等:get幂等,post非幂等