[j2ee][springMVC]springMVC中的拦截器及其应用
2013-01-22 09:19
295 查看
一,首先介绍springMVC中的拦截器
Spring MVC 拦截器
Controller层的拦截器继承于HandlerInterceptorAdapter
HandlerInterceptorAdapter.java
1 public abstract class HandlerInterceptorAdapter implements HandlerInterceptor {
2
3 /**
4 * This implementation always returns <code>true</code>.
5 */
6 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
7 throws Exception {
8 return true;
9 }
10
11 /**
12 * This implementation is empty.
13 */
14 public void postHandle(
15 HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
16 throws Exception {
17 }
18
19 /**
20 * This implementation is empty.
21 */
22 public void afterCompletion(
23 HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
24 throws Exception {
25 }
26
27 }
Spring拦截器通过重写这三个方法实现Controller的拦截。
配置拦截器
xml
1 <bean id="handlerMapping"
2 class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
3 <property name="interceptors">
4 <list>
5 <ref bean="controllerInterceptor" />
6 </list>
7 </property>
8 <property name="mappings">
9 <props>
10 <prop key="/hao/hello.do">helloWorldController</prop>
11 </props>
12 </property>
13 </bean>
14
15 <bean id="controllerInterceptor" class="com.web.spring.mvc.interceptor.ControllerInterceptor"/>
16
ControllerInterceptor.java
1 public class ControllerInterceptor extends HandlerInterceptorAdapter {
2
3 /**
4 * 在Controller方法前进行拦截
5 */
6 public boolean preHandle(HttpServletRequest request,
7 HttpServletResponse response, Object handler) throws Exception {
8 System.out.println("ControllerInterceptor.preHandle()");
9 return true;
10 }
11
12 /**
13 * This implementation is empty.
14 */
15 public void postHandle(HttpServletRequest request,
16 HttpServletResponse response, Object handler,
17 ModelAndView modelAndView) throws Exception {
18 System.out.println("ControllerInterceptor.postHandle()");
19 }
20
21 /**
22 * 在Controller方法后进行拦截
23 */
24 public void afterCompletion(HttpServletRequest request,
25 HttpServletResponse response, Object handler, Exception ex)
26 throws Exception {
27 System.out.println("ControllerInterceptor.afterCompletion()");
28 }
29 }
说明:
发起请求,进入拦截器链,运行所有拦截器的preHandle方法,
1.当preHandle方法返回false时,从当前拦截器往回执行所有拦截器的afterCompletion方法,再退出拦截器链。
2.当preHandle方法全为true时,执行下一个拦截器,直到所有拦截器执行完。再运行被拦截的Controller。然后进入拦截器链,运行所有拦截器的postHandle方法,完后从最后一个拦截器往回执行所有拦截器的afterCompletion方法.
当有拦截器抛出异常时,会从当前拦截器往回执行所有拦截器的afterCompletion方法
Controller
1
2 @Controller
3 @RequestMapping("/hao")
5 public class HelloWorldController {
6
7 @RequestMapping(value = "/hello")
8 public String hello(HttpServletRequest request, HttpServletResponse response) {
9 System.out.println("hello");
15 return "helloWorld";
16 }
17 }
[b]二,springMVC中拦截器的执行顺序
[/b]
我在mvc-servlet.xml中放入了两个拦截器
并在这两个拦截器中preHandle,postHandle,afterCompletion中和controller中添加测试语句
启动服务器访问tomcat后控制台的代码如下:
三,springMVC中拦截器的应用
1.一次请求所花费的时间
2.某个controller需要登录才能访问
3.springMVC实现动态国际化
4.某个方法必须加自定义的注释
具体项目地址如下: http://pan.baidu.com/share/link?shareid=273982&uk=3475027816
Spring MVC 拦截器
Controller层的拦截器继承于HandlerInterceptorAdapter
HandlerInterceptorAdapter.java
1 public abstract class HandlerInterceptorAdapter implements HandlerInterceptor {
2
3 /**
4 * This implementation always returns <code>true</code>.
5 */
6 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
7 throws Exception {
8 return true;
9 }
10
11 /**
12 * This implementation is empty.
13 */
14 public void postHandle(
15 HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
16 throws Exception {
17 }
18
19 /**
20 * This implementation is empty.
21 */
22 public void afterCompletion(
23 HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
24 throws Exception {
25 }
26
27 }
Spring拦截器通过重写这三个方法实现Controller的拦截。
配置拦截器
xml
1 <bean id="handlerMapping"
2 class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
3 <property name="interceptors">
4 <list>
5 <ref bean="controllerInterceptor" />
6 </list>
7 </property>
8 <property name="mappings">
9 <props>
10 <prop key="/hao/hello.do">helloWorldController</prop>
11 </props>
12 </property>
13 </bean>
14
15 <bean id="controllerInterceptor" class="com.web.spring.mvc.interceptor.ControllerInterceptor"/>
16
ControllerInterceptor.java
1 public class ControllerInterceptor extends HandlerInterceptorAdapter {
2
3 /**
4 * 在Controller方法前进行拦截
5 */
6 public boolean preHandle(HttpServletRequest request,
7 HttpServletResponse response, Object handler) throws Exception {
8 System.out.println("ControllerInterceptor.preHandle()");
9 return true;
10 }
11
12 /**
13 * This implementation is empty.
14 */
15 public void postHandle(HttpServletRequest request,
16 HttpServletResponse response, Object handler,
17 ModelAndView modelAndView) throws Exception {
18 System.out.println("ControllerInterceptor.postHandle()");
19 }
20
21 /**
22 * 在Controller方法后进行拦截
23 */
24 public void afterCompletion(HttpServletRequest request,
25 HttpServletResponse response, Object handler, Exception ex)
26 throws Exception {
27 System.out.println("ControllerInterceptor.afterCompletion()");
28 }
29 }
说明:
发起请求,进入拦截器链,运行所有拦截器的preHandle方法,
1.当preHandle方法返回false时,从当前拦截器往回执行所有拦截器的afterCompletion方法,再退出拦截器链。
2.当preHandle方法全为true时,执行下一个拦截器,直到所有拦截器执行完。再运行被拦截的Controller。然后进入拦截器链,运行所有拦截器的postHandle方法,完后从最后一个拦截器往回执行所有拦截器的afterCompletion方法.
当有拦截器抛出异常时,会从当前拦截器往回执行所有拦截器的afterCompletion方法
Controller
1
2 @Controller
3 @RequestMapping("/hao")
5 public class HelloWorldController {
6
7 @RequestMapping(value = "/hello")
8 public String hello(HttpServletRequest request, HttpServletResponse response) {
9 System.out.println("hello");
15 return "helloWorld";
16 }
17 }
[b]二,springMVC中拦截器的执行顺序
[/b]
我在mvc-servlet.xml中放入了两个拦截器
<!-- 拦截器 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**" /> <bean class="com.wendellup.web.base.annotation.method.security.SystemCommonInterceptor"> <property name="moreThanTime"> <value>500</value> </property> </bean> </mvc:interceptor> <mvc:interceptor> <mvc:mapping path="/**" /> <bean class="com.wendellup.web.base.annotation.method.business.AnnotationBusinessDescInterceptor"> </bean> </mvc:interceptor> </mvc:interceptors>
并在这两个拦截器中preHandle,postHandle,afterCompletion中和controller中添加测试语句
启动服务器访问tomcat后控制台的代码如下:
[INFO ] 2013-01-22 15:55:23 :SystemCommonInterceptor: preHandle [INFO ] 2013-01-22 15:55:23 :AnnotationBusinessDescInterceptor: preHandle [INFO ] 2013-01-22 15:55:23 :------------LoginController------------ [INFO ] 2013-01-22 15:55:23 :AnnotationBusinessDescInterceptor: postHandle [INFO ] 2013-01-22 15:55:23 :SystemCommonInterceptor: postHandle [INFO ] 2013-01-22 15:55:23 :AnnotationBusinessDescInterceptor: afterCompletion [INFO ] 2013-01-22 15:55:23 :SystemCommonInterceptor: afterCompletion
三,springMVC中拦截器的应用
1.一次请求所花费的时间
2.某个controller需要登录才能访问
3.springMVC实现动态国际化
4.某个方法必须加自定义的注释
具体项目地址如下: http://pan.baidu.com/share/link?shareid=273982&uk=3475027816
相关文章推荐
- springMVC笔记系列(23)——拦截器及其在乱码问题和登录问题的应用实现
- SpringMVC案例3----spring3.0项目拦截器、ajax、文件上传应用
- springmvc拦截器应用(实现登陆认证)
- springmvc拦截器应用
- springmvc拦截器及其配置
- SpringMVC案例3----spring3.0项目拦截器、ajax、文件上传应用
- springMVC拦截器应用
- SpringMvc拦截器的应用(防止未登录访问)
- SpringMVC用户登录和拦截器简单应用增删改查
- SpringMVC中的拦截器的示例及应用
- SpringMVC拦截器应用(实现登陆认证)
- ul与li应用样式及其兼容性
- JSP内置对象及其应用场合
- Java过滤器与SpringMVC拦截器之间的关系与区别
- SpringMVC学习记录(七)--拦截器的使用
- 图遍历算法及其应用
- 搭建FTP服务详解及其应用
- 多元回归分析(multiple regression)及其应用
- 再析气象大数据及其应用 如何看待大数据
- 阿里商业评论 | 互联网POI数据及其在营销中的应用