真正的快乐来源于创造
第一部分:Web.Xml中ContextLoaderListener的相关配置 在工程目录下的\WebContent\WEB-INF\web.xml中,我们可以发现以下配置:
以上第一段XML中,contextConfigLocation参数定义了要载入Spring上下文的配置文件,这里采用了通配符的方式,也可以通过逗号符来分隔多个文件。 以上第二段XML定义了一个监听器,它适用于Servlet2.3及其以上版本,这个监听器会随着WebApp的启动而启动,并加载contextConfigLocation参数中定义好的Spring配置文件。若是在Servlet2.3以下版本中,则需要定义org.springframework.web.context.ContextLoaderServlet来载入配置文件。
第二部分:Action Bean的配置 接下来我们需要将Struts2的Action交给Spring管理,以com.heyang.module.contract.action. CheckSoleContractNameAction类为例,它在Spring配置文件\WebContent\WEB-INF\applicationContext-action.xml中的相应配置为:
由上面的XML知道,如果我们取得名为checkSoleContractNameAction的bean,Spring将通过反射调用一个com.heyang.module.contract.action.CheckSoleContractNameAction类的实例,并将一个名为contractService的bean注入进去,当然CheckSoleContractNameAction需要拥有此属性并具备对应的setter/getter。
第三部分:在Struts配置文件中将url映射到Spring上下文中的bean 这种方式是通过指定<action>的class属性为Spring配置文件中相应bean的id值来做到的,再以CheckSoleContractNameAction为例,它在Struts2配置文件WebContent\WEB-INF\struts-cfg\contract\struts.xml中的相应设置为: <action name="checkSoleContractName" class="checkSoleContractNameAction" method="execute"/> 这样,当页面中url有对应用上下文/contract/checkSoleContractName.action?... 时,com.heyang.module.contract.action.CheckSoleContractNameAction类的execute方法将会来处理用户的请求。注意,这段url中,应用上下文是WebApp Context,contract是action所在包的名称空间,checkSoleContractName则是action的name。
至此,Struts2和Spring的整合配置讲述完毕。
第四部分:Struts2与Spring的整合原理 在\WebContent\WEB-INF\lib\下存在一个struts2-spring-plugin-2.0.9.jar,这个插件包的作用是通过覆盖(override)Struts2的ObjectFactory来增强核心框架对象的创建。当Struts2需要根据配置文件创建一个Action的时候,它会用Struts2配置文件中的class属性去和Spring配置文件中的id属性进行关联,如果能找到,则由Spring创建;否则由Struts 2框架自身创建。这个功能是通过插件提供的两个拦截器实现的,默认情况下框架使用的自动装配策略是name,也就是说框架会去Spring中寻找与Action属性名字相同的bean,可选的装配策略还有:type、auto、constructor等。
第五部分:Spring与Hibernate的整合 通常来说,每个负责具体请求的Action都会被注入一个或多个Service bean(参见applicationContext-action.xml),而每个Service Bean都会被注入一个DAO bean(参见applicationContext-dao.xml),而每个dao bean都被被注入一个hibernateTemplate来与数据库交互(参见applicationContext-dao.xml),而在applicationContext-db.xml中,说明了hibernateTemplate的由来,它最终会找到一个datasource从而找到数据库。
这样,从前台Struts2的控制器到后台数据库,S2SH整个链条就被串起来了。
Copyright @ 何杨 Powered by: .Text and ASP.NET Theme by: .NET Monster