Starting Struts2摘抄(5)

 如果使用的不是struts-default.xml里面缺省的解释器,那么我们需要在web.xml当中对解释器
进行声明,并指定路径等操作,以便在package、action等位置进行使用。具体如下:

<!--在web.xml当中-->
<interceptors>
    <interceptor name="autowiring" class="interceptor.ActionAutowiringInterceptor"/>
</interceptors>

使用指定的Interceptor的位置有两个
1.指定action当中引用使用解释器
2.在包内所有action指定使用一个解释器

用法如下(并未实践过)

<!--在action当中使用的时候-->
<action name="my" class="com.fdar.infoq.MyAction" >
<result>view.jsp</result>
<interceptor-ref name="autowiring"/>
</action>

<!--在package当中指定-->
<default-interceptor-ref name="autowiring"/>
<!--把上面这条语句放在package定义以后紧跟就可以了-->

有一点要注意的是:对解释器定义位置的先后顺序以及放置的位置很关键。因为如果想要让
action可以使用解释器,那么必须在使用前给出定义引用位置也就是上述情况1中的语句。
这有点像C语言里面函数声明的味道。

另外,一个package可以缺省的指定,或者指定唯一的解释器。我感觉这个解释器的作用范围
类似与全局变量,而action自己指定的解释器引用可能会覆盖了包中的解释器。这是书中
没有解释的解释器作用范围。我想一个试验就可以证明了。大家可以参考struts2 core。

书中还提到,我们在action中可能遇到的解释器并不是一个。在struts-default.xml中有这样的
定义大家可以参考:

<interceptor-stack name="basicStack">
<interceptor-ref name="exception"/>
<interceptor-ref name="servlet-config"/>
<interceptor-ref name="prepare"/>
<interceptor-ref name="checkbox"/>
<interceptor-ref name="params"/>
<interceptor-ref name="conversionError"/>
</interceptor-stack>

实际上我们在文件中配置了一个叫做解释器栈的一个结构,那么我们引用这些解释器的时候
就无需逐一引用,从而避免造成无法管理的混乱局面。引用方法如下:

<action name="my" class="com.fdar.infoq.MyAction" >
<result>view.jsp</result>
<interceptor-ref name="basicStack"/>
</action>

这里与上面给出的引用单个解释器的形式是一样的。如果在package当中,我们也可以用
<!--在package当中指定-->
<default-interceptor-ref name="basicStack"/>
<!--把上面这条语句放在package定义以后紧跟就可以了-->
的形式完成操作。

这里我有一个疑问,也请大家讨论:
我们是不是可以模块一点,把解释器、解释器栈、解释器配置文件作为逐渐增大的一个模块
在工程里面用.xml文件形式保存,以extends的方式进行引用呢?我没看到相关介绍,大家可以
尝试。当然我有时间也会去尝试的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值