软件设计中DRY规则,即不要写重复的代码,这样可以大大减轻后期维护的工作量!但是问题来了,重复的代码是不可避免的,比如在用户发送请求之前先判断用户是否登录,怎么办呢?于是就把这些重复代码提取出来,封装成一个方法A,这样就避免了书写重复的代码,用户只要在发送请求之前调用方法A即可!但是问题又出现了,用户发送请求之前可能调用方法A,可能调用方法B,由于之前是以硬编码的方式将方法A写在判断用户是否登录之前,于是不得不在每个请求之前再次进行修改代码,很麻烦,怎么办呢?我们需要一种机制,解决硬编码问题,实际上又可以实现方法调用!于是Struts2拦截器出现了,实现这种需求!
什么是拦截器?拦截器从代码角度来看就是一个类,类中包含方法,这个方法会在目标方法调用之前由系统驱动自动执行!为什么叫拦截器呢?因为这个类所做的事情,所产生的行为就是一个拦截的作用,所以叫拦截器!
拦截器原理:拦截器方法是通过代理的方式来调用的!大致思路,系统以目标对象为蓝本,创建一个代理对象,代理对象里的方法是拦截器方法和目标对象方法的组合!所以在执行目标方法前后,执行拦截器方法!
struts2的拦截器策略:每个拦截器完成一个功能,需要使用哪个拦截器,在struts.xml中指定使用拦截器就行,从而让拦截器方法在目标方法执行之前或者执行之后自动执行,完成通用操作的动态插入!也可以将多个拦截器放在一起组成一个功能更加强大的拦截器栈!
struts2框架中请求的流程:struts2是一个空容器,里面大量的內建拦截器完成了该框架的大部分操作,所以可以得出struts2框架大部分功能由拦截器实现,当FilterDispatcher(配置在web.xml)拦截到用户请求后,大量拦截器对用户请求进行处理,然后调用Action实例中的方法处理请求,再返回逻辑视图,将逻辑视图对应的资源呈现给用户!
struts2內建了大量的拦截器,这些拦截器以name-calss对的形式配置在struts-default.xml文件(struts2的默认配置文件,这个配置文件会自动加载)中!当我们在struts.xml文件中定义的package继承了Struts2的默认struts-default包(这个包指定defalutStack拦截器栈作为默认的拦截器栈,若action配置中没有指定拦截器引用,系统会将defalutStack拦截器栈自动作用于该Action),就可以自由使用struts2內建拦截器!如果不继承,则需要我们自定义,难度马上增大,所以一般是需要继承的!
內建拦截器有哪些?
alias:实现在不同请求中相似参数别名的转换!
autowiring:自动装配,用于访问Spring容器中的Bean!
chain:构建antion链,使用当前Acition访问前一个Action的属性2!
conversionError:负责处理类型转换错误的拦截器!
cookie:允许以配置的方式为Action添加多个Cookie!
createSession:负责创建一个HttpSession对象!
debugging:提供更多调试信息!
execAndWait:将等待画面发送给用户!
exception:处理异常,将异常映射为结果!
fileUpload:主要用于文件上传!
i18n:支持国际化的拦截器!
logger:负责日志记录的拦截器!
modelDriven:用于模型驱动的拦截器!
scopeModelDriven:从指定生存范围找出指定model,通过setModel()方法将该Model传给Action实例!
params:负责解析HTTP请求中的参数,将参数值设置成Action对应的属性值!
staticParam:将xml中action标签下param标签中的参数传入action
scope:范围转换器
servletConfig:在action中直接访问servletAPI!
timer:输出action的执行时间!
token:阻止重复提交!
tokenSession:把token保存在HttpSession中!
validation:完成数据校验!
workflow:调用action类中的validate方法,校验失败,返回input逻辑视图!
store:将信息保存到session!
checkbox:检测没有勾选的复选框!
roles:授权拦截器
annotationWorkflow:支持struts2“零配置”特性的拦截器!
multiselect:检查没有选中的下拉列表!

怎样在struts2中使用拦截器?
1.定义拦截器 在package包下使用interceptros元素定义拦截器
2.使用拦截器
方式一:在action元素中引用拦截器!
方式二:在package元素中配置默认拦截器,实现该包下所有action同时配置相同的拦截器!
与拦截器相关的配置元素如下:
interceptros定义拦截器该元素包含interceptor和interceptor-stack
interceptor定义单个拦截器定义时需要指定name和class两个属性
interceptor-stack定义拦截器栈该元素包含interceptor-ref子元素
interceptor-ref引用一个拦截器或者拦截器栈
param用于为拦截器指定参数
default-interceptor-ref为指定包配置默认的拦截器

