Struts2框架拦截器应用解析

来源 :企业文化·中旬刊 | 被引量 : 0次 | 上传用户:BBP
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:拦截器是Struts2框架的灵魂,它完成了Struts2框架的绝大部分功能。开发者既可以自由选择内建拦截器随意组合应用,又可以开发自定义的拦截器来实现特定的功能。本文较详尽地解析了如何开发和配置拦截器。
  关键词:Struts2框架 拦截器 开发和配置 Interceptor接口
  一、引言
  在早期的Struts1框架中,很多基本的通用控制逻辑都固化在系统的核心控制器中,灵活性和扩展性都比较差。Struts2改变了这种做法,它把大部分核心控制器需要完成的工作按功能定义成一个个独立的拦截器,开发者可以自由选择,随意组合,极大地提高了灵活性和扩展性。
  拦截器体系是Struts2框架的一个重要组成部分,大量的内建拦截器完成了这个框架的大部分操作。Struts2的拦截器在使用上非常简单方便,只要在配置文件中应用拦截器,就可以直接使用,不需要使用的时候在配置中取消即可。Struts2的拦截器由struts-default.xml、struts.xml等配置文件来管理,开发者可以很容易开发和配置自己的拦截器。
  二、配置和使用拦截器
  拦截器的定义过程很简单,只需要在struts.xml文件中为拦截器类指定一个拦截器名。定义拦截器使用元素,其基本格式如下:
  
  上述格式可以实现大多数情况下的拦截器配置。如果需要在配置拦截器时传入参数,可以在元素中使用子元素。
  此外,如果有多个拦截器常常一起使用,还可以将它们连在一起组成拦截器栈,使用时就可以直接调用这个拦截器栈。定义拦截器栈使用元素。
  定义了拦截器(包含拦截器栈)之后,就可以使用这个拦截器来拦截Action了,在Action的execute方法执行之前将会先执行拦截器的拦截行为。
  通过元素可以在Action内使用拦截器,配置语法与配置拦截器栈时引用拦截器的语法是一样的。
  系统中使用多个拦截器时,拦截器的执行顺序与配置顺序有很大的关系。通常认为,先配置的拦截器会先执行,但实际上,在Action的控制逻辑方法执行之前,位于拦截器链前面的拦截器将先发生作用,在Action的控制逻辑逻辑方法执行之后,位于拦截器链前面的拦截器将后发生作用。因此,开发时需要根据实际执行要求合理进行配置。
  三、配置默认拦截器
  配置一个包时,可以给它指定默认拦截器(栈),一经指定,如果该包中的Action没有显式指定拦截器,则默认的拦截器将会起作用。而一旦为该包中的Action显式指定了某个拦截器,则默认的拦截器不会起作用,如果需要使用则必须手动配置。
  配置默认拦截器使用元素,在子元素中使用,表明为该包下所有的Action配置默认的拦截器。每个包只能指定一个默认拦截器,如果想要使用多个拦截器,可以先把它们配置成一个拦截器栈。
  四、实现拦截器类
  虽然Struts2框架提供了大量的内置拦截器来实现Web应用的通用功能,但开发者在软件开发时可能还有一些系统逻辑相关的通用功能需要通过自定义的拦截器来实现。开发者在定义自己的拦截器类时,需要实现Interceptor接口,该接口包含3个方法:
  init方法主要用于初始化资源,在该拦截器被实例化之后执行拦截之前执行且只执行一次。destroy方法用于关闭或销毁在init方法里打开的资源,在拦截器实例被销毁之前执行。intercept方法是开发者需要实现的拦截操作,它返回一个字符串作为逻辑视图。该方法的ActionInvocation参数包含了被拦截的Action的引用,通过调用该方法的invoke方法将控制权转给下一个拦截器或Action的execute方法。这个参数可以获得被拦截的Action实例,可以实现将HTTP请求中的参数解析出来,设置成Action属性,也可以直接将HTTP请求中的HttpServletRequest实例和HttpServletResponse实例传给Action。
  五、拦截方法的拦截器
  在默认情况下,如果某个Action定义了拦截器,这个拦截器会拦截该Action中的所有方法。如果不希望拦截所有方法,可以使用拦截器的方法过滤。
  实现支持方法过滤的拦截器类,需要继承MethodFilterInter-ceptor类。该类是AbstractInterceptor类的子类,它重写了intercept方法,实现了对Action的拦截行为,但是只实现了方法的过滤,至于真正的拦截逻辑还需要开发者在另外提供的一个doIntercept方法中实现。
  在MethodFilterInterceptor类中增加了两个方法用来指定需要或不需要被拦截的方法:
  1.setExcludeMethods方法:设置“不拦截名单”,所有在参数中列出的方法都不会被拦截。
  2.setIncludeMethods方法:设置“拦截名单”,所有在参数中列出的方法都会被拦截。
  由于MethodFilterInterceptor类包含了这两个方法,所以它的子类也会获得这两个方法,可以在配置文件中指定需要拦截或不需要拦截的方法。
  参考文献:
  [1]李刚.轻量级Java EE企业应用实战——Struts2+Spring+ Hibernate整合开发.电子工业出版社,2010
  [2]陈亚辉,缪勇.Struts2+Spring+Hibernate框架技术与项目实战.清华大学出版社,2012
  [3]清华大学计算机与信息管理中心.轻量级Java EE体系架构程序开发.中国铁道出版社,2010
  作者简介:林海菁(1975-),女,江西南昌人,副教授,计算机应用专业硕士。
其他文献
目的 观察静脉麻醉在门诊口腔手术中应用(无痛牙科)的安全性,探讨相关的护理措施.方法 将60例行异丙酚静脉麻醉的患者随机分为靶控输注(TCI)组和手控输注(MAN)组,每组30例,严密观察患者生命体征、不同时间用药量的比较(给药前、给药后2 min、5 min、10 min)及术毕的血压、心率、氧饱和度及镇静深度.结果 患者意识消失所需要的时间无明显差别,MAN组在术中的燥动的发生率明显高于TCI
目的 探讨用国产一次性气管套管、进口自带吸痰式一次性气管套管、传统银质气管套管临床应用效果.方法 按用不同气管套管122例患者分3组,置管期间发生气管套管内口痰痂堵管、呕吐物误吸、肺部感染等不良事件,进行观察、记录、分析.结果 3组患者,置管期间气管不良事件发生率及医疗费用差异有显著性(P<0.01).结论 临床科室应该同时备有3种以上气管套管供患者根据病情和经济状况选用。
临床上1例患者同时患有2种肿瘤,并且合并高血压、糖尿病的病例很少见,因患者病情复杂,给治疗和护理带来很大困难,给患者造成很大的心理负担,同时也对护理工作提出了更高的要求.2006年4月13日我科收治1例患子宫内膜癌、乳腺癌,合并高血压、糖尿病的患者,经过积极的治疗和精心的护理,取得良好的效果,现将护理体会报道如下。
关节置换是解决关节功能障碍且保守治疗无效最有效的方式,我科于2006年9月29日为一位类风湿性关节炎、髂、膝关节强直不能下床活动18年的患者成功实施了双侧人工全髋、全膝关节置换术,术后恢复良好,60d痊愈出院,现将护理体会汇报如下。
白塞氏病是一种反复发作的、累及多器官系统的自身免疫性疾病,以小血管炎为病理基础,其发病机制尚不清楚,临床以反复发作的口腔溃疡、生殖器溃疡、虹膜睫状体炎和皮肤损害为主要特征,并可累及皮肤黏膜、胃肠道、关节、泌尿、心血管、神经等系统.本病多发于青壮年.本院于1982年5月收治1例白塞病肠病变病人,并行右半结肠切除术,此后又分别于1983年11月和1988年7月2次行肠瘘修补术.本次病人于2005年11
目的 探讨大剂量乙酰半胱氨酸对特发性肺纤维化(IPF)患者血清IL-13水平的影响.方法 IPF患者随机分为对照组和治疗组各20例,治疗前后行肺功能、血气分析、血清IL-13的检测.结果 治疗组肺功能、血气明显改善(P<0.05,P<0,01).血清IL-13水平低于对照组([(103±21)ng/L vs(153±27)ng/L,P<0.05]结论乙酰半胱氨酸可能通过减少患者IL-13表达而治疗
目的 探讨静脉补液结合消化道补水在治疗高渗高血糖状态(HHS)中的作用.方法 33例HHS患者纳入本研究.在静脉补液的同时,匀速进行消化道补水,观察治疗前后血钠、血钾、血糖、有效血浆渗透压等变化及补液、补钾量和预后.结果 经静脉补液和消化道补水,血糖、有效血浆渗透压平稳下降,治疗头12 h血糖及有效血浆渗透压下降速度不超过3 mmol·L-1·h-1;治疗48 h后,除2例死亡外,其余患者血钠、血
我院从2000年至2003年采用带蒂大网膜全脾包裹保脾术治疗5例,效果优良,现报告如下.
目的 评估药物引起的不良反应在我市发生情况及其给患者带来的危害,为临床用药提供警示.方法 对我市中心收集到的1418例药品不良反应(ADR)病例进行分类统计和分析评价.结果 涉及ADR的药物共有466个品种,其中抗感染药居首位,其次为中药制剂、心血管系统用药,途径以静脉用药为主.主要的ADR类型为全身性损害,其次是皮肤反应.结论 加强临床用药的监测,避免不合理使用造成人体伤害。
目的 以盐酸曲马多注射液为对照药物观察静脉病人自控镇痛(PCA)中应用酮咯酸氨丁三醇的镇痛效果.方法 90例择期肺叶切除手术患者随机分为2组,酮咯酸氨丁三醇组45例,盐酸曲马多组45例.术后患者神志清醒后疼痛评分达中或重度疼痛者,静脉注射酮咯酸氨丁三醇30 mg或盐酸曲马多100 mg后连接静脉PCA泵(酮咯酸氨丁三醇2.5 mg/ml;盐酸曲马多8.3 mg/ml)行术后PCA镇痛治疗.由观察者