上班之余抽点间时出来写写博文,希望对新接触的朋友有帮助。今天在这里和大家一起学习一下拦截器、方法-
浅谈Struts2拦截器的理原与实现
一、解理Struts2拦截器
1. Struts2拦截器是在拜访某个Action或Action的某个方法,段字之前或后之实行拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现.
2. 拦截器栈(Interceptor Stack)。Struts2拦截器栈就是将拦截器按必定的序顺联结成一条链。在拜访被拦截的方法或段字时,Struts2拦截器链中的拦截器就会按其之前定义的序顺被调用。
二、实现Struts2拦截器理原
Struts2拦截器的实现理原对相简略,当请求struts2的action时,Struts 2会查找置配件文,并根据其置配实例化对相的 拦截器对象,然后串成一个列表,最后一个一个地调用列表中的拦截器
三、定义Struts2拦截器。
Struts2划定用户自定义拦截器必须实现com.opensymphony.xwork2.interceptor.Interceptor接口。该接口声明白3个方法,
void init(); |
其中,init和destroy方法会在序程开始和结束时各行执一遍,不管应用了该拦截器与否,只要在struts.xml中声明白该Struts2拦截器就会被行执。
intercept方法就是拦截的主体了,每次拦截器效生时会都行执其中的逻辑。
不过,struts中又供提了几个抽象类来简化这一骤步。
public abstract class AbstractInterceptor implements Interceptor; public abstract class MethodFilterInterceptor extends AbstractInterceptor; |
都是模板方法实现的。
其中AbstractInterceptor供提了init()和destroy()的空实现,应用时只要需覆盖intercept()方法;
而MethodFilterInterceptor则供提了includeMethods和excludeMethods两个属性,用来过滤行执该过滤器的action的方法。可以通过param来参加或者消除要需过滤的方法。
一般来说,拦截器的写法都差不多。看下面的示例:
package interceptor; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.Interceptor; public class MyInterceptor implements Interceptor { public void destroy() { // TODO Auto-generated method stub } public void init() { // TODO Auto-generated method stub } public String intercept(ActionInvocation invocation) throws Exception { System.out.println("Action行执前插入 码代"); //行执目标方法 (调用下一个拦截器, 或行执Action) final String res = invocation.invoke(); System.out.println("Action行执后插入 码代"); return res; } } |
四、置配Struts2拦截器
Struts2拦截器要需在struts.xml中声明,如下struts.xml置配件文
<package name="default" extends="struts-default"> |
拦截器 | 名字 | 明说 |
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 |
文章结束给大家分享下程序员的一些笑话语录: 手机终究会变成PC,所以ip会比wm更加畅销,但是有一天手机强大到一定程度了就会发现只有wm的支持才能完美享受。就好比树和草,草长得再高也是草,时间到了条件成熟了树就会窜天高了。www.ishuo.cn