回顾
1,响应
-
页面跳转
-
controller方法的字符串返回值
使用Model对象进行数据共享,默认是存储在request域对象中。
-
使用ModelAndView对象
-
-
直接响应数据
- controller方法返回的是普通字符串
- controller方法响应的是json数据
- 方法直接返回对象或者集合即可,底层默认使用的是Jackson工具
- 注意:
- @ResponseBody
- 引入jackson的jar包
- 注解驱动
2,发送异步请求
如果post请求的数据是json格式的字符串,需要使用@RequestBody
3,拦截器
-
定义拦截器类
- 实现HandlerInterceptor接口
- preHandler的返回值是true,放行,是false,直接结束
- 实现HandlerInterceptor接口
-
配置
<mvc:interceptors> <!--开启具体的拦截器的使用,可以配置多个--> <mvc:interceptor> <mvc:mapping path="/**"/> <!--指定具体的拦截器类--> <bean class="MyInterceptor"/> </mvc:interceptor> </mvc:interceptors>
作用: 登陆状态校验 权限的校验
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。
如何确定增删改查的那种操作?
使用提交方式:
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 入门案例
-
引入jar包
<!--导入校验的jsr303规范--> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>2.0.1.Final</version> </dependency> <!--导入校验框架实现技术--> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>6.1.0.Final</version> </dependency>
-
在controller方法上标记要校验的bean
- 定义校验的规则。在实体类的成员变量上定义
图解:
4,ssm整合
4.1 spring整合mybatis
配置mybatis的分页插件:
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>