Struts2 拦截器 理解

来源:互联网 发布:在线数据分析工具 编辑:程序博客网 时间:2024/05/29 17:17

拦截器   理解 原理 作用 事例

 

对于任何 MVC框架来说,他们都会完成一些通用的控制逻辑:例如解析请求参数,类型转换,将请求参数封装成DTO,执行输入校验,解析文件上传表单中的文件域,防止表单多次提交……这些操作又不是所有Action都需要实现的,所以需要动态的方式来自由组合。Struts2 的做法是,它把大部分核心控制器需要完成的工作按功能分开定义,每个拦截器完成一个功能。而这些拦截器可以自由选择,灵活组合,开发者需要使用哪些拦截器,只需要在 struts.xml 文件中指定使用该拦截器即可。

 

拦截器可以说相当于是个过滤器:就是把 不想要的或不想显示的内容给过滤掉。拦截器可以抽象出一部分代码可以用来完善原来的action。同时可以减轻代码冗余,提高重用率。

比如在登入一个页面时,如果要求用户密码、权限等的验证,就可以用自定义的拦截器进行密码验证和权限限制。对符合的登入者才跳转到正确页面。这样如果有新增权限的话,不用在action里修改任何代码,直接在interceptor里修改就行了。

 

拦截器提供了更高层次的解耦,目标代码无需手动调用目标方法,而是由系统完成,从而将这种调用从代码层次上升到更高层次,从而提供了更高层次的解耦。计算机本身是无法自动调用拦截器方法,它甚至无法知道到底是应该调用哪个拦截器。对Struts 2框架而言,程序通过配置文件来管理拦截器,从而让系统明白:何时应该调用哪个拦截器。

 

  拦截器的用法非常灵活,Struts 2 允许将完成各种小功能的方法定义成小粒度的拦截器,如果有一些拦截器经常需要固定在一起使用,又可以将这批小粒度的拦截器定义成大粒度的拦截器栈。从结构上来看,拦截器栈相当于多个拦截器的组合;通过组合不同的拦截器,我们能以自己需要的方式来组合 Struts 2 框架的各种功能;通过扩展自己的拦截器,我们可以无限扩展 Struts 2 框架。因为拦截器是通过配置文件指定的,因此通过拦截器来引入通用操作的方式,完全是可插拔式的,当系统需要执行这些通用操作时,则配置文件引入这些拦截器即可;如果系统不需要执行这些通用操作,则在配置文件中取消引入即可。