struts2拦截器和文件上传

strut2提供了一个面向切面编程(AOP)的机制。拦截器是一种成熟的AOP实现。struts2直接将上传文件封装为Java中的File对象。拦截器类似于Filter

多个拦截器也组成了拦截器链,Struts2中称拦截器链为拦截器栈。拦截器栈是按照顺序配置的多个拦截器,在执行Action前后被一词调用。

struts2提供的一些拦截器

timer计时拦截器

timer拦截器能够统计每个Action方法运行所需的时间。它的原理是在Actio执行前开启记录一下时间,Action执行后再记录一下时间,然后记录两个时间的差,并将时间差打印出来。

配置Timer拦截器

<package name="main" extends="struts-default">

<action name="timer" class="com.helloweenvsfei.struts2.action.TimerAction">

<interceptor-ref name="timer"></interceptor-ref>

<result>/timerSuccess.jsp</result>

</action>

</package>

package需要继承struts-default才能使用Struts2里的拦截器,因为time计时拦截器是配置在struts-default包里的。

token防重复提交拦截器

token拦截器用于保证表单只被提交一次,如果再次提交该表单,拦截器会拦截该请求,防止提交重复数据。它的原理是显示表单的时候在sesion中对该表单做一个标记,该标记只能使用一次,使用过后就失效了,从而保证表单最多只能提交一次数据。重复提交会因为标记已失效而提交失败。

<interceptor-ref name="token"/>

Action 中还必须配置一个名为invalid.token的result页面。如果重复提交数据,Struts2将转到该页面中,该结果页是必须配置的。

JSP页面需要添加一个<struts:token/>,该标签一定要添加在Form中否则无效。

execAndWait执行等待拦截器

如果某个Action运行时间比较长,浏览器会因为等待服务器响应而长时间显示空白。execAndWait拦截器接受请求后,能判断上一个请求是否处理完毕。如果已经完毕,则显示结果页面。否则,显示等待页面

action配置

<action name="" class="">

<interceptor-ref name="completeStack"/><!--completeStack拦截器-->

<interceptor-ref name="execAndWait"/>

<result name="wait">/waiting.jsp</result>

</action>这是Struts2内置的解决方案。实际上较多地使用Ajax技术来实时显示繁忙页面。Ajax能做到页面无刷新,并能通过进度条实时显示进度

自定义的权限验证拦截器

拦截器可以自由扩展。所有的拦截器实现自Intercepor接口。实现自定义拦截器也要实现Interceptor接口一般直接继承AbstractInterceptor抽象类即可。

 

<interceptors>

<interceptor name="authentication" class=""/>

</interceptors>

<action name="authentication" class="">

<interceptor-ref name="authentication"></interceptor-ref>

<result>/authen.jsp</result>

</action>

 

 

 

 

 

 

posted on 2014-01-08 18:11  elen-  阅读(274)  评论(0)    收藏  举报

导航