﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-sonnylys-文章分类-框架相关</title><link>http://www.blogjava.net/sonnylys/category/29792.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 02 Mar 2008 21:37:25 GMT</lastBuildDate><pubDate>Sun, 02 Mar 2008 21:37:25 GMT</pubDate><ttl>60</ttl><item><title>Spring与Struts集成开发</title><link>http://www.blogjava.net/sonnylys/articles/183112.html</link><dc:creator>li_yongsheng</dc:creator><author>li_yongsheng</author><pubDate>Sat, 01 Mar 2008 03:08:00 GMT</pubDate><guid>http://www.blogjava.net/sonnylys/articles/183112.html</guid><wfw:comment>http://www.blogjava.net/sonnylys/comments/183112.html</wfw:comment><comments>http://www.blogjava.net/sonnylys/articles/183112.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sonnylys/comments/commentRss/183112.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sonnylys/services/trackbacks/183112.html</trackback:ping><description><![CDATA[<p><br />
Spring与Struts集成开发<br />
<br />
最近喜欢将所学的东西理顺一下，且发现写blog可以达成这目的。<br />
那就来整理一下我对Spring与Struts集成开发的一些想法。<br />
<br />
首先确认系统的结构为三层的B/S模式结构，如下图：<br />
<img style="width: 514px; height: 339px" height="339" alt="" src="http://www.blogjava.net/images/blogjava_net/sonnylys/three.jpg" width="514" border="0" /><br />
在图中看出，Spring和Struts集成开发中，Spring在业务逻辑层被使用（集成）。因为Spring框架的依赖注入，AOP及可声明的事务管理方面的技术优势，使得用Spring来管理业务实体，实体之间的依赖关系，业务逻辑服务接口变得简单且可配置。至此我们要清楚：<span style="color: red">Spring和Struts集成开发中，Spring在业务逻辑层被使用（集成）。</span><br />
<br />
清楚Struts和Spring在系统结构中分别充当的角色后，接下来要讨论：<span style="color: #000000"><span style="color: #ff0000">如何实现集成</span>？<br />
<strong style="color: #0000ff">1、使用Spring的ActionSurpert类集成Struts。</strong><br />
org.springframework.web.struts.ActionSurpert是一个继承org.apache.struts.action.Action的类，简要代码如下：<br />
public abstract class ActionSurpert extends Action {<br />
&nbsp;&nbsp;&nbsp;&nbsp; private WebApplicationContext webApplicationContext;<br />
&nbsp;&nbsp;&nbsp;&nbsp; public void setServlet(ActionServlet actionServlet) {//<span style="color: red">当容器实例化此Action时被容器调用<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;surper.setServlet(actionServlet);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(actionServlet != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.webApplicationContext = initWebApplicationContext(actionServlet);//<span style="color: red">获取webApplicationContext<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //........<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //.......<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; //通过getXXX()方法获取&nbsp;&nbsp; webApplicationContext 对象<br />
&nbsp;&nbsp;&nbsp;&nbsp; protected final WebApplictionContext getWebApplicationContext() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this.webApplicationContext;<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
通过上述代码可以看出，所有继承了ActionSupport类的Action将可以通过WebApplicationContext对象的getBean(beanKey)方法获得Spring配置文件中定义的各种Bean。<br />
WebApplicationContext要由Web Server来加载，有两种方法：<br />
１、通过org.springframework.web.struts.ContextLoaderPlugIn加载，ContextLoaderPlugIn是个插件，需要在Struts配置文件中配置。<br />
&lt;plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"&gt;<br />
&nbsp;&nbsp; &lt;set-property property = "contextConfigLocation" value="/WEB-INF/applicationContext.xml"&gt;&lt;/set-property&gt;<br />
&lt;/plug-in&gt;<br />
2、在web.xml文件中加载<br />
&lt;context-param&gt;<br />
&nbsp; &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;<br />
&nbsp;&lt;param-value&gt;/WEB-INF/applicationContext.xml&lt;/param-value&gt;<br />
&lt;/context-param&gt;<br />
&lt;servlet&gt;<br />
&nbsp;&lt;servlet-name&gt;context&lt;/servlet-name&gt;<br />
&lt;servlet-class&gt;org.springframework.web.context.ContextLoaderServlet&lt;/servlet-name&gt;<br />
&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />
&lt;/servlet&gt;<br />
举个简单的例子说明一下相关配置信息：<br />
假定有ExampleAction，ExampleBean，ExampleService这几个类，它们工作流程是：<br />
用户请求ExampleAction，ExampleAction调用ExampleService的接口方法对ExampleBean进行相关的操作。<br />
1、applicationContext.xml中配置相关的bean信息<br />
&lt;beans&gt;<br />
&lt;bean id="<span style="color: red">dataSource</span>" class="org.springframework.jdbc.datasource.DriverManagerDataSource"&gt;<br />
&nbsp;&nbsp;&lt;property name="driverClassName"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;com.mysql.jdbc.Driver&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="url"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;jdbc:mysql://localhost:3306/ssh?useUnicode=true&amp;amp;characterEncoding=UTF-8&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="username"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;root&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="password"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;root&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&lt;/bean&gt;<br />
&lt;bean id="<span style="color: red">exampleBean</span>" class="org.mypackge.beans.ExampleBean"/&gt;<br />
&lt;bean id="<span style="color: red">exampleBeanService</span>" class="org.mypackge.services.ExampleService"/&gt;@<br />
&lt;/beans&gt;<br />
通过这样配置后，在ExampleAction中可以用getWebApplicationContext() 获得webApplicationContext对象，然后通过<br />
webApplicationContext的getBean(<span style="color: red">beanKey</span>)方法获得相应的bean进行业务处理。标了红色的"beanKey"就是applicationContext.xml中&lt;bean&gt;元素定义的bean id，如:webApplicationContext.getBean("<span style="color: red">exampleBeanService</span>")。@<br />
<br />
当然，ExampleAction还要在stuts-config.xml配置文件中配置，这里不作介绍。<br />
<strong style="color: #0000ff">2、使用Spring的Action代理集成Struts</strong><br />
这种集成方式的核心思想是，将Struts的配置文件中的所有Action的type属性设为org.springframwork.web.struts.DelegationActionProxy。当用户请求Action时，就执行这代理，代理会在Spring应用上下文中找到真正的Action，然后交给它处理用户的请求。而真正用于处理用户请求的Action的配置放在了Spring的配置文件中。这样，Struts中的Action以及其依赖关系就可以用Spring容器来管理，比如将业务逻辑对象注入到Action中，供其使用。简单片段&lt;bean<span style="color: #ff99cc">&nbsp;name="/exampleAction" </span>class="org.myproj.struts.actions.ExampleAction"&gt;<br />
....<br />
&lt;/bean&gt;<br />
说明：用name属性而不是用id来标识这个Bean,Spring不允许ID中出现"/"，而name可以；"name"属性值要和struts-config.xml文件中相应&lt;action&gt;元素中的path属性值相同<span style="color: #ff99cc">(&lt;action path="/exampleAction"</span>)，这样Action代理才能找到相应的Action来处理请求。<br />
<br />
关于Spring和Struts的集成,还有第三种方式,将在下一篇文章"Spring+Struts+Hibernate集成应用实例"中介绍。<br />
<br />
欢迎讨论，提出宝贵意见。<br />
<br />
<br />
</p>
</span>
<img src ="http://www.blogjava.net/sonnylys/aggbug/183112.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sonnylys/" target="_blank">li_yongsheng</a> 2008-03-01 11:08 <a href="http://www.blogjava.net/sonnylys/articles/183112.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts与hibernate集成开发</title><link>http://www.blogjava.net/sonnylys/articles/183017.html</link><dc:creator>li_yongsheng</dc:creator><author>li_yongsheng</author><pubDate>Fri, 29 Feb 2008 10:44:00 GMT</pubDate><guid>http://www.blogjava.net/sonnylys/articles/183017.html</guid><wfw:comment>http://www.blogjava.net/sonnylys/comments/183017.html</wfw:comment><comments>http://www.blogjava.net/sonnylys/articles/183017.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sonnylys/comments/commentRss/183017.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sonnylys/services/trackbacks/183017.html</trackback:ping><description><![CDATA[struts与hibernate集成开发<br />
最近学习struts与hibernate相关知识，下面是个人对struts与hibernate集成开发的一些见解，写出来跟大家共同讨论、学习，欢迎指教。<br />
&nbsp;要集成struts与hibernate进行开发，首先应该了解一下struts和hibernate框架各自的工作原理和模式般的开发流程。<br />
首先介绍struts的大概工作流程，下面通过一张struts工作的时序图来说明其工作流程：<br />
<img height="527" alt="" src="http://www.blogjava.net/images/blogjava_net/sonnylys/active.jpg" width="555" border="0" /><br />
Struts工作流程分析：<br />
1）Web服务器启动，初始化ActionServlet,读取struts-config.xml文件配置信息，把这些信息分发到相应的对象中。<br />
2）用户发出请求后，ActionServlet接收到请求，查找与请求匹配的Action映射对象（ActionMapping)对象是否存在，是：将请求以及Actionform对象传递给相应的Action对象。<br />
<span style="color: red"><strong>3）Action调用业务逻辑服务接口，结合ActionForm，对用户的请求做出处理。</strong><br />
</span>4）Action处理完毕返回ActionForward对象给ActionServlet。ActionForward对象包含了转发目标对象，可以是jsp或Action。<br />
5)ActionServlet根据ActionForward对象的指向继续转发请求，重复从第2步进行处理。<br />
至此，我们对struts 的基本工作流程有个整体的认识，但还没提hibernate相关的任何知识，业务逻辑层也只是在第3)点微提一下。<br />
<br />
接下来，我们来看下hibernate是怎样工作的？(注：在这不是讨论ＯＲＭ的实现，只讨论怎让hibernate这ORM中间件工作）<br />
Hibernate是个独立的框架，它不依赖任何的Web Server或Application Server，就是说不需要这些支持。<br />
Hibernate有五个核心接口，分别为Configuratoin, SessionFactory, Session,Query及Criteria。通过这些接口就可以完成hibernate的初始化，对持久化对象进行存取，更新等操作。<br />
下面简要介始一下这些接口。<br />
1、Configuration接口 是Hibernate应用的入口，在开始使用Hibernate的各种功能之前需要先创建Configuration对象。它负责加载Hibernate 应用配置文件，如Configuration cf = new Configuration.configure("com/myproj/hibernate/configs/hibernate.cfg.xml");<br />
2、SessionFactory接口 缓存了Configuration对象所包含的配置信息，能根据映射信息自动生成SQL语句，并提供生成Session对象的方法。<br />
3、Session接口提供一系列持久化的操作。<br />
到此，可以写一小段代码来加看下如何使用hibernate<br />
Configuration cf = new Configuration.configure("com/myproj/hibernate/configs/hibernate.cfg.xml");//配置文件不在此作介绍<br />
SessionFactory sessionFactory = cf.buildSessionFactory();<br />
Session session = sessionFactory.openSession();<br />
session.update();<br />
session.save();等等持久化操作。<br />
至此，简单介绍了hibernate 是怎样工作的，其实我只想让你清楚：&#8220;<span style="color: red">Hibernate是个独立的框架，它不依赖任何的Web Server或Application Server，就是说不需要这些支持。&#8221;<br />
</span><br />
那么，我们要回到主题来：如何集成struts与hibernate开发？答案很简单：hibernate和struts本质上是没什么联系的，只要你记住：<span style="color: red">Hibernate是个独立的框架，它不依赖任何的Web Server或Application Server。</span>用DAO模式把hibernate持久化的操作封装好，供业务逻辑服务类调用就可以。回过头来看struts工作流时序图的解释的第三点：&#8220;<span style="color: red"><strong>3）Action调用业务逻辑服务接口，结合ActionForm，对用户的请求做出处理。</strong></span>&#8221;，不难得出：<br />
用户请求后，struts负责找到相应的Action对象，Action调用业务逻辑服务接口，业务逻辑服务接口调用DAO接口(这里默认的实现就用hibernate,当然, 还可以有多种对数据库操作的实现）<br />
hibernate充当下面这张图中的"持久层（DAO）"<br />
<img height="468" alt="" src="http://www.blogjava.net/images/blogjava_net/sonnylys/bs.jpg" width="535" border="0" /><br />
<br />
由于本人对struts及hibernate认识不深，写这篇文章只是抛砖引玉，希望高手们发表意见指正错误，多指教。<br />
<br />
<br />
<br />
<br />
<br />
  <img src ="http://www.blogjava.net/sonnylys/aggbug/183017.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sonnylys/" target="_blank">li_yongsheng</a> 2008-02-29 18:44 <a href="http://www.blogjava.net/sonnylys/articles/183017.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>