一个Web项目中S2SH的整合方式

一个Web项目中S2SH的整合方式

第一部分:Web.Xml中ContextLoaderListener的相关配置
在工程目录下的\WebContent\WEB-INF\web.xml中,我们可以发现以下配置:

< context-param >
< param-name > contextConfigLocation </ param-name >
< param-value > /WEB-INF/applicationContext-*.xml </ param-value >
</ context-param >

 

< listener >
< listener-class >
org.springframework.web.context.ContextLoaderListener
</ listener-class >
</ listener >

以上第一段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中的相应配置为:

< bean  id ="checkSoleContractNameAction"    class ="com.heyang.module.contract.action.CheckSoleContractNameAction"  singleton ="false" >
        
< property  name ="contractService" >
            
< ref  bean ="contractService" />
        
</ property >
</ bean >

由上面的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整个链条就被串起来了。

你可能感兴趣的:(一个Web项目中S2SH的整合方式)