- Filter过滤器:拦截web访问url地址。 这个比拦截器范围广,过滤器是大集合,拦截器是大集合中的小集合。而且任何url是先经过过滤器后才进入拦截器的。
- Interceptor拦截器:拦截url以action结尾或者没有后缀的,没有后缀拦截器会认为是.action结尾。。 如:struts2拦截器、spring拦截器
- Spring AOP拦截器:只能拦截Spring管理Bean的访问(业务层Service),就是说执行某个bean容器中方法时进行拦截,而不是对url。
过滤器配置在web.xml中,而拦截器是配置在框架中。
过滤器的配置(web.xml):
<filter> <!-- 过滤器名称 --> <filter-name>loginFilter</filter-name> <!-- 过滤器的路径 --> <filter-class>com.ygj.control.loginFilter</filter-class> <!-- 可选 --> <init—param> <!-- 过滤器初始化参数--> <param—name>参数名</param-name> <param-value>参数值</param-value> </init—pamm> </filter> <!-- 过滤器映射 --> <filter-mapping> <filter-name>loginFilter</filter-name> <url—pattern>指定过滤器作用的对象</url-pattern> </filter-mapping>
拦截器,以springmvc为例配置在spring.xml:
<mvc:interceptors> <!-- 使用bean定义一个Interceptor,直接定义在mvc:interceptors根下面的Interceptor将拦截所有的请求 --> <!-- <bean class="com.bybo.aca.web.interceptor.Login"/> --> <mvc:interceptor> <!-- 进行拦截:/**表示拦截所有controller --> <mvc:mapping path="/**" /> <!-- 不进行拦截 --> <mvc:exclude-mapping path="/index.html"/> <bean class="com.bybo.aca.web.interceptor.Login"/> </mvc:interceptor> </mvc:interceptors>
springAOP
<!-- 配置切面类 --> <bean id="myAspectXml" class="cn.itcast.spring.demo3.MyAspectXml"></bean> <!-- 进行 aop 的配置 --> <aop:config> <!-- 配置切入点表达式:哪些类的哪些方法需要进行增强,就是说执行某个方法进行拦截 --> <aop:pointcut expression="execution(*cn.itcast.spring.demo.*Dao.save(..))" id="pointcut1"/> <aop:pointcut expression="execution(*cn.itcast.spring.demo.*Dao.delete(..))" id="pointcut2"/> <aop:pointcut expression="execution(*cn.itcast.spring.demo.*Dao.update(..))" id="pointcut3"/> <aop:pointcut expression="execution(*cn.itcast.spring.demo.*Dao.find(..))" id="pointcut4"/> <!-- 配置切面 --> <!-- myAspectXml内含有before,afterReturing,around,afterThrowing,after方法--> <aop:aspect ref="myAspectXml"> <!-- method是切面类调用的方法,pointcut-ref是拦截的方法 --> <aop:before method="before" pointcut-ref="pointcut1"/> <aop:after-returning method="afterReturing" pointcut-ref="pointcut2"/> <aop:around method="around" pointcut-ref="pointcut3"/> <aop:after-throwing method="afterThrowing" pointcut-ref="pointcut4"/> <aop:after method="after" pointcut-ref="pointcut4"/> </aop:aspect> </aop:config>