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