还是直接上代码了;
不过还是有一个疑问没有搞清楚,例如下配置
<mvc:interceptors > <mvc:interceptor> <!-- 拦截/showUser/后的所有请求,包括静态资源文件 --> <mvc:mapping path="/showUser/**" /> <bean class="com.test.inteceptor.HelloWorldInteceptor"></bean> </mvc:interceptor> </mvc:interceptors>将会拦截/showUser/后的所有请求,包括静态资源文件,资源文件包括(CSS、Js、Image),在实际的环境中这些静态资源不需要被拦截,目前还在研究怎么能使得Inteceptor不拦截这些静态资源文件。
运行环境参照:http://xiaotao-2010.iteye.com/blog/1638827
1、SpringMVC的配置文件
spring-mvc-config.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <!-- the application context definition for the springappDispatcherServlet --> <!-- 默认的注解映射的支持 --> <context:annotation-config /> <!-- 启动时注解扫描器扫描包中的注解,目标包 base-package="*,*" 多个包以逗号分割--> <context:component-scan base-package="com.test.controller" /> <!--启动Spring MVC的注解功能,完成请求和注解POJO的映射 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/> <bean id="annotationMapper" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> <!-- 然后通过order属性 来指定顺序 handler 的加载器--> <property name="order" value="1"/> </bean > <!-- 在使用Spring MVC 映射配置文件时候使用 --> <!-- HandlerMapping <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> --> <!-- HandlerAdapter <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> --> <!-- 视图解释类 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/jsp/"/> <property name="suffix" value=".jsp"/> </bean> <!-- 对静态资源文件的访问 方案一 --> <mvc:default-servlet-handler/> <!-- 对静态资源文件的访问 方案二 (二选一) <mvc:resources mapping="/img/**" location="/img/" cache-period="31556926"/> --> <!-- --> <mvc:interceptors > <mvc:interceptor> <!-- 拦截/showUser/后的所有请求,包括静态资源文件 --> <mvc:mapping path="/showUser/**" /> <bean class="com.test.inteceptor.HelloWorldInteceptor"></bean> </mvc:interceptor> </mvc:interceptors> <!-- 处理器 (非注解时使用) <bean name="/hello" class="com.test.controller.HelloWorldController"/> --> </beans>
2、自定义的Inteceptor
package com.test.inteceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; public class HelloWorldInteceptor implements HandlerInterceptor { @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object o, Exception e) throws Exception { System.out.println("拦截器结束。。。。"); // TODO Auto-generated method stub } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object o, ModelAndView mv) throws Exception { System.out.println("拦截器工作。。。。"); String s = "------- Inteceptor --------: HelloWord !"; System.out.println(s); mv.addObject("intep",s); } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception { // TODO Auto-generated method stub System.out.println("拦截器开启。。。。"); return true; } }
3、访问
访问 URL :http://localhost:8080/test-webapp/jsp/**后的所有资源,将会被拦截
Console输出:
写道
拦截器开启。。。。
拦截器工作。。。。
------- Inteceptor --------: HelloWord !
拦截器结束。。。。
拦截器工作。。。。
------- Inteceptor --------: HelloWord !
拦截器结束。。。。