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请求中的HttpServletRequest和HttpServletResponse对象传递给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-INF的lib目录下,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具体查看

Struts2的Interceptor和Listener以及Plugin相关推荐

  1. Struts2使用Interceptor实现权限控制的应用实例详解

    Struts2使用Interceptor实现权限控制的应用实例详解 拦截器:是Struts2框架的核心,重点之重.因此,对于我们要向彻底学好Struts2.0.读源码和使用拦截器是必不可少的.少说了. ...

  2. java servlet filter_Java的Servlet、Filter、Interceptor、Listener

    写在前面: 使用Spring-Boot时,嵌入式Servlet容器可以通过扫描注解(@ServletComponentScan)的方式注册Servlet.Filter和Servlet规范的所有监听器( ...

  3. Java的Servlet、Filter、Interceptor、Listener

    写在前面: 使用Spring-Boot时,嵌入式Servlet容器可以通过扫描注解(@ServletComponentScan)的方式注册Servlet.Filter和Servlet规范的所有监听器( ...

  4. struts2中用interceptor实现权限控制

    在jsp servlet中我们通常使用Servlet Filter控制用户是否登入, 是否有权限转到某个页面.在struts2中我们应该会想到他的拦截器(Interceptor), Intercept ...

  5. Struts2 - Check Login Interceptor

    Struts2使用Interceptor做用户登陆检查: 1)新增一个bean: User.java package com.my.beans;import java.util.Date;import ...

  6. springmvc、struts2、servlet的联系与区别

    一 servlet - 体系(组织)结构图 图1 - servlet体系(组织)结构图 - 网 参考: Servlet学习笔记五(相关接口与类) - 哔哩哔哩 Servlet继承体系 - 码农岛 错题 ...

  7. struts2的核心和工作原理

    在学习struts2之前,首先我们要明白使用struts2的目的是什么?它能给我们带来什么样的好处? 设计目标 Struts设计的第一目标就是使MVC模式应用于web程序设计.在这儿MVC模式的好处就 ...

  8. Spring与Struts2整合的两种解决方案

    http://www.itzhai.com/spring-and-struts2-integration-of-the-two-solutions.html Struts2与Spring整合的方案一: ...

  9. struts2 拦截器_Struts2令牌拦截器示例

    struts2 拦截器 Struts 2 token interceptor can be used to handle multiple form submission problem. While ...

最新文章

  1. Android项目中创建编译期的注解
  2. 基于visual Studio2013解决C语言竞赛题之1081shell排序
  3. 【SRX】RE与PFE策略不同步,导致Commit失败-----案例分析
  4. c cuda 指定gpu_《CUDA C编程权威指南》——1.3 用GPU输出Hello World-阿里云开发者社区...
  5. win8硬盘安装Ubuntu14.04双系统參考教程
  6. 获取Class对象方式
  7. 微信抢红包代码 python_python实现红包裂变算法
  8. FragmentPagerAdapter.notifyDataSetChanged()不能更新问题?
  9. sql2005数据库置疑修复断电崩溃索引损坏
  10. 传统机器学习和深度神经网络对比
  11. 根据肠道微生物组重新思考健康饮食
  12. 初出茅庐——利用Python的Turtle库绘制玫瑰花
  13. 一炉真香起 静中开鸿蒙是谁写的,开辟鸿蒙 谁为情种(之耗子精偷香玉)
  14. pyscripter与python的关系_详解python开发环境PyScripter中文乱码问题解决方案
  15. 深度学习自然语言处理模型实现大集合(精简版<100行)
  16. 【渝粤教育】广东开放大学 行政组织学 形成性考核 (34)
  17. 使用java实现pdf文件转换为jpg或者png(可以批量操作、分类存放)
  18. 意向性:或如何将之安置在自然界
  19. 区块链游戏的 1.0 2.0 3.0 4.0 时代
  20. 阿里大佬2019年回顾:有他60%的努力,何愁进不了大公司

热门文章

  1. ML.NET 示例:对象检测
  2. 小米造车是智能手机进入红海后的突围之举
  3. asp.net core安全事项(上)
  4. 使用BeetleX网关部署第三方Web服务
  5. Jekins持续集成在ERP研发中的应用实践
  6. Dotnet core使用JWT认证授权最佳实践(一)
  7. SonarQube系列二、分析dotnet core/C#代码
  8. 程序员过关斩将--更加优雅的Token认证方式JWT
  9. 《从零开始学ASP.NET CORE MVC》课程介绍
  10. 微软Build 2018展示Visual Studio功能:跨系统云编程