Springmvc(5)之多部件表单、json交互和拦截器

时间:2022-01-09 21:56:09

多部件表单(图片上传)

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类型解析器。

Springmvc(5)之多部件表单、json交互和拦截器

4.        将表单设置成多部件表单的类型

在页面form中添加enctype="multipart/form-data"属性

5.        在相应的Controller中接收多部件表单的参数,解析数据。

Springmvc(5)之多部件表单、json交互和拦截器

Json数据交互

Springmvc进行数据交互的模型

Springmvc(5)之多部件表单、json交互和拦截器

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

Springmvc(5)之多部件表单、json交互和拦截器

1)        @requestBody:将json数据转换成java对象。

2)        @responseBody:将java对象转换成json对象。

Springmvc(5)之多部件表单、json交互和拦截器

输入key/value,输出json

Springmvc(5)之多部件表单、json交互和拦截器

Springmvc(5)之多部件表单、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中。

Springmvc(5)之多部件表单、json交互和拦截器

拦截器执行特点

两个拦截器都放行

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.        登陆认证拦截器,放在拦截器链接中第一个位置。权限校验拦截器,放在登陆认证拦截器之后。(因为登陆通过后才校验权限)。