struts2 拦截器

Struts2中的拦截器
拦截器其实是用spring的aop中通知的编程思想,在Action的执行之前,或者action的执行之后插入一些由用户自定义的有某些功能的代码。拦截器的一般经常用来验证用户,控制权限,跟踪日志,
拦截器的原理:当用户的Http请求被 FilterDispatcher 分发器截获,然后判断是否有拦截器,拦截器可以没有,可以有多个。然后再根据拦截器中的定义来判断是返回,或者执行下一个拦截器,或者执行action,我们可以自定义拦截器来实现某些功能。
Struts2中默认拦截器的调用:在struts2中已经定义了很多的拦截器,拦截器像是一个模块实现固定的某个功能,自定义拦截器放在 struts2-core.jar中的struts-default.xml文件中以标签 <interceptors></interceptors> 包裹起来的,这也是定义拦截器的方式,在
<package name=”demo” extends=”struts-default”>
<interceptors>
<interceptor name=”” class=””></interceptor>
</interceptors>
</package>
具体定义带功能的拦截器下面再说,现在系统已经为我们定义了很多带功能的拦截器,我们要知道如何调用这些系统自带的拦截器。
调用系统自带的拦截器:我们已经知道了在struts-default.xml中自带了拦截器,现在我们定义的struts.xml中 <package name=”demo” extends=”struts-default”></package> 每个包都必须继承struts-default.xml 所以我们自定的包相当于已经定义了这些拦截器 现在只需要调用即可,我们需要明白的是 拦截器的使用是针对每一个Action 也就是说在请求某个action的过程中 调用拦截器类。拦截器调用例子见附件。
调用拦截器的方式
<package>
<action>
<interceptor-ref name=”要调用的拦截器的名称”></interceptor-ref>
</action>
</package>

内置拦截器简介:

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


多个拦截器连接使用:当需要多个拦截器需要同时调用时候可以 将所有的拦截器按照调用的顺序排列在action内部。<action name=”” class=””>
<interceptor-ref name=”第一个执行的拦截器”></interceptor-ref>
<interceptor-ref name=”第二个执行的拦截器”></interceptor-ref>
<interceptor-ref name=”第三个执行的拦截器”></interceptor-ref>




</action>
也可以先将要执行的拦截器放在一个拦截器栈中。然后引用这个拦截器栈即可。定义拦截器栈可以参考struts-default.xml。
在struts.xml文件中 定义和调用拦截器栈
<struts>
<package name=”” extends=””>
<!—定义拦截器栈-->
<interceptors >
<interceptor-stack name=”拦截器栈名称”>
<interceptor-ref name=”timer”></interceptor-ref>
</interceptor-stack>
</interceptors>

<!—调用拦截器栈
<action name=”” class=””>
<interceptor-ref name=”拦截器栈名称”></interceptor-ref>
</action>
</package>
</struts>




自定义拦截器的使用:
所有的拦截器都是直接或者间接的实现了 com.opensymphony.xwork2.interceptor.Interceptor接口。它定义了拦截器的初始方法init()。
销毁方法destroy(). 拦截处理方法intercept(ActionInvocation action)这个方法的参数是当前调用的这拦截器的Action对象。 类 AbstractInterceptor 实现了这个接口,自定义拦截器的时候我们可以去继承这个类。 这个类中提供了我们需要重写的 方法 Intercept()。这也是最主要的方法,我们可以在这个里面 判断,执行……等操作,这个方法返回的是一个String类型的数据,我们可以直接返回 <result name=””></result>中name的值,也可以放回action.invoke(); 意思是根据配置文件中的配置 判断是要执行下一个拦截器,还是要执行Action。下面的附件中简单的用户登陆判断的拦截器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值