你的位置:首页 > 软件开发 > Java > Struts 2 拦截器

Struts 2 拦截器

发布时间:2016-09-05 14:00:05
什么是Struts 2 ** **就是当用户请求后台Action类时在Action的Excute()方法执行前和Result返回魔板试图之后(将页面(数据)发送给浏览器渲染之前)所需要的一些通用操作存放在**中对数据进行拦截! 简单来说就是对请求和响应信息进行过 ...

Struts 2 拦截器

什么是Struts 2 **

 **就是当用户请求后台Action类时在Action的Excute()方法执行前和Result返回魔板试图之后(将页面(数据)发送给浏览器渲染之前)所需要的一些通用操作存放在**中对数据进行拦截!

简单来说就是对请求和响应信息进行过滤,可以看做是Java EE中的过滤器,但是需要注意的是**只能对Action类的请求进行拦截若直接请求jsp文件、Css样式等静态文件**是无法进行过滤的!

为什么要使用**

任何优秀的MVC框架都会提供一些通用的操作,如请求数据的封装、类型转换、数据校验、解析上传的表单、防止表单的多次提交等。而早期的MVC框架中,这些通用的操作都写死在核心控制器中,然而并不是所用的请求都需要这些操作的实现,于是就导致了框架的灵活性差、可扩展性低等问题。

Struts2将它的核心功能放到**而不是集中在核心控制器中实现,把大部分控制器需要完成的工作按功能分开定义,每个**只完成一个功能,而完成这些功能的**可以自由选择,灵活组合,需要哪些功能只需要在配置文件中进行添加即可,从而提高了框架的灵活性。

**的工作原理

Struts2**围绕Action和Result的执行而执行。其实现原理和Servlet Filter差不多,以链式执行,对真正要执行的方法(execute())进行拦截。首先执行Action配置的**,在Action和Result执行之后,**在一次执行(与先前的执行顺序相反),在此以链式的执行过程中,任何一个**都可以直接返回,从而终止余下的**、Action及Result的执行。

当ActionInvocation的invoke()方法被调用时,开始执行Action配置的第一个**,**作出相应的处理后会在此调用ActionInvocation的invoke()方法,ActionInvocation对象负责跟踪执行过程的状态,并且把控制权交给合适的**。ActionInvocation通过调用**的intercept()方法将控制转交给**。因此,**的执行过程可以看做是一个递归的过程,后续**继续执行,直到最后一个**,invoke()方**执行Action的execut()方法。

先面以一张图来描述**的执行过程

Struts 2 拦截器

Struts2的内值**

Struts2提供了一些默认的内值**。如下所示:

<!--**栈(可以存放一堆**,在调用时只需调用defaultStack就可以调用其中的所有**)--> <interceptor-stack name="defaultStack">        <interceptor-ref name="exception"/><!--用于捕获异常,并根据类型将异常映射到用户自定义的错误页面-->        <interceptor-ref name="alias"/>        <interceptor-ref name="servletConfig"/><!--将源于Servlet API的各种对象注入 Action当中-->        <interceptor-ref name="i18n"/>        <interceptor-ref name="prepare"/>        <interceptor-ref name="chain"/>        <interceptor-ref name="scopedModelDriven"/>        <interceptor-ref name="modelDriven"/>        <interceptor-ref name="fileUpload"/><!--将文件和元数据从多重请求转换为常规的请求数据,以便能将他们设置在队形的Action属性中-->        <interceptor-ref name="checkbox"/>        <interceptor-ref name="datetime"/>        <interceptor-ref name="multiselect"/>        <interceptor-ref name="staticParams"/><!--将在配置文件中通过action的子元素param设置的参数设置到对应的Action属性中-->        <interceptor-ref name="actionMappingParams"/>        <interceptor-ref name="params"/><!--将请求中的数据设置到Action中的属性上-->        <interceptor-ref name="conversionError"/>        <interceptor-ref name="validation"><!--用于数据校验-->          <param name="excludeMethods">input,back,cancel,browse</param>        </interceptor-ref>        <interceptor-ref name="workflow"><!--用于数据校验错误时终止执行流程-->          <param name="excludeMethods">input,back,cancel,browse</param>        </interceptor-ref>        <interceptor-ref name="debugging"/>        <interceptor-ref name="deprecation"/>      </interceptor-stack>

原标题:Struts 2 拦截器

关键词:Struts

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录