1.1通过代码实例跟我学SSH三大框架相互整合的应用技术(第3部分)——使用 Spring 框架的 ActionSupport组件整合 Struts框架和Spring框架的应用实例1、ActionSupport 类(1)org.springframework.web.struts.ActionSupport 类的主要功能它为org.apache.struts.action.Action类的子类,提供如下方面的功能(参考Spring API 文档说明)Convenience class for Spring-aware Struts 1.1+ Actions;Provides a reference to the current Spring application context, e.g. for bean lookup or resource loading. Auto-detects a ContextLoaderPlugIn context, falling back to the root WebApplicationContext. For typical usage, i.e. accessing middle tier beans, use a root WebApplicationContext.For Struts DispatchActions or Lookup/MappingDispatchActions, use the analogous DispatchActionSupport or LookupDispatchActionSupport / MappingDispatchActionSupport class, respectively.(2)继承关系(3)实现的方法和要求为了方便地获得Spring WebContext环境,在org.springframework.web.struts.ActionSupport 类中提供了一个getWebApplicationContext (protected final WebApplicationContext getWebApplicationContext())方法。
我们所要做的只是从Spring 的ActionSupport类(而不是Struts Action 类)扩展我们的Struts的Action 类。
但这样一来在Action中,需要取得业务逻辑的地方都要getBean,看上去不够简洁。
(4)为什么我们的Action类要从ActionSupport 类继承在常规的方式中,为了能够在Struts 的Action类中获得各个业务组件类的对象,一般是采用WebApplicationContextUtils 类从ServletContext 中获得WebApplicationContext 。
另一个更简单的办法是继承Spring 的Action类(也就是ActionSupport 类)-----因为,在ActionSupport 类中提供了一些更加便利的getWebApplicationContext()方法。
public class UserLoginAction extends ActionSupport // extends Action{public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse){//(1)使用getWebApplicationContext() 方法获得一个ApplicationContextApplicationContext applicationContext = getWebApplicationContext();//(2)通过Spring IoC容器获得实现用户登录功能的业务组件类UserLoginBusiness的Spring beanBusinessInterface userLoginBusiness =(BusinessInterface) applicationContext.getBean("userLoginBusiness");//(3)再对业务组件类进行访问以完成具体的功能实现}}(5)注意在Spring中针对我们不同的Action类提供了对应不同的ActionSupport Spring 包含了所有标准Struts Action 的子类- Spring 版本在类名末尾附加了Support:1)ActionSupport,2)DispatchActionSupport,3)LookupDispatchActionSupport4)MappingDispatchActionSupport2、将JBuilder中所需要的Spring 的Jar包文件库加入到本Project中3、将ContextLoaderPlugIn作为Struts的PlugIn插件加入到struts-config.xml中(1)org.springframework.web.struts.ContextLoaderPlugIn类org.springframework.web.struts.ContextLoaderPlugIn类,这是一个Struts的Plug,在Struts 启动时加载;利用它来加载Spring 的组件类的*.xml配置文件,同时页能够实现对于Action 也可以像管理一般的Bean一样来来管理。
其主要的功能说明(参考Spring API文档):Struts 1.1+ PlugIn that loads a Spring application context for the Struts ActionServlet. This context will automatically refer to the root WebApplicationContext (loaded by ContextLoaderListener/Servlet) as parent.The default namespace of the WebApplicationContext is the name of the Struts ActionServlet, suffixed with "-servlet" (e.g. "action-servlet"). The default location of the XmlWebApplicationContext configuration file is therefore "/WEB-INF/action-servlet.xml".<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"/>The location of the context configuration files can be customized through the "contextConfigLocation" setting, analogous to the root WebApplicationContext and FrameworkServlet contexts.<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"><set-property property="contextConfigLocation" value="/WEB-INF/action-servlet.xml /WEB-INF/myContext.xml"/></plug-in>(2)本例的配置标签<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"><set-property property="contextConfigLocation" value="/WEB-INF/businessBeans.xml"/> </plug-in>4、创建WebApplicationContext的配置文件businessBeans.xml在该businessBeans.xml文件中实现本系统的各个业务组件Bean的各个配置。
(1)在本Web应用的/WEB-INF的目录下,创建WebApplicationContext的配置文件businessBeans.xml(2)businessBeans.xml内的内容如下<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN""/dtd/spring-beans.dtd"><beans><bean id="userLoginBusiness" class="erLoginBusiness"/><!-- interceptors cannot reach Struts action because its not under Spring's control --></beans>5、log4j.properties的配置(1)log4j.properties文件Spring采用Apache common_logging,并结合Apache log4j作为日志输出组件。
为了在调试过程中能观察到Spring的日志输出,在CLASSPATH中新建log4j.properties配置文件。
可以从samples/petclinic/war/WEB-INF/log4j.properties拷贝一份模板文件到本Web应用的WEB-INF目录中。