`
xiaotao.2010
  • 浏览: 212164 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

SpringMVC初探_拦截器(Inteceptor)

 
阅读更多

 

还是直接上代码了;

 

不过还是有一个疑问没有搞清楚,例如下配置

<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 !
拦截器结束。。。。
 
分享到:
评论
4 楼 xiaotao.2010 2013-01-11  
beming 写道
xiaotao.2010 写道
beming 写道
请问我要截拦ROOT下某个目录下面的静态文件如test.txt应该怎么配置?

http://localhost:8080/upload/test.txt

截拦这种访问


<mvc:interceptors >   
            <mvc:interceptor>   
                <!-- 拦截/upload/*.txt,例举用的是HelloWorldInteceptor这个拦截器 --> 
                <mvc:mapping path="/upload/*.txt" />  
                <bean class="com.test.inteceptor.HelloWorldInteceptor"></bean>   
            </mvc:interceptor>   
        </mvc:interceptors> 

试过不可以。。。

帖一下你的配置~
3 楼 beming 2013-01-10  
xiaotao.2010 写道
beming 写道
请问我要截拦ROOT下某个目录下面的静态文件如test.txt应该怎么配置?

http://localhost:8080/upload/test.txt

截拦这种访问


<mvc:interceptors >   
            <mvc:interceptor>   
                <!-- 拦截/upload/*.txt,例举用的是HelloWorldInteceptor这个拦截器 --> 
                <mvc:mapping path="/upload/*.txt" />  
                <bean class="com.test.inteceptor.HelloWorldInteceptor"></bean>   
            </mvc:interceptor>   
        </mvc:interceptors> 

试过不可以。。。
2 楼 xiaotao.2010 2012-12-31  
beming 写道
请问我要截拦ROOT下某个目录下面的静态文件如test.txt应该怎么配置?

http://localhost:8080/upload/test.txt

截拦这种访问


<mvc:interceptors >   
            <mvc:interceptor>   
                <!-- 拦截/upload/*.txt,例举用的是HelloWorldInteceptor这个拦截器 --> 
                <mvc:mapping path="/upload/*.txt" />  
                <bean class="com.test.inteceptor.HelloWorldInteceptor"></bean>   
            </mvc:interceptor>   
        </mvc:interceptors> 
1 楼 beming 2012-12-20  
请问我要截拦ROOT下某个目录下面的静态文件如test.txt应该怎么配置?

http://localhost:8080/upload/test.txt

截拦这种访问

相关推荐

Global site tag (gtag.js) - Google Analytics