若action中显示应用了某个拦截器,默认拦截器(struts2的默认拦截器是defaultStack)不起作用,若action要使用默认拦截器,必须手动配置拦截器引用;若action中没有显示指定拦截器,默认拦截器将会起作用!

开发自己的拦截器步骤:
1.实现拦截器类
1.1实现Interceptor接口
1.2继承AbstractInterceptor类(实现了Interceptor方法) 会拦截action内的所有方法
1.3继承MethodFilterInterceptor(是AbstractInterceptor的子类) 拦截action内的指定方法

拦截器的执行顺序:
在execute方法之前的动作,配置在前面的拦截器先起作用;对于在execute方法之后的动作,配置在后面的拦截器将先起作用!

struts2拦截器理论知识相关推荐

  1. Struts2拦截器的使用

    如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈defaultStack,如下(这里我是引用了str ...

  2. Struts2拦截器属性excludeMethods、includeMethods配置无效之解决方法

    参考:http://blog.csdn.net/coolcoffee168/article/details/7963251 在配置struts2 拦截器属性excludeMethods.include ...

  3. Struts2 拦截器 及如何获得 servlet 请求对象 以及Struts 基本配置 Session 超时设置...

    在拦截器中可以三种实现 一:继承 AbstractInterceptor 类 二:继承 MethodFilterInterceptor类 三:实现 Interceptor 接口 在实现Intercep ...

  4. 基于struts2拦截器实现用户操作日志记录

    2019独角兽企业重金招聘Python工程师标准>>> 这里基于struts2的拦截器来实现. 使用struts2拦截器拦截所有或者指定的请求,对用户操作过程中的:操作用户,操作时间 ...

  5. Struts2拦截器实现异常处理机制

    http://bbs.itcast.cn/thread-10364-1-1.html Struts2拦截器实现异常处理机制   在j2ee项目中,系统内部难免会出现一些异常,如果把异常放任不管直接打印 ...

  6. 从struts2拦截器到自定义拦截器

    http://www.cnblogs.com/withyou/p/3170440.html 拦截器可谓struts2的核心了,最基本的bean的注入就是通过默认的拦截器实现的,一般在struts2.x ...

  7. Struts2拦截器的使用 (详解)

    Struts2拦截器的使用 (详解) 如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈default ...

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

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

  9. struts2 拦截器_Struts2 execAndWait拦截器示例,用于长时间运行的动作

    struts2 拦截器 Sometimes we have long running actions where user will have to wait for final result. In ...

最新文章

  1. Node.js- sublime搭建node的编译环境
  2. 微信小程序 UI 判断 循环
  3. python join字符连接函数的使用方法
  4. Python中的高阶函数filter
  5. 金士顿u盘分区工具_使用U盘工具给电脑硬盘快速分区教程
  6. 7 php 内存泄漏_PHP 内存泄漏分析定位
  7. 7-5 统计大写辅音字母 (15 分)
  8. 你的第一杯Web 2.0 —— 快速浏览jQuery、Spring MVC和XStream/Jettison
  9. WEB框架研究笔记七(Spring2+struts2)
  10. 判断一个网站用什么服务器
  11. python应用-pycharm新建模板默认添加shebang编码作者时间等信息
  12. 飞天诚信ROCKEY-ARM(标准锁)软件加密狗使用记录
  13. JavaScript启示录
  14. Counting Stars HDU - 6184
  15. 阿里巴巴本地生活——上海饿了么配送一面(一小时)
  16. 强烈推荐:20款优秀的数据可视化工具
  17. 大数据BI工具Tableau学习【第三期】:数据类型,功能区和卡参考,文件类型(连接方式)
  18. tiktok说查生日_TikTok对于Nadella的Microsoft来说似乎是危险的舞步
  19. 数据库为什么要分库分表
  20. EMC常见术语-dB、dBm、dBw以及如何计算

热门文章

  1. 黑客独角兽_写作是产品设计师真正的独角兽技能
  2. 信息系统建设和服务能力评估证书CS
  3. mongodb robomongo authentication fail
  4. 爱情指数测试脸型软件,性格解析测试 从6类脸型中透视出你的性格及爱情
  5. 鱼C论坛小甲鱼Python课后题
  6. emgucv 在工具中添加 ImageBox
  7. 区分车上的点阵屏、彩屏、断码屏
  8. Java笔记11-异常处理
  9. 将手机接收到的短信实时转发到服务器web端上(或其他需要的地方)
  10. Intel研究院院长吴甘沙演讲全文:大数据分析师的卓越之道(32PPT珍藏版)