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>
浙公网安备 33010602011771号