1)拦截器是什么?

  拦截器(Interceptor)是Struts2最强大的特性之一,它是一种可以让你在Action执行之前和Result执行之后进行一些功能处理的机制。来回顾一下官方给出的Struts2系统架构图中关于拦截器的部分,如下图所示:

  这个图清晰的描述出了拦截器的运行地位,就是用来负责在Action执行之前和Result执行之后处理一些功能的类。也就是说,上图示意了有3个拦截器的类,分别是Interceptor1、Interceptor2和Interceptor3,它们分别执行不同的功能处理,而运行的时机就是在Action执行之前和Result执行之后。

  2)拦截器的优点是什么?

  拦截器能实现很多功能,这里先撇开具体功能不谈,从设计和程序结构上来看看,拦截器有些什么优点:

  • 简化Action的实现

  拦截器能把很多功能从Action中独立出来,大量减少了Action的代码。

  • 功能更单一

  按照上面的描述,把功能从Action中分离出来,分散到不同的拦截器里面,这样每个拦截器的功能,以及Action本身的功能都更单一了。

  • 通用代码模块化

  从Action中把功能分离出来,放到拦截器去实现,这样能把一些在多个Action中通用的代码进行模块化,封装在一个或几个拦截器里面。

  • 提高重用性

  当通用的功能代码被封装在拦截器里面,实现了代码模块化过后,就可以对不同的Action,根据功能需要,来配置相同的拦截器了。这大大提高了拦截器所实现的功能的重用性,还变相实现了装配式和可插拔式的体系结构,使得整个系统结构变得更灵活。

  • 实现AOP

  Struts2通过拦截器实现了AOP(面向切面编程),AOP是一种编程范式,它是一种分散实现关注功能的编程方法。拦截器将通用需求功能从不相关的Action之中分离出来,能够使得很多Action共享同一个行为,一旦行为发生变化,不必修改很多Action,只要修改这个行为就可以了。

  备注:有web开发经验的朋友看到这里,一定会说,这不就类似于Filter么?过滤器也可以做这些事啊。没错,拦截器和Filter确实有相似之处,但是Interceptor相比于Filter具有更强大的功能,比如拦截器与Servlet的API无关,比如拦截器可以访问到值栈等等。

  回忆一下,在前面的示例中,在运行Action的execute方法的时候,会发现Action的属性已经有值了,而且这些值跟用户请求中的参数值时一样的。这说明,在execute方法之前,有人偷偷的把用户请求中的参数值和Action的属性做了一个对应,并且把请求中的参数赋值到了Action的属性上,这个功能就是由缺省配置的拦截器来实现的。这些缺省配置的拦截器,称之为预定义的拦截器。我们还可以编写自己需要的拦截器类,称之为自定义拦截器,它的具体功能就根据需要,由我们自行实现了。

  参考资料:http://www.iteye.com/topic/1124526

最新文章

  1. Sql Server系列:子查询
  2. Lua库之时间和日期操作
  3. 用css3实现各种图标效果(2)
  4. 【GoLang】GoLang 单元测试、性能测试使用方法
  5. 基于私钥加密公钥解密的RSA算法C#实现
  6. Oracle中删除重复的经典方案
  7. DragonBoard810使用记录
  8. 用户登陆,退出等基本Action
  9. sql service重置自动增长字段数字的方法
  10. 关于ue上传图片到七牛云设置key
  11. DELPHI 通過窗口句柄或窗口标题得到进程句柄
  12. C#拾遗(二、函数)
  13. 一些牛人分享的ios技巧,保留着
  14. leetcode range sum query
  15. Vue组件库的那些事儿,你都知道吗?
  16. 小马哥Python知识体系
  17. 程序导致IIS服务器应用程序池停止
  18. CCF-URL映射-(正则匹配)-20180303
  19. 使用Project进行项目管理
  20. Java之List使用方法

热门文章

  1. linux ifconfig -a
  2. IDEA 之 Error during artifact deployment. See server log for details
  3. 移动端H5的一些基本知识点总结
  4. MySQL 批量杀mysql线程
  5. 分分钟带你玩转 Web Services【1】JAX-WS
  6. 索引快速扫描(index fast full scan)
  7. 使用fuel6.0自己主动安装openstack-juno版本号(2)
  8. CentOS7 下 配置Docker远程访问 与 windows下使用maven构筑Spring Boot 的 Docker镜像到远程服务端
  9. URI -URL-URN区别
  10. Arduino和C51开发DHT11温湿度传感器