4、在WebWork和XWork中配置组件
(1)配置web.xml
要配置WebWork的组件管理,需要在web.xml中加入下面各行:
<filter>
<filter-name>container</filter-name>
<filter-class>com.opensymphony.webwork.lifecycle.RequestLifecycleFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>container</filter-name>
<url-pattern>*.action</url-pattern> <!-- modify appropriately -->
</filter-mapping>
<listener>
<listener-class>com.opensymphony.webwork.lifecycle.SessionLifecycleListener</listener-class>
</listener>
<listener>
<listener-class>com.opensymphony.webwork.lifecycle.ApplicationLifecycleListener</listener-class>
</listener>
这些设置允许WebWork在application、session和request范围内管理组件。注意,即使你的应用程序某种范围没有并不需求,也都要包括。
(2)配置xwork.xml
ComponentInterceptor用来将IoC模式应用到XWork的Action中。因此,必须在xwork.xml中使用<interceptors>来声明ComponentInterceptor:
<interceptor name="component"
class="com.opensymphony.xwork.interceptor.component.ComponentInterceptor"/>
如果你想应用IoC到Action和组件以外的对象,需要直接使用ComponentManager。
另外,ComponentInterceptor已经在WebWork的defaultStack应用。因此,如果你在xwork.xml中应用了defaultStack,就已经包含ComponentInterceptor了。
(3)配置components.xml
components.xml用来定义可用的组件。这里指定的组件会被加载到XWork的ComponentManager,对成为指定enabler实例的Action有效。components.xml必须放在WEB-INF/classes目录下。
下面的例子在components.xml中配置名为Counter组件,它的生命周期范围是session,将会被传递给实现CounterAware接口的对象:
<components>
<component>
<scope>session</scope>
<class>com.opensymphony.webwork.example.counter.Counter</class>
<enabler>com.opensymphony.webwork.example.counter.CounterAware</enabler>
</component>
</components>
每个component有三个属性:
l scope:组件生命周期范围,有效值为applaction、session和request
l class:组件类全路经
l enabler:enabler类或接口(后者推荐使用),任何作为enabler实例的Action,都会被传递组件实例