Struts2拦截器介绍

来源:互联网 发布:英雄无敌2 for mac 编辑:程序博客网 时间:2024/06/05 03:59

Struts2 拦截器在访问某个 Action 方法之前或之后实施拦截, Struts2 拦截器是可插拔的, 拦截器是 AOP 的一种实现.

拦截器栈(Interceptor Stack): 将拦截器按一定的顺序联结成一条链. 在访问被拦截的方法时, Struts2拦截器链中的拦截器就会按其之前定义的顺序被依次调用

每个拦截器都是实现了 com.opensymphony.xwork2.interceptor.Interceptor接口的 Java 类:
该接口内的方法有:
init: 该方法将在拦截器被创建后立即被调用, 它在拦截器的生命周期内只被调用一次. 可以在该方法中对相关资源进行必要的初始化
intercept: 每拦截一个动作请求, 该方法就会被调用一次.
destroy: 该方法将在拦截器被销毁之前被调用, 它在拦截器的生命周期内也只被调用一次.

Struts2 会依次调用为某个 Action 注册的每一个拦截器的 interecept 方法.
每次调用 intercept 方法时, Struts2 会传递一个 ActionInvocation 接口的实例.
ActionInvocation: 代表一个给定动作的执行状态, 拦截器可以从该类的对象里获得与该动作相关联的 Action 对象和 Result 对象. 在完成拦截器自己的任务之后, 拦截器将调用 ActionInvocation 对象的 invoke 方法前进到 Action 处理流程的下一个环节.
还可以调用 ActionInvocation 对象的 addPreResultListener 方法给 ActionInvocation 对象 “挂” 上一个或多个 PreResultListener 监听器. 该监听器对象可以在动作执行完毕之后, 开始执行动作结果之前做些事情
AbstractInterceptor 类实现了 Interceptor 接口. 并为 init, destroy 提供了一个空白的实现

Struts2自带的拦截器:

拦截器 名字 说明 Alias Interceptor alias 在不同请求之间将请求参数在不同名字件转换,请求内容不变 Chaining Interceptor chain 让前一个Action的属性可以被后一个Action访问,现在和chain类型的result()结合使用 Checkbox Interceptor checkbox 添加了checkbox自动处理代码,将没有选中的checkbox的内容设定为false,而html默认情况下不提交没有选中的checkbox Cookies Interceptor cookies 使用配置的name,value来是指cookies Conversion Error Interceptor conversionError 将错误从ActionContext中添加到Action的属性字段中 Create Session Interceptor createSession 自动的创建HttpSession,用来为需要使用到HttpSession的拦截器服务 Debugging Interceptor debugging 提供不同的调试用的页面来展现内部的数据状况 Execute and Wait Interceptor execAndWait 在后台执行Action,同时将用户带到一个中间的等待页面 Exception Interceptor exception 将异常定位到一个页面 File Upload Interceptor fileUpload 提供文件上传功能 I18n Interceptor i18n 记录用户选择的locale Logger Interceptor logger 输出Action的名字 Message Store Interceptor store 存储或者访问实现ValidationAware接口的Action类出现的消息,错误,字段错误等 Model Driven Interceptor model-driven 如果一个类实现了ModelDriven,将getModel得到的结果放在Value Stack中 Scoped Model Driven scoped-model-driven 如果一个Action实现了ScopedModelDriven,则这个拦截器会从相应的Scope中取出model调用Action的setModel方法将其放入Action内部 Parameters Interceptor params 将请求中的参数设置到Action中去 Prepare Interceptor prepare 如果Acton实现了Preparable,则该拦截器调用Action类的prepare方法 Scope Interceptor scope 将Action状态存入session和application的简单方法 Servlet Config Interceptor servletConfig 提供访问HttpServletRequest和HttpServletResponse的方法,以Map的方式访问 Static Parameters Interceptor staticParams 从struts.xml文件中将常量的内容设置到对应的Action中 Roles Interceptor roles 确定用户是否具有JAAS指定的Role,否则不予执行 Timer Interceptor timer 输出Action执行的时间 Token Interceptor token 通过Token来避免双击,表单重复提交 Token Session Interceptor tokenSession 和Token Interceptor一样,不过双击的时候把请求的数据存储在Session中 Validation Interceptor validation 使用action-validation.xml文件中定义的内容校验提交的数据 Workflow Interceptor workflow 调用Action的validate方法,一旦有错误返回,重新定位到INPUT画面 Parameter Filter Interceptor N/A 从参数列表中删除不必要的参数 Profiling Interceptor profiling 通过参数激活profile
0 0