多部件表单(图片上传)
1. 导入上传图片的jar包
1) commons-fileupload-1.2.2.jar
2) commons-io-2.4.jar
2. 创建图片虚拟存储目录
在conf/server.xml文件,添加虚拟目录:
<ContextdocBase=”绝对路径” path=”虚拟路径” reloadable=”false”/>
3. 在springmvc.xml中配置multipart类型解析器。
4. 将表单设置成多部件表单的类型
在页面form中添加enctype="multipart/form-data"属性
5. 在相应的Controller中接收多部件表单的参数,解析数据。
Json数据交互
Springmvc进行数据交互的模型
1. 请求json、输出json,要求请求的是json串,所以在前端页面中需要将请求的内容转成json,不太方便。
2. 请求key/value、输出json。此方法比较常用。
方法
输入json,输出json
1. 加载json转换包
springmvc中使用jackson的包进行json转换(@requestBody和@responseBody使用下边的包进行json转)
jackson-core-sal-1.9.11.jar
jackson-mapper-asl-1.9.11.jar
2. <mvc:annotation-driven/>注解配置方式,处理器适配器自动加载了json的转换器
3. 在Controller中通过@requestBody和@responseBody
1) @requestBody:将json数据转换成java对象。
2) @responseBody:将java对象转换成json对象。
输入key/value,输出json
拦截器
定义拦截器
定义拦截器,实现HandlerInterceptor接口。接口中提供三个方法。
1. preHandle
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler)throws Exception {
return false;
}
1) 执行位置:进入Handler方法前执行。
2) 返回值意义:false—>表示拦截不进入Handler,trueà表示放行进入Handler。
3) 作用:用于身份认证、身份授权。
2. postHandle
@Override
public void postHandle(HttpServletRequestrequest,
HttpServletResponse response, Objecthandler,
ModelAndView modelAndView)throws Exception {
}
1) 执行位置:进入Handler返回ModelAndView之前执行。
2) 作用:应用场景从modelAndView出发,
a) 将公用的模型数据(比如菜单导航)在这里传到视图。
b) 在这里统一指定视图。
3. afterCompletion
@Override
public void afterCompletion(HttpServletRequestrequest,
HttpServletResponse response, Object handler,Exception ex)
throws Exception {
}
1) 执行位置:Handler完成后执行该方法。
2) 作用:统一异常处理,统一日志处理
全局拦截器的配置
1. springmvc拦截器针对HandlerMapping进行拦截设置,如果在某个HandlerMapping中配置拦截,经过该 HandlerMapping映射成功的handler最终使用该拦截器
2. 全局的拦截器:springmvc框架将配置的类似全局的拦截器注入到每个HandlerMapping中。
拦截器执行特点
两个拦截器都放行
1. preHandle方法按顺序执行,
2. postHandle和afterCompletion按拦截器配置的逆向顺序执行。
拦截器1 放行,拦截器2不放行
1. 拦截器1放行,拦截器2 preHandle才会执行。
2. 拦截器2 preHandle不放行,拦截器2 postHandle和afterCompletion不会执行。
3. 只要有一个拦截器不放行,postHandle不会执行
拦截器都不放行
1. 拦截器1 preHandle不放行,postHandle和afterCompletion不会执行。
2. 拦截器1 preHandle不放行,拦截器2不执行。
总结
1. preHandle方法按顺序执行,postHandle和afterCompletion按拦截器配置的逆向顺序执行。
2. 只有放行的拦截器才会执行afterCompletion。
3. 只要用一个拦截器不放行,postHandler就不会执行。
拦截器作用
1. 统一日志处理拦截器,需要该 拦截器preHandle一定要放行,且将它放在拦截器链接中第一个位置。
2. 登陆认证拦截器,放在拦截器链接中第一个位置。权限校验拦截器,放在登陆认证拦截器之后。(因为登陆通过后才校验权限)。