回顾
1,响应
-
页面跳转
-
直接响应数据
- controller方法返回的是普通字符串
- controller方法响应的是json数据
- 方法直接返回对象或者集合即可,底层默认使用的是Jackson工具
- 注意:
- @ResponseBody
- 引入jackson的jar包
- 注解驱动
2,发送异步请求
如果post请求的数据是json格式的字符串,需要使用@RequestBody
3,拦截器
作用: 登陆状态校验 权限的校验
4,异常处理器
注解开发:
@ControllerAdvice
@ExceptionHandler
@ResponseBody
今日内容
- 文件上传
- restful
- postman
- 校验框架
- ssm整合
1,文件上传
1.1 页面
<form action="/fileupload" method="post" enctype="multipart/form-data">
<%--文件上传表单的name属性值一定要与controller处理器中方法的参数对应,否则无法实现文件上传--%>
上传LOGO:<input type="file" name="file"/><br/>
<input type="submit" value="上传"/>
</form>
注意:
- enctype属性的值必须是multipart/form-data
- 提交方式必须是post请求
- 必须有文件上传项
1.2 后台
springmvc是对apache提供的文件上传工具(fileupload)进行了封装。
-
引入jar包
<!--文件上传下载-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
-
配置文件上传处理器
在springmvc的配置文件中
<!--配置文件上传处理器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="1024000000"/>
</bean>
-
在controller方法声明形式参数 MultipartFile file
@RequestMapping(value = "/fileupload")
//参数中定义MultipartFile参数,用于接收页面提交的type=file类型的表单,要求表单名称与参数名相同
public String fileupload(MultipartFile file) throws IOException {
//将文件存储到硬盘上
file.transferTo(new File(""));
//获取文件名称
String fileName = file.getOriginalFilename();
return ";page.jsp";
}
2,restful
概述:
是url书写的一种风格。
传统的书写方式:
http://localhost/user/getData?id=1
restful书写方式:
http://localhost/user/1
springmvc支持restful风格的url。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200924211443592.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODA0ODE0MA==,size_16,color_FFFFFF,t_70#pic_center)
如何确定增删改查的那种操作?
使用提交方式:
post请求 : 添加
put请求 : 修改
get请求 : 查询
delete请求 : 删除
springmvc如何接受其他的请求方式:
配置一个过滤器:
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<servlet-name>DispatcherServlet</servlet-name>
</filter-mapping>
开发中的写法:
@RestController
@RequestMapping("/user/")
public class UserController {
//http://localhost/user/
@PostMapping
public String save(User user) {
return "添加成功"
}
//http://localhost/user/
@PutMapping
public String update(User user) {
return "修改成功"
}
@GetMapping("{id}")
public String findById(@PathVariable Integer id) {
return "修改成功"
}
@GetMapping
public String findAll() {
return "修改成功"
}
@DeleteMapping("{id}")
public String delete(@PathVariable Integer id) {
return "修改成功"
}
}
3,校验框架(了解)
hibernate-validator
3.1 入门案例
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200924211457994.png#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200924211510861.png#pic_center)
图解:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200924211520127.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODA0ODE0MA==,size_16,color_FFFFFF,t_70#pic_center)
4,ssm整合
4.1 spring整合mybatis
配置mybatis的分页插件:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020092421153689.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODA0ODE0MA==,size_16,color_FFFFFF,t_70#pic_center)
4.2 spring整合springmvc
问题: spring的核心容器在什么时候创建,由谁创建?
spring的核心容器在整个项目中只需要有一个即可,希望在服务器启动的时候直接创建好。
web中学习的ServletContext对象只有一个,而且是在服务器启动的时候创建。
之前学习了ServletContext的监听器,监听ServletContext对象的创建和销毁。
这个监听器不需要我们创建,在整合包中已经提供好了 ContextLoaderListener
我们需要做的就是配置监听器即可:
<!--指定spring的配置文件,用来创建spring的容器对象-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!--启动服务器时,通过监听器加载spring运行环境-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
注意: spring有自己的核心容器对象,springmvc也有自己的容器对象。
spring容器是父容器,而springmvc是子容器。
json数据转换的转换器:
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="com.fasterxml.jackson.databind.ObjectMapper">
<property name="dateFormat">
<bean class="java.text.SimpleDateFormat">
<!--new SimpleDateFormat("yyyy-MM-dd")-->
<constructor-arg value="yyyy/MM/dd"></constructor-arg>
</bean>
</property>
</bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>