您的位置:首页 > 编程语言 > Java开发

struts2 学习总结 ---- 拦截器(interceptor)

2014-07-17 13:15 148 查看
拦截器(interceptor) 拦截器是struts2的核心,struts2的大部份特性都来自于它,通过它实现了struts2功能的可插拔, struts2内置了大量的拦截器: 常用拦截器:
拦截器作用
params将请求中的数据设置 到action的属性上
staticParams将配置文件中Action元素的param子元素设置到action的属性上
servletConfig将Servlet API的各种对象注入到Action中,Action必须实现相应接口
fileUpload将文件和元数据从多重请求转为常规请求,便于设置到Action的属性上
validation执行数据校验
workflow当数据校验出错时终止流程
exception捕获异常,并映射到用户自定义错误页面,它位于最外层
了解更多,可查看 struts 核心包下的 /struts-default.xml 文件
自定义拦截器步骤:创建拦截器
<!-- 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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: