对请求进行处理的元素主要有interceptorsAction以及Result下面分别对其进行讲述
.拦截器配置(interceptors)
通过使用拦截器我们可以在action中的方法执行之前先执行一些我们事先定义好了的方法也可以在action中的方法执行之后立即执行一些我们事先定义好了的方法在开发的过程中拦截器将是一个强有力的工具拦截器有很多很多的功能如校验属性封装安全日志等等如下表所示
表拦截器功能表
校验(validation)
检查输入是否正确
属性封装(property population)
将输入传输和转化为对象的属性
日志(logging)
记录关于每个action的详细信息
切面(profiling)
记录action的吞吐量寻找性能瓶颈(不是很懂)
我们可以将多个拦截器链接在一起形成一个拦截器栈比方说一个action不仅要对客户端的资格进行审查还要记录它自己的行为那么我们可以将实现这两个功能的拦截器放在一起形成一个拦截器栈(interceptor stack)拦截器是以java类的形式实现的因此每一个拦截器都有一个唯一的类名为了让对拦截器的参考更加容易我们可以在框架中为每个拦截器注册一个更简单的名字下面给出了一个注册拦截器的例子
<interceptors>
<interceptor name=security class=comcompanysecuritySecurityInterceptor/>
<interceptorstack name=secureStack>
<interceptorref name=security/>
<interceptorref name=defaultStack/>
</interceptorstack>
</interceptors>
在定义一个拦截器栈的时候单个的拦截器和拦截器栈可以以任意的顺序混合在一起struts框架将会按照拦截器在栈里面的顺序调用它们大多说应用程序都会定义一个默认的拦截器栈如<defaultinterceptorref name=defaultStack/>默认的拦截器栈会作用于package中的每个action上当然action还可以定义它自己的本地(局部)栈如下面例子所示
<action name=
VelocityCounter
class=
org
apache
struts
example
counter
SimpleCounter
>
<result name=success></result>
<interceptorref name=defaultComponentStack/>
</action>
.Action配置
action mappings是框架中的基本工作单元框架通过对请求的request路径进行映射来决定由哪个action来处理请求action mappings能指定一系列的result异常处理器以及拦截器action元素的所有属性中只有name属性是必须的其它属性都是可选的关于如何从请求路径映射到action在namespace那节中已经说过了这里就不说了尽管对于action的命名很灵活但是action的名字中最好不要出现斜线(/)点号()破折号(/)以免出现一些不可预知的错误
在Action接口中定义了action默认的方法入口它就是execute方法但是并不是每个action类都必须实现这个接口如果action类没有实现这个接口的话框架将使用反射来寻找一个execute方法有时候我们的action中可能会包括多个方法入口并且不同的情况下方法入口不同例如执行修改操作时我们想进入action的mofify方法执行增加操作时进入action的add方法这个时候怎么办呢?我们可以通过指定action元素的method属性来实现如下所示
<action name=
modify
class=
example
CrudAction
method=
modify
>
如果在action类中没有execute方法也没有在配置文件中指定其它的方法框架会抛出异常
很多时候多个action mapping会共享一个相同的模式这个时候我们可以使用通配符方法还是举例来说如下所示
<action name=editCrud class=exampleCrudAction method=edit/>
<action name=deleteCrud class= exampleCrudAction method= delete/>
[] []