struts.xml
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<interceptors>
<!-- 定义拦截器 -->
<interceptor name="inter1" class="Interceptor1"/>
<!-- 定义拦截器栈 -->
<interceptor-stack name="inter2">
<!-- 引用拦截器(defaultStack必须放在前面,放后面会替换掉前面的) -->
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="inter1"/>
</interceptor-stack>
</interceptors>
<action name="ac" class="Action1">
<result>index.jsp</result>
<interceptor-ref name="inter2"/>
</action>
</package>
</struts>
拦截器(不可过滤)
//继承AbstractInterceptor
public class Interceptor1 extends AbstractInterceptor{
@Override
public String intercept(ActionInvocation ai) throws Exception
{
//获得action的实例
Object obj = ai.getAction();
if(obj != null){
//左是否为右的实例
if(obj instanceof Action1){
Action1 action = (Action1)obj;
ai.getInvocationContext().getSession();//获得session
//取action里getset的值
String content=action.getContent();
//处理完成后存回action
action.setContent(content.replaceAll("你妹", "*"));
}
return ai.invoke();//继续下一个拦截器
}else{
return Action.LOGIN;//失败则不继续
}
}
}
拦截器(可过滤)
//继承MethodFilterInterceptor
public class Interceptor1 extends MethodFilterInterceptor{
private String name;
@Override
protected String doIntercept(ActionInvocation ai) throws Exception
{
System.out.println(name + "开始");
String rs = ai.invoke();//转交下一个拦截器
System.out.println(name + "完成");
return rs;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
}
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<interceptors>
<!-- 定义拦截器 -->
<interceptor name="inter1" class="Interceptor1"/>
<!-- 定义拦截器栈 -->
<interceptor-stack name="inter2">
<!-- 引用拦截器(defaultStack必须放在前面,放后面会替换掉前面的) -->
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="inter1">
</interceptor-ref>
</interceptor-stack>
</interceptors>
<action name="ac" class="Action1" method="execute1">
<result>index.jsp</result>
<interceptor-ref name="inter1">
<!-- 传参 -->
<param name="name">拦截器1</param>
<!-- 指定被拦截方法 -->
<param name="excludeMethods"></param>
<!-- 指定不被拦截方法 -->
<param name="includeMethods"></param>
</interceptor-ref>
<interceptor-ref name="inter1">
<param name="name">拦截器2</param>
</interceptor-ref>
<interceptor-ref name="inter1">
<param name="name">拦截器3</param>
</interceptor-ref>
</action>
</package>
</struts>
监听器
//实现PreResultListener
public class Interceptor2 implements PreResultListener{
public void beforeResult(ActionInvocation ai, String result)
{
System.out.println("拦截结果为" + result);
}
}
protected String doIntercept(ActionInvocation ai) throws Exception
{
//将监听器手动注册给拦截器
ai.addPreResultListener(new Interceptor2());
System.out.println(name + "开始");
覆盖拦截器原有的param参数值:<param name="拦截器名.参数名">参数值</param>