SpringMVC拦截器
2017-04-25 20:27
337 查看
Spring Web MVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。
preHandle:预处理回调方法,实现处理器的预处理(如登录检查),第三个参数为响应的处理器(如Controller实现);
返回值:true表示继续流程(如调用下一个拦截器或处理器);
false表示流程中断(如登录检查失败),不会继续调用其他的拦截器或处理器,此时我们需要通过response来产生响应;
postHandle:后处理回调方法,实现处理器的后处理(但在渲染视图之前),此时我们可以通过modelAndView(模型和视图对象)对模型数据进行处理或对视图进行处理,modelAndView也可能为null。
afterCompletion:整个请求处理完毕回调方法,即在视图渲染完毕时回调,如性能监控中我们可以在此记录结束时间并输出消耗时间,还可以进行一些资源清理,类似于try-catch-finally中的finally,但仅调用处理器执行链中preHandle返回true的拦截器的afterCompletion。
方法解析:
第一个方法preHandle尤其重要,他可以根据返回值
改变请求往下的流程,起着先导作用,第二个方法posHandle,他可以在
请求通过处理器后,紧接着做一系列的操作,最后经过最后一个方法
afterCompletion,进行客户端的响应。
##三.多拦截器demo
1.自定义拦截器1
2.自定义拦截器2
3.在springmvc.xml文件中配置拦截器
4.控制器
5.jsp文件
6.控制台打印
7.多拦截器时请求流程
一.拦截器的接口
自定义拦截器需要实现HandlerInterceptor接口package org.springframework.web.servlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public abstract interface HandlerInterceptor { public abstract boolean preHandle(HttpServletRequest paramHttpServletRequest, HttpServletResponse paramHttpServletResponse, Object paramObject) throws Exception; public abstract void postHandle(HttpServletRequest paramHttpServletRequest, HttpServletResponse paramHttpServletResponse, Object paramObject, ModelAndView paramModelAndView) throws Exception; public abstract void afterCompletion(HttpServletRequest paramHttpServletRequest, HttpServletResponse paramHttpServletResponse, Object paramObject, Exception paramException) throws Exception; }
preHandle:预处理回调方法,实现处理器的预处理(如登录检查),第三个参数为响应的处理器(如Controller实现);
返回值:true表示继续流程(如调用下一个拦截器或处理器);
false表示流程中断(如登录检查失败),不会继续调用其他的拦截器或处理器,此时我们需要通过response来产生响应;
postHandle:后处理回调方法,实现处理器的后处理(但在渲染视图之前),此时我们可以通过modelAndView(模型和视图对象)对模型数据进行处理或对视图进行处理,modelAndView也可能为null。
afterCompletion:整个请求处理完毕回调方法,即在视图渲染完毕时回调,如性能监控中我们可以在此记录结束时间并输出消耗时间,还可以进行一些资源清理,类似于try-catch-finally中的finally,但仅调用处理器执行链中preHandle返回true的拦截器的afterCompletion。
二.拦截器处理流程
方法解析:
第一个方法preHandle尤其重要,他可以根据返回值
改变请求往下的流程,起着先导作用,第二个方法posHandle,他可以在
请求通过处理器后,紧接着做一系列的操作,最后经过最后一个方法
afterCompletion,进行客户端的响应。
##三.多拦截器demo
1.自定义拦截器1
package org.springmvc.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; public class MyInterceptor implements HandlerInterceptor { public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception arg3) throws Exception { System.out.println("MyInterceptor.afterCompletion"); } public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("MyInterceptor.postHandle"); } public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("MyInterceptor.preHandle"); return true; } }
2.自定义拦截器2
package org.springmvc.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; public class MyInterceptor2 implements HandlerInterceptor { public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception arg3) throws Exception { System.out.println("MyInterceptor.afterCompletion2"); } public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("MyInterceptor.postHandle2"); } public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("MyInterceptor.preHandle2"); return true; } }
3.在springmvc.xml文件中配置拦截器
<!-- 自动扫描的包名 --> <context:component-scan base-package="org.springmvc.controller" /> <!-- 拦截器 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/*" /> <bean class="org.springmvc.interceptor.MyInterceptor"></bean> </mvc:interceptor> <mvc:interceptor> <mvc:mapping path="/*"/> <bean class="org.springmvc.interceptor.MyInterceptor2"></bean> </mvc:interceptor> </mvc:interceptors> <!-- 视图解释类 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean>
4.控制器
@RequestMapping("helloworld") public String testHelloWorld(){ System.out.println("hello world"); return "success"; }
5.jsp文件
<a href="helloworld">helloworld</a>
6.控制台打印
MyInterceptor.preHandle MyInterceptor.preHandle2 hello world MyInterceptor.postHandle2 MyInterceptor.postHandle MyInterceptor.afterCompletion2 MyInterceptor.afterCompletion
7.多拦截器时请求流程
相关文章推荐
- SpringMVC 登陆拦截器实现登陆控制
- 解决问题:在使用springmvc的web.xml配置乱码拦截器之后接收的get或者post请求中文还是乱码
- SpringMVC学习(十)-拦截器简单使用
- SpringMVC拦截器和过滤器
- SpringMVC——自定义拦截器
- SpringMVC拦截器_老师查看班级的成绩
- SpringMVC 拦截器不拦截静态资源的三种处理方式方法
- SpringMVC拦截器(资源和权限管理)
- 基于SpringMVC的登录拦截器
- SpringMVC的拦截器Interceptor
- Java过滤器与SpringMVC拦截器之间的关系与区别
- springMVC之mvc:interceptors拦截器的用法
- springmvc的拦截器工作原理
- SpringMVC拦截器Interceptor
- SpringMVC拦截器的使用和配置
- springmvc拦截器应用(实现登陆认证)
- Java过滤器与SpringMVC拦截器之间的关系与区别 过滤器与拦截器
- 秀外慧中的springMVC(四)---springmvc的拦截器
- SpringMVC拦截器(资源和权限管理)
- SpringMvc拦截器的实现与使用的场景