Struts2-学习笔记系列(14)-拦截器

6.1对action 的拦截

自定义拦截器:

 1 public class MyInterceptor extends AbstractInterceptor {
 2
 3     private String name;
 4
 5
 6     @Override
 7     public String intercept(ActionInvocation actionInvocation) throws Exception {
 8         //获取被拦截的action实例
 9         LoginAction action = (LoginAction) actionInvocation.getAction();
10         System.out.print(name + " 拦截器开始执行:" + new Date());
11         long start = System.currentTimeMillis();
12         //执行该拦截器的下一个拦截器
13         //然后调用action 的执行方法
14         String result = actionInvocation.invoke();
15         System.out.print(name + " action执行完成后:" + new Date());
16         long end = System.currentTimeMillis();
17         System.out.print("执行完该action的时间为:" + (end - start) + "毫秒");
18         return result;
19     }
20
21     public void setName(String name) {
22         this.name = name;
23     }
24 }
25
26  

若是需要在拦截器中实现init和destory方法,则需要实现interceptor

引用拦截器:

 1 <package name="lee" extends="struts-default">
 2     <interceptors>
 3         <interceptor name="zcx" class="interceptors.MyInterceptor">
 4             <param name="name"></param>
 5         </interceptor>
 6     </interceptors>
 7     <action name="login" class="zcx.controller.LoginAction">
 8         <!-- 配置名为input的逻辑视图,当转换失败后转入该逻辑视图 -->
 9         <result name="input">/WEB-INF/content/input.jsp</result>
10         <result>/WEB-INF/content/welcome.jsp</result>
11         <result name="error">/WEB-INF/content/welcome.jsp</result>
12         <interceptor-ref name="defaultStack"></interceptor-ref>
13         <interceptor-ref name="zcx">
14             <param name="name">改名后的拦截器</param>
15         </interceptor-ref>
16     </action>
17     <action name="*">
18         <result>/WEB-INF/content/{1}.jsp</result>
19     </action>
20 </package>

需要注意的是,当在struts文件中显示配置了拦截器,则默认的拦截器不生效。因此,需要在struts中先指定默认拦截器。若是遇到后面有同名拦截器,则会将默认的覆盖.

指定默认拦截器

<interceptor-ref
name="defaultStack"></interceptor-ref>

6.2对方法的拦截

 1 public class MyMethondInterceptor extends MethodFilterInterceptor {
 2     private String name;
 3
 4     @Override
 5     protected String doIntercept(ActionInvocation actionInvocation) throws Exception {
 6         //获取被拦截的action实例
 7         LoginAction action = (LoginAction) actionInvocation.getAction();
 8         System.out.print(name + " 拦截器开始执行:" + new Date());
 9         long start = System.currentTimeMillis();
10         //执行该拦截器的下一个拦截器
11         //然后调用action 的执行方法
12         String result = actionInvocation.invoke();
13         System.out.print(name + " action执行完成后:" + new Date());
14         long end = System.currentTimeMillis();
15         System.out.print("执行完该action的时间为:" + (end - start) + "毫秒");
16         return result;
17     }
18
19     public void setName(String name) {
20         this.name = name;
21     }
22 }
 1 <package name="lee" extends="struts-default">
 2     <interceptors>
 3         <interceptor name="zcx" class="interceptors.MyMethondInterceptor">
 4             <param name="name">嘻嘻</param>
 5         </interceptor>
 6     </interceptors>
 7     <action name="login" class="zcx.controller.LoginAction">
 8         <!-- 配置名为input的逻辑视图,当转换失败后转入该逻辑视图 -->
 9         <result name="input">/WEB-INF/content/input.jsp</result>
10         <result>/WEB-INF/content/welcome.jsp</result>
11         <result name="error">/WEB-INF/content/welcome.jsp</result>
12         <interceptor-ref name="defaultStack"></interceptor-ref>
13         <interceptor-ref name="zcx">
14             <param name="name">改名后的拦截器</param>
15             <!--指定execute不需要被拦截-->
16             <param name="excludeMethods">execute</param>
17             <param name="includeMethods">execute</param>
18         </interceptor-ref>
19     </action>
20     <action name="*">
21         <result>/WEB-INF/content/{1}.jsp</result>
22     </action>
23 </package>

excludeMethonds:不拦截execute方法,后一个相反

