拦截器 | 作用 |
params | 将请求中的数据设置 到action的属性上 |
staticParams | 将配置文件中Action元素的param子元素设置到action的属性上 |
servletConfig | 将Servlet API的各种对象注入到Action中,Action必须实现相应接口 |
fileUpload | 将文件和元数据从多重请求转为常规请求,便于设置到Action的属性上 |
validation | 执行数据校验 |
workflow | 当数据校验出错时终止流程 |
exception | 捕获异常,并映射到用户自定义错误页面,它位于最外层 |
- 创建拦截器
<!-- 1,继承AbstractInterceptor -->
public class Myintercepter extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation arg0) throws Exception {
Users user = arg0.getInvocationContext().getSession().get("LoinUser");
if(user==null){
return "login";
}
return arg0.invoke();
}
}<!-- 2,实现Interceptor接口 -->
public class Myintercepter implements Interceptor {
public void destroy() {
// TODO Auto-generated method stub
}
public void init() {
// TODO Auto-generated method stub
}
public String intercept(ActionInvocation arg0) throws Exception {
Users user = arg0.getInvocationContext().getSession().get("LoinUser");
if(user == null){
return "login";
}
return arg0.invoke();
}
}<!-- 3,继承MethodFilterInterceptor :可以实现只对相应Action类中的方法进行拦截,只需要在配置拦截器时指定 excludeMethods 或 includeMethods 参数就行-->
public class Myintercepter extends MethodFilterInterceptor {
@Override
public String doIntercept(ActionInvocation arg0) throws Exception {
Users user = arg0.getInvocationContext().getSession().get("LoinUser");
if(user == null){
return "login";
}
return arg0.invoke();
}
} - 声明拦截器
<interceptors>
<!--声明拦截器-->
<interceptor name="aaa" class="aa.bb.ClazzAA"/><interceptor name="Myintercepter" class="cn.interceptor.Myintercepter">
<param name="excludeMethods">login,regist</param>
</interceptor>
<interceptor name="bbb" class="aa.bb.ClazzBB"/><!--声明拦截器栈-->
<interceptor-stack name="MyStack">
<interceptor-ref name="aa"/>
<interceptor-ref name="bb"/>
</interceptor-stack>
</interceptors> - 引用拦截器: 注意:一旦自己引用拦截器,默认的拦截器就不会被使用
<interceptors>
<!--自定义带参拦截器-->
<interceptor name="Myintercepter" class="cn.interceptor.Myintercepter">
<param name="excludeMethods">login,regist</param>
</interceptor>
<!--声明自定义拦截器-->
<interceptor name="bbb" class="aa.bb.ClazzBB"/>
<interceptor-stack name="MyStack"><!--自定义拦截器栈 -->
<interceptor-ref name="Myintercepter"/>
<interceptor-ref name="aa"/>
<interceptor-ref name="bb"/>
</interceptor-stack>
</interceptors>
<action name="*User" class="action.UserAction" method="{1}">
<interceptor-ref name="basicStack" /><!-- 引入struts内置拦截器栈--><interceptor-ref name="MyStack" /><!--引入自定义拦截器栈-->
<result name="input">{1}.jsp</result>
</action>