随笔 - 382  文章 - 14  评论 - 509 
 

struts,spring,hibernate三者也学习得差不多了,是时候该去深入了解如何去用spring来融合其他两个;

 Spring与Struts如何整合(以下技术文档转自网络):

  为了在Struts中加载Spring context,需要在struts-config.xml文件中加入如下部分:

< struts-config>
< plug-in
className="org.springframework.web.struts.ContextLoaderPlugIn">
< set-property property="contextConfigLocation"
value="/WEB-INF/applicationContext.xml" />
< /plug-in>
< /struts-config>

    通过Struts的plug-in在Struts和Spring之间提供了良好的结合点。通过plug-in我们实现了Spring context的加载,不过仅仅加载Spring context并没有什么实际的意义,还应该经过配置将Struts的Action交给Spring容器进行管理。 

< action-mappings>
< action path="/login"
type="org.springframework.web.struts.DelegatingActionProxy"
name="loginForm">
< forward name="success" path="/main.jsp" />
< forward name="failure" path="/login.jsp" />
< /action>

    在form bean这个节点上与传统的Struts配置没有什么区别,而在Action上面则发生了变化。在传统的action节点上type属性写入action类的完整类名,而和Spring结合后在这点上是使用了Spring提供的DelegatingActionProxy作为action的type属性,DelegatingActionProxy同样是org.apache.struts.action.Action的一个子类,它将把调用请求转交给真正的Action实现。通过这样的方式,Spring获得了Action实例的管理权,它将对Action进行调度,并为Struts提供所需的Action实例。这样,就可以将Action看作是Spring的一个bean,它就可以享受Spring的所有服务,如依赖注入、实例管理、事务管理等。
在applicationContext.xml中相应的配置如下的节点:

< beans>
.......
< bean name="/login" class="net.xiaxin.action.LoginAction"
singleton="false">
< property name="userDAO">
< ref bean="userDAOProxy" />
< /property>
< /bean>
< /beans>

    这样委托以后,修改Struts-config.xml中的action属性,使action的type值不指向具体的实现类,统一改为代理类type="org.springframework.web.struts.DelegatingActionProxy",在applicationContext.xml中的bean name值设定与Struts-config.xml中action path值一样,以使代理类能够根据传入的path在springContext环境中找到相应的bean,并将实例返回给Struts。由于动作是在Spring控制之下,所以Spring可以利用Struts所有功能。由于Spring反转控制特性,使Struts根本感觉不到Spring的存在,并且可以利用Spring动作管理框架的所有优点,比如日志拦截、数据校验、线程安全。
最后这个bean的配置是关键,这个名为“/login”的bean与Struts中的

< action path="/login" ……>
……
< /action>

    节点相对应,这样,Spring Bean Name与Struts Action Path相关联,当Struts加载对应的Action时,DelegatingActionProxy就根据传入的path属性,在Spring Context寻找对应bean,并将其实例返回给Struts。与此同时,还可以看到,"/login" bean 中包含了一个userDAO 引用,Spring 在运行期将根据配置为其提供userDAO 实例,以及围绕userDAO 的事务管理服务。这样一来,对于Struts 开发而言,我们既可以延续Struts 的开发流程,也可以享受Spring 提供的事务管理服务。而bean 的另外一个属性singleton="false",指明了Action 的实例获取方式为每次重新创建。这也解决了Struts中令人诟病的线程安全问题。

    至此,SS组合已经将Struts MVC以及Spring中的Bean管理、事务管理融为一体。如果算上userDAO 中的Hibernate 部分,我们就获得了一个全面、成熟、高效、自顶而下的Web 开发框架。

1

 

posted on 2008-01-28 08:56 玉米丰收 阅读(387) 评论(4)  编辑 收藏 网摘 所属分类: 收藏柜

  回复  引用  查看    
2008-01-28 09:34 |       
详细,很详细,非常详细!!!!!
  回复  引用  查看    
2008-01-28 09:34 | 王兴2008      
学习中 !顶楼主 ! 呵呵 偶又是沙发!
  回复  引用  查看    
2008-01-28 18:23 | 耿小超      
今天这么了???
突然间帖子多了起来,我还以为登错博客了呢~~~~
  回复  引用  查看    
2008-01-29 12:34 | 玉米丰收      
N次了,试了N次了,太郁闷了。

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-01-28 09:08 编辑过
Google站内搜索
[推荐职位]上海盛大网络招聘架构师



China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》

相关文章:

相关链接: