- 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>