<param name="excludeMethods">execute</param>
<param name="includeMethods">execute</param>

6.3拦截器执行顺序

在action控制方法执行之前,拦截器配置在前面那个先起作用;action控制方法执行之后,配置在后面的拦截器先起作用

6.4覆盖拦截器栈的参数

如果需要在使用拦截器栈时直接覆盖某个拦截器的属性值,则在指定需要被覆盖的属性时,不能只指定属性名,必须加上该属性属于的拦截器名:<拦截器>.<属性名>

时间: 2024-08-11 12:24:53

Struts2-学习笔记系列(14)-拦截器的相关文章

【Struts2学习笔记-6--】Struts2之拦截器

简单拦截器的使用 拦截器最基本的使用: 拦截方法的拦截器 拦截器的执行顺序 拦截结果的监听器-相当于 后拦截器 执行顺序: 覆盖拦截器栈里特定拦截器的参数 使用拦截器完成-权限控制 主要完成两个功能: 先检查浏览者是否登录: 看登录的用户是否有权限访问: 来自为知笔记(Wiz) 附件列表

[原创]java WEB学习笔记74:Struts2 学习之路--自定义拦截器,struts内建的拦截器

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

struts2框架学习笔记6:拦截器

拦截器是Struts2实现功能的核心部分 拦截器的创建: 第一种: package interceptor; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.Interceptor; //拦截器的第一种创建方式 //拦截器的生命周期:随项目启动创建,随项目关闭而销毁 public class MyInterceptor implements Intercepto

Struts2学习:interceptor(拦截器)的使用

对于需要登陆验证.权限验证等功能的网站,每一次请求,每一个action都写一段验证的代码,未免显得冗余且不易维护.struts2提供了拦截器interceptor,为这些页面提供一个切面,或者说公共组件,以达到易维护.提高代码重用率的目的.struts默认的interceptor有很多,就不去一一列举,这里从自定义拦截器开始学习. 1.定义一个自定义拦截器: package com.owlforest.home.interceptor; import com.opensymphony.xwork

Struts2学习第4天--拦截器

第1章     Struts2_day04笔记 1.1      上次课内容回顾 l  OGNL表达式 n  OGNL的概述 u  OGNL:对象图导航语言,是一门功能强大的表达式语言. n  OGNL的功能 u  调用对象的方法 u  调用对象的静态方法 u  表达式串联 u  访问ActionContext和OgnlContext数据 n  OGNL独立的表达式: u  Java环境下入门 u  Struts2环境下入门 l  值栈 n  值栈的概述 u  ValueStack:是一个接口,

struts2 学习(五) ----- 文字过滤拦截器

struts2 的文字过滤拦截器 1.新建一个news.jsp页面 然后,新建一个newsSuccess.jsp页面, 2.新建一个class,名为:TextAction.java 3.修改struts.xml的配置: 然后就可以初步传递数据了. 加上下面这句代码就可以防止传递中文字符时发生乱码现象: 4.下面创建拦截器,新建一个class,名为TextInterceptor.java 注意,新建的时候需要继承AbstractInterceptor. 然后,在struts.xml修改一下配置:

Struts2学习第三天——拦截器与文件传输

文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 2016.06.15 lutianfei none 内容摘要: 1.国际化(了解) 2.拦截器(Interceptor)-重点 3.struts2文件上传与下载(次重点) 4.ognl与valuestack 国际化 国际化原理,什么是国际化 ? 同一款软件 可以为不同用户,提供不同语言界面 -- 国际化软件 需要一个语言资源包(很多properties文件,每个properties文件 针对一个国家或者语言 ,通过java程序根

SpringMVC 学习笔记(九) 自定义拦截器

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">Spring MVC</span><span style="font-family: 宋体; background-color: rgb(255, 255, 255);">也可以使用拦截器对请求进行拦截处理,用户 可以自定义拦截器来实现特定的功

WebService学习笔记-CXF添加拦截器

Webservice拦截器:在webservice请求过程中,动态操作请求和响应的数据 分类 按照所处的位置分:服务器端拦截器  客户端拦截器 按照消息的方向分:入拦截器  出拦截器 按照定义者分:系统拦截器 自定义拦截器 在服务器端添加拦截器 package com.demo; //注意引入的类一定要正确 import javax.xml.ws.Endpoint; import org.apache.cxf.interceptor.LoggingInInterceptor; import or