Struts2的Interceptor和Listener以及Plugin

Struts2的Interceptor和Listener以及Plugin

Struts2的拦截器

struts-default.xml中定义了很多拦截器,这些拦截器就是用来完成许多强劲功能的保证
而且可以根据已定义的若干拦截器中的某几个拦截器构建成interceptor-stack拦截器栈
其实拦截器栈还可以由拦截器栈组成。即从Struts2高层的角度来看,二者没有什么区 别
我们可以在<package/>中增加这样一行<default-interceptor-ref name="拦截器的名字"/>
即表示将该拦截器作为整个包的默认拦截器,它会自动附加到我们的每一个Action中
并且在一个<package/>中只能使用<default-interceptor-ref/>定义一个默认的拦截器
<action/>没有引用任何一个拦截器,那么默认的defaultStack会自动附加到<action/>
<action/>手工引用任何一个拦截器,那么默认的defaultStack就不会附加到<action/>
若还想使用默认拦截器,则只能再通过手工方式导入<interceptor-ref name="defaultStack"/>
如果没有引用Struts2的默认拦截器,那么就会影响到整体的输入校验即其它的一些功能
Struts2拦截器的配置和使用都很easy,这得益于其底层的良好架构以及它的AOP的思想
该拦截器即标准的AOP思想,代码不写死到Action里,而是根据配置灵活附加到Action
使用上,Struts2拦截器并不复杂。但实现上,是很复杂的,其底层用到了动态代理的机制


Struts2常用的内置拦截器
alias:实现不同请求中相似参数别名的转换
autowiring:自动装配。主要用于Struts2和Spring整合时,Struts2可以使用自动装配的方式访问Spring容器中的Bean
chain:构建一个Action链,使当前Action可以访问前一个Action的属性。一般与<result type="chain"….../>一起使用
conversionError:处理类型转换错误。负责将类型转换错误从ActionContext中取出,并转换成Action的FieldError错误
createSession:负责创建一个HttpSession对象,主要用于那些需要提供HttpSession对象才能正常工作的拦截器中
debugging:当使用Struts2的开发模式时,该拦截器会提供更多的调试信息
execAndWait:后台执行Action,负责将等待画面发送给用户
exception:负责处理异常。它会将异常映射为结果
fileUpload:用于文件上传。负责解析表单中文件域的内容
i18n:支持国际化。它负责把所选的语言和区域放入用户Session
logger:负责日志记录。主要是输出Action的名字
modelDriven:用于模型驱动。当Action实现了ModelDriven接口时,它负责把getModel()方法的结果推入ValueStack中
scopedModelDriven:若Action实现ScopedModelDriven接口,它负责从指定生存范围中找出指定Model,并通过setModel()将该Model传给Action实例
params:最基本的一个拦截器,它负责解析HTTP请求中的参数,并将参数值设置成Action对应的属性值
              主要用于在提交表单后,将表单中的参数自动赋值到Action的属性中
prepare:如果Action实现了Preparable接口,将会调用该拦截器的prepare()方法
staticParams:负责将XML中<action/>标签下<param/>标签中的参数传入Action
scope:范围转换拦截器,可以将Action状态信息保存到HttpSession范围或ServletContext范围内
servletConfig:如果某个Action需要直接访问Servlet API,就是通过该拦截器实现的
                        用于将HTTP请求中的HttpServletRequestHttpServletResponse对象传递给Action对象
roles:JAAS拦截器。Java授权和认证服务Java Authentication and Authorization Service
          只有当浏览者取得合适的授权后,才可以调用被该拦截器拦截的Action
timer:负责输出Action的执行时间。它在分析Action的性能瓶颈时比较有用
token:阻止表单重复提交。它检查传到Action中的token,从而防止多次提交
tokenSession:作用与token基本类似,只是它把token保存在HttpSession
validation:通过执行在XxxAction-validation.xml中定义的校验器,从而完成数据校验
workflow:负责调用Action类的validate()方法。如果校验失败,则返回input逻辑视图


使用timer拦截器可以测试Action执行的时间
我们可以用它来测试网站优化前后执行某Action所需的时间,再对比查看优化效果
这里使用timer拦截器测试LoginAction执行所需的时间,注意引用params拦截器接收表单参数

[xhtml] view plaincopyprint?
  1. <action name="login" class="com.jadyer.action.LoginAction">  
  2.     <interceptor-ref name="timer" />  
  3.     <interceptor-ref name="defaultStack" />  
  4. </action>  
登录正确用户名密码时,控制台就会输出类似Executed action [//loginvo!execute] took 16 ms.的信息
若不引用params而引用defaultStack拦截器栈,则LoginAction的执行时间会变得长一些
这是因为defaultStack包含了许多拦截器,它们都需一一执行,所以花费的时间要多些


Struts2的监听器
Struts2还有个的监听器,即com.opensymphony.xwork2.interceptor.PreResultListener接口
该接口中仅定义一个方法,即void beforeResult(ActionInvocation invocation, String resultCode)
观察该监听器的名字,就可以知道,Pre就是在...之前的意思,也就是在结果之前进行监听
它的监听点是:在执行完execute()或者自定义的方法之后
                    真正转到视图资源之前,会自动调用监听器的beforeResult()方法
Struts2的这个监听器,平时用到的不是很多
在上传文件时可能会用到,比如在返回到result之后 ,可以修改一下文件的后缀名,等等..


Struts2的插件
Struts2同样支持插件,但与Struts1支持插件的方式不太一样
它需要我们定义好自己的一些接口等等,然后封装到一个Jar包里面
再把这个JAR包丢到WEB-INFlib目录下,Web应用启动时,Jar包就被加载进来了
在JAR包中必须要有一个配置文件,它的标准命名方式必须是struts-plugin.xml
该XML文件中的具体的配置与struts.xml是一样的,它们的DTD都是相同的
我们可以在http://struts.apache.org/2.0.11/index.html页面查看Struts2的众多插件
点击网站的Plugin Registry大按钮后便可跳转到http://cwiki.apache.org/S2PLUGINS/home.html具体查看


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296034.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

with(nolock)简解

eg&#xff1a;select top 200 from 表A with(nolock) where 条件 为了性能&#xff0c;查询时不锁定表&#xff0c;从而达到提高查询速度的目的。 &#xff08;转&#xff09;SQL中with(nolock)详解 大家在写查询时,为了性能,往往会在表后面加一个nolock,或者是with(nolock),其…

CentOS 5.5下搭建部署独立SVN服务器全程详解

SVN服务器有2种运行方式&#xff1a; 1、独立服务器 (例如&#xff1a;svn://xxx.com/xxx)&#xff1b; 2、借助apache (例如&#xff1a;http://svn.xxx.com/xxx)&#xff1b; 为了不依赖apache&#xff0c;我选择第一种方式&#xff1a;独立的svn服务器。SVN存储版本数据也…

35岁成MIT终身教授!北大数学“黄金一代”再获大奖

全世界只有3.14 % 的人关注了爆炸吧知识18岁时满分斩获国际奥林匹克数学竞赛金牌&#xff0c;本科就读北大数院期间19门课程成绩100分、7门99分&#xff0c;35岁成为麻省理工&#xff08;MIT&#xff09;终身教授……近日&#xff0c;数学“大神”恽之玮再获国际大奖——西蒙斯…

二维数组foreach嵌套遍历,判断连续3天以上的算有效数据

2019独角兽企业重金招聘Python工程师标准>>> $studycourseinfo $studycourseinfoModel->where($where)->limit($page->firstRow.,.$page->listRows)->order(create_time asc)->select(); //$studycourseinfos $studycourseinfoModel->where(…

linux mint 用户管理,Linux Mint 新工具:将网站转变为独立的应用

Linux Mint 目前正在积极推进 20.1 版本&#xff0c;日前官方博客介绍了新版本将会带来的一项有意思的新特性&#xff1a;WebApp 管理器。简单来讲&#xff0c;这一特性可以把网站转变成独立的应用&#xff0c;这与基于 Debian 和 Ubuntu 的发行版 Peppermint OS 名为 ICE 的功…

如何评价一个开源项目——协作影响力

本文由X-lab开放实验室博士生赵生宇创作 该篇博客紧跟上一篇关于活跃度的介绍这篇文章系统介绍了一种基于全域开发者协作网络的项目影响力评估方法&#xff0c;该方法对于分析整个开源生态有极大的帮助。在一次性评估出所有项目的协作影响力的同时&#xff0c;也可以对项目的协…

Struts2中的OGNL表达式

基础知识&#xff08;三&#xff09;Struts2中的OGNL表达式浅析值栈ValueStack对象相当于一个栈&#xff0c;它贯穿整个Action的生命周期&#xff0c;每个Action类的对象实例都会拥有一个ValueStack对象 当Struts2接收到一个*.action请求后&#xff0c;并不是直接调用Action方法…

Qt学习资料

QT 相关资源&#xff08;书籍、论坛、博客等。。。&#xff09;整理... 中文名&#xff1a;《提问的智慧》英文名&#xff1a;How To Ask Questions The Smart Way中文链接1&#xff1a;http://www.beiww.com/doc/oss/smart-questions.html中文链接2&#xff1a;http://communi…

UITableView 界面小实例

最近一是很忙&#xff0c;没时间写东西&#xff0c;今天抽时间来总结一下这几天学到的东西 首先看看&#xff0c;程序现在的样子&#xff1a; 基本完成这些&#xff0c;还有一个webview就不截图了 记录一下要点&#xff0c;首先自定义tableview&#xff0c;这个是按照iphone3开…

linux下简单的备份的脚本 2 【转】

转自&#xff1a;http://blog.chinaunix.net/xmlrpc.php?rblog/article&uid26807463&id4577034 之前写过 linux下简单的备份的脚本 &#xff0c; 最开始一直用着&#xff0c; 后来觉得有必要改进下它了&#xff0c; 不管是从操作方式上还是工作方式上。有这样的想法是…

linux 文档属于apache,Apache 安装和使用文档

Apache 安装和使用文档更新时间&#xff1a;2009年11月26日 00:34:37 作者&#xff1a;Apache安装和使用文档一、准备工作&#xff1a;1台PC机&#xff0c;安装linux操作系统 参考文档linux安装.docx2 gcc的安装 参考文档gcc的安装.zip3 apache的安装包httpd-2.0.63.tar.gz二…

在数学世界,都有这些美妙的数学公式......

全世界只有3.14 % 的人关注了爆炸吧知识什么是数学&#xff1f;华罗庚说&#xff1a;宇宙之大&#xff0c;粒子之微&#xff0c;火箭之速&#xff0c;化工之巧&#xff0c;地球之变&#xff0c;生物之谜&#xff0c;日用之繁&#xff0c;无处不用数学......回首往昔&#xff0c…

.NET 生态系统的蜕变之 .NET 6云原生

云原生的英文名是cloud native&#xff0c;native 就是土著的意思&#xff0c;也就是土著对当地的环境是非常适应的&#xff0c;在云的环境和传统的数据中心是非常不同的&#xff0c;云原生就是要用的云的技术来构建应用&#xff0c; 利用云的技术来降低种端服务的风险和提高可…

Hibernate 持久化状态、HQL语句大全(转)

Hibernate 持久化状态在Hibernate中&#xff0c;最核心的概念就是对PO的状态管理。一个PO有三种状态&#xff1a; 1、未被持久化的VO 此时就是一个内存对象VO&#xff0c;由JVM管理生命周期 2、已被持久化的PO&#xff0c;并且在Session生命周期内 此时映射数据库数据&…

如何让两个安装程序setup共享同一个component—— installing shared files(version:installshield develop8.0)...

如何让两个安装程序&#xff08;setup.exe&#xff09;&#xff0c;共享同一个component&#xff1f;  要实现的效果是&#xff0c;两个程序共享同一个dll&#xff0c;当两个程序中有一个被卸载掉时&#xff0c;这个dll仍存在&#xff0c;不随着第一个卸载而从系统中删除&…

世界十大无法科学解释灵异事件(进来发表自己看发)

1、法老咒语&#xff08;世界最大灵异事件&#xff09; 2、葡萄牙灵异事件&#xff08;在网上引起了极大的轰动&#xff09; 3、伦敦塔闹鬼&#xff08;超著名&#xff09; 4、20世纪上海滩灵异事件&#xff08;孟小冬照片灵异事件&#xff09; 5、鬼脸&#xff08;墙壁上出…

宝塔linux面板假设nextcloud,宝塔面板部署NextCloud(14.0.3)逐一解决后台安全及设置警告...

刚刚把NextCloud更新到14.0.3&#xff0c;后台又出现了一堆警告&#xff0c;也是够烦的。之前写过 宝塔面板部署NextCloud逐一解决后台安全及设置警告&#xff0c;那个是基于Nextcloud 13.x的&#xff0c;所以就再补充记录一下解决如下的警告。Use of the the built in php mai…

ASP.NET Core启动地址配置方法及优先级顺序

前言默认情况下&#xff0c;ASP.NET Core使用下列2个启动地址:http://localhost:5000 https://localhost:5001同时&#xff0c;我们也可以通过配置或代码方式修改启动地址。那么&#xff0c;这几种修改方式都是什么&#xff1f;谁最后起作用呢&#xff1f;设置方法1.applicatio…

那些喜欢少妇的男生......

1 听说你喜欢少妇&#xff1f;▼2 没错&#xff01;就是它&#xff01;▼3 你还缺男朋友吗&#xff1f;▼4 还能怎么样&#xff1f;&#xff08;via&#xff1a;臭人脸上的鼻涕&#xff09;▼5 特效还能这样玩&#xff1f;▼6 哈哈哈哈哈&#xff08;via&#xff1a;Guide&…

Openfire3.10beta版源码在eclipse上部署编译

一、源码下载 最近由于需求&#xff0c;需进行openfire的插件开发&#xff0c;于是需将openfire的源码进行部署&#xff0c;目前最新的openfire稳定版本是3.9.3&#xff0c;官方下载地址是http://www.igniterealtime.org/downloads/index.jsp&#xff0c;下载页面如图&#xff…