1. AJAX的json数据交互
1.1. @RequestBody
@RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容(json数据)转换为java对象并绑定到Controller方法的参数上。
@RequestBody注解实现接收http请求的json数据,将json数据转换为java对象进行绑定
1.2. @ResponseBody
@ResponseBody注解用于将Controller的方法返回的对象,通过springmvc提供的HttpMessageConverter接口转换为指定格式的数据如:json,xml等,通过Response响应给客户端
@ResponseBody注解实现将Controller方法返回java对象转换为json响应给客户端。
前台页面:
1.3. 请求json,响应json实现:
1.3.1. 加入jar包
如果需要springMVC支持json,必须加入json的处理jar
我们使用Jackson
1.3.2. 配置json转换器
Json转换器·在<mvc:annotation-driven />已经内置好了,
如果不使用注解驱动<mvc:annotation-driven />,
就需要给处理器适配器配置json转换器
在springmvc.xml配置文件中,给处理器适配器加入json转换器:
2. 拦截器
2.1. 定义
Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理。
2.2. 拦截器定义
实现HandlerInterceptor接口,如下:
2.3. 拦截器配置
上面定义的拦截器再复制一份HandlerInterceptor2,HandlerInterceptor3
在springmvc.xml中配置拦截器
2.4. 正常流程测试
2.4.1. 运行流程
2.5. 中断流程测试
访问action
2.5.1. 运行流程
HandlerInterceptor1的preHandler方法返回false,HandlerInterceptor2返回true,HandlerInterceptor3返回true,运行流程如下:
从日志看出第一个拦截器的preHandler方法返回false后第一个拦截器只执行了preHandler方法,其它两个方法没有执行,第二个拦截器的所有方法不执行,且Controller也不执行了。
HandlerInterceptor1的preHandler方法返回true,HandlerInterceptor2返回false,
HandlerInterceptor3返回true或false,
运行流程如下:
从日志看出第二个拦截器的preHandler方法返回false后第一个拦截器的postHandler没有执行,第二个拦截器的postHandler和afterCompletion没有执行,且controller也不执行了。
总结:
preHandle按拦截器定义顺序调用
postHandler按拦截器定义逆序调用
afterCompletion按拦截器定义逆序调用
postHandler在拦截器链内所有拦截器返成功调用
afterCompletion只有preHandle返回true才调用
2.6. 拦截器应用(登录)
2.6.1. 编写登录jsp
2.6.2. 用户登陆Controller
=
2.6.3. 编写拦截器
2.6.4. 配置拦截器