Struts2的拦截器
1、Struts2的拦截器只能拦截Action,拦截器是AOP的一种思路,可以使我们的系统架构
更松散(耦合度低),可以插拔,容易互换,代码不改变的情况下很容易满足客户需求
其实体现了OCP
 
2、如何实现拦截器?(整个拦截器体现了责任链模式,Filter也体现了责任链模式)
* 继承AbstractInterceptor(体现了缺省适配器模式,建议使用该模式)
* 实现Interceptor
 
3、如果自定了拦截器,缺省拦截器会失效,必须显示引用Struts2默认的拦截器
 
4、拦截器栈,多个拦截器的和
 
5、定义缺省拦截器<default-interceptor-ref>,所有的Action都会使用
 
6、拦截器的执行原理,在ActionInvocation中有一个成员变量Iterator,这个Iterator中保存了所有的
拦截器,每次都会取得Iterator进行next,如果找到了拦截器就会执行,否则就执行Action,都执行完了
拦截器出栈(其实出栈就是拦截器的intercept方法弹出栈)
 
自定义拦截器myLogInterceptor.java
package com.djoker.struts2;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class myLogInterceptor extends AbstractInterceptor { @Override
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("记录日志开始"); String recode = invocation.invoke(); System.out.println("记录日志结束"); return recode;
} }
struts.xml配置拦截器
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd"> <struts>
<package name="user" extends="struts-default" namespace="/user">
<interceptors>
<!-- 声明过滤器 -->
<interceptor name="mylog" class="com.djoker.struts2.myLogInterceptor"></interceptor>
<!-- 使用站方式声明过滤器 -->
<interceptor-stack name="myStack">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="mylog"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 默认拦截器,如果没有指定则使用该拦截器 -->
<default-interceptor-ref name="myStack"></default-interceptor-ref>
<global-exception-mappings>
<exception-mapping result="error" exception="com.djoker.struts2.UserNotFoundException"></exception-mapping>
</global-exception-mappings>
<action name="*User" class="com.djoker.struts2.UserAction" method="{1}User">
<!-- 普通配置,但是每个Action都需要配置
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="mylog"></interceptor-ref>
-->
<!--
<interceptor-ref name="mylog"></interceptor-ref>
-->
<exception-mapping result="error" exception="com.djoker.struts2.UserNotFoundException"></exception-mapping>
<result>/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
05-11 14:50