这篇文章给大家介绍详解struts2拦截器的使用方法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
如何使用struts2拦截器,或者自定义拦截器。特别注意,在使用拦截器的时候,在行动里面必须最后一定要引用struts2自带的拦截器缺省堆栈defaultStack,如下(这里我是引用了struts2自带的复选框拦截器):
& lt; interceptor-ref name=癱heckbox"比; & lt;参数名称=皍ncheckedValue"祝辞0 & lt;/param> & lt;/interceptor-ref> & lt; interceptor-ref name=癲efaultStack"/祝辞(必须加,否则出错)
也可以改为对全局行动设置自己需要的拦截器,如下:
在struts。xml里面定义全局的配置设置
& lt;包名称=皊truts-shop",扩展了=皊truts-default"的在 & lt; interceptors> & lt; interceptor-stack name=癿yStack"祝辞 & lt; interceptor-ref name=癱heckbox"祝辞 & lt;参数名称=皍ncheckedValue"祝辞0 & lt;/param> & lt;/interceptor-ref> & lt; interceptor-ref name=癲efaultStack"/比; & lt;/interceptor-stack> & lt;/interceptors> & lt; default-interceptor-ref name=癿yStack"/祝辞(这句是设置所有行动自动调用的拦截器堆栈) & lt;/package>
struts action。xml里面配置行动如下:
& lt;包名称=癓ogonAdmin"扩展=皊truts-shop"祝辞(这里扩展struts.xml里面定义的配置就可以了) & lt;动作名称=發ogon"类=發ogonAction"比; & lt; result>/jsp/smeishop/admin/index.jsp & lt;结果名称=癳rror"祝辞/jsp/smeishop/admin/logon.jsp & lt;结果名称=癷nput"祝辞/jsp/smeishop/admin/logon.jsp & lt;/action> & lt;动作名称=發ogout"类=發ogoutAction"比; & lt; result>/jsp/smeishop/admin/logon.jsp & lt;/action> & lt;/package>
你的拦截器可以正常工作了
struts2自带的配置及其拦截器配置
struts2拦截器(拦截器)
拦截器的工作原理如上图,每一个行动请求都包装在一系列的拦截器的内部。拦截器可以在行动执行直线做相似的操作也可以在行动执行直后做回收操作只
每一个行动既可以将操作转交给下面的拦截器,动作也可以直接退出操作返回客户既定的画面只
自定义一个拦截器需要三步:
1,自定义一个实现拦截器接口(或者继承自AbstractInterceptor)的类。
2,在strutx.xml中注册上一步中定义的拦截器。
3,在需要使用的行动中引用上述定义的拦截器,为了方便也可将拦截器定义为默认的拦截器,这样在不加特殊声明的情况下所有的行动都被这个拦截器拦截只
拦截器接口声明了三个方法:
公共接口拦截器扩展了可序列化的{ 空白摧毁(); 无效的init (); 字符串截取(ActionInvocation调用)抛出异常; }
初始化方法在拦截器类被创建之后,在对行动镜像拦截之前调用,相当于一个post-constructor方法,使用这个方法可以给拦截器类做必要的初始话操作只
摧毁方法在拦截器被垃圾回收之前调用,用来回收初始化方法初始化的资源只
拦截是拦截器的主要拦截方法,如果需要调用后续的行动或者拦截器,只需要在该方法中调用invocation.invoke()方法即可,在该方法调用的前后可以插入动作调用前后拦截器需要做的方法。如果不需要调用后续的方法,则返回一个字符串类型的对象即可,例如行动。成功。
另外AbstractInterceptor提供了一个简单的拦截器的实现,这个实现为
公共类CheckLoginInterceptor延伸AbstractInterceptor { 公共静态最终字符串LOGIN_KEY=癓OGIN"; 公共静态最终字符串LOGIN_PAGE=癵lobal.login"; 公共字符串拦截(ActionInvocation ActionInvocation)抛出异常{ System.out.println(“开始检查登录拦截!“);//对LoginAction不做该项拦截 对象行动=actionInvocation.getAction (); 如果(action instanceof LoginAction) { System.out.println(“退出登录检查,因为这是登录行动!”); 返回actionInvocation.invoke (); }//确认会话中是否存在登录 .getSession映射会话=actionInvocation.getInvocationContext () (); 字符串登录=(字符串)session.get (LOGIN_KEY); 如果登录!=零,,login.length()比;0){//存在的情况下进行后续操作。 System.out.println(“已经登录!“); 返回actionInvocation.invoke (); 其他}{//否则终止后续操作,返回登录 System.out.println(“没有登录,登录页面前进!“); 返回LOGIN_PAGE; } } }详解struts2拦截器的使用方法