﻿<?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-justuszhang2009-随笔分类-SSH</title><link>http://www.blogjava.net/justuszhang2009/category/50215.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 23 Dec 2011 19:01:26 GMT</lastBuildDate><pubDate>Fri, 23 Dec 2011 19:01:26 GMT</pubDate><ttl>60</ttl><item><title>Struts2+Spring+Hibernate整合的例子</title><link>http://www.blogjava.net/justuszhang2009/archive/2011/11/27/364925.html</link><dc:creator>张益刚</dc:creator><author>张益刚</author><pubDate>Sun, 27 Nov 2011 09:27:00 GMT</pubDate><guid>http://www.blogjava.net/justuszhang2009/archive/2011/11/27/364925.html</guid><wfw:comment>http://www.blogjava.net/justuszhang2009/comments/364925.html</wfw:comment><comments>http://www.blogjava.net/justuszhang2009/archive/2011/11/27/364925.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/justuszhang2009/comments/commentRss/364925.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/justuszhang2009/services/trackbacks/364925.html</trackback:ping><description><![CDATA[
<p>自从6月份写过一些博客之后，有将近5个月没写博客了，或者由于工作繁忙，或者由于懒于书笔，又或者最近没有研究技术上的东西，根本无从写起。虽然从事项目管理工作，但深知没有技术根底，管理好一个IT项目谈何容易。难得近期各项目走上正轨，有点闲心回忆一下技术方面的东西，那就拿ssh开刀吧，谁叫它是最流行的J2EE框架组合呢。<br /><br />花了将近3个小时终于把一个ssh整合的例子做完，感叹不如当年勇啊，虽说经验丰富了很多，但是实打实地编码工作，可真不是靠吹牛吹出来的，到处都存在问题，需要花时间一一解决。好了，废话少说，下面列一下用到的一些技术以及注意点，为了避免误导人，或致人懒惰，这里就不将所有代码一一列出，只是贴一些关键的代码段。<br /><br />用到的技术如下：<br />1）MySql，在本机上能跑的最小数据库。<br />2）Hibernate3，有了注解功能后，感觉比Hibernate2方便多了<br />3）Spring3<br />4）Struts2<br />5）Junit4，用于测试service的方法<br />6）Log4j<br />7）需要的jar包如下，<br /><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/justuszhang2009/jar包库.png" width="819" height="576" /></p><p><br /><br />1、MySql<br />&nbsp;&nbsp;&nbsp; 这个就不多说了，安装过程非常简单。创建一个数据库：test，用grant语句创建用户test，密码test；创建一张表：ACCOUNT。<br />2、Hibernate3<br />&nbsp;&nbsp;&nbsp; 1）创建一个domain对象：Account，和表ACCOUNT对应；在上面加注解@Entity @Table(name="ACCOUNT")，这样就省去了些hbm文件<br />&nbsp;&nbsp;&nbsp; 2）创建AccountDao，实现增删改查功能；<br />3、spring3<br />&nbsp;&nbsp;&nbsp; 1）创建spring配置文件：spring.xml，定义datasource，sessionFactory等；<br />&nbsp;&nbsp;&nbsp; 2）创建AccountService，实现业务逻辑，调用AccountDao；<br />4、Struts2<br />&nbsp;&nbsp;&nbsp; 1）创建web.xml，将spring.xml放入ContextConfigLocation；<br />&nbsp;&nbsp;&nbsp; 2）创建struts.xml，定义package和action及跳转；<br />&nbsp;&nbsp;&nbsp; 3）创建LoginAction类，从页面获取用户名和密码，调用AccountService的用于验证方法<br /><br />总结，在做这个例子的过程中，出现很多问题，很大一部分都是来自于jar包的缺失和冲突，以下几点是比较难于发现的，<br />&nbsp; 1）Springframework的jar包版本不一致，会出现很奇怪的问题；<br />&nbsp; 2）缺少<span style="color: red;">struts2-spring-plugin</span>-2.2.3的jar包，会导致spring的bean无法实例化成功，总是获取到null；<br />&nbsp; 3）javaee.jar和servlet-api.jar的冲突，个人感觉后者是前者的精简版，在Tomcat容器的lib目录下存在，会和工程中的lib冲突，解决方案是把Tomcat下的servlet-api.jar换成javaee.jar；<br />&nbsp; 4）如果想通过标记的方式来注入bean，必须在spring配置文件中，添加以下代码：<br /><span style="color: red;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;context:annotation-config /&gt;</span><br /><span style="color: red;">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&lt;context:component-scan base-package="com.glen" /&gt;</span><br /><br />另外，还有两个问题未解决，望能人帮之，</p>
<div>&nbsp; 1）两表关联，PrimaryKeyJoinColumn不起作用，只能插数据到主表，不能将数据插入关联表；</div>
<div>&nbsp;&nbsp;2）mysql数据库，插入中文时报错，</div>
<div>
<div style="color: rgb(0, 0, 128);">[2011/11/27&nbsp;11:30:45:045&nbsp;CST]&nbsp;ERROR&nbsp;org.hibernate.util.JDBCExceptionReporter:(JDBCExceptionReporter.java:101):&nbsp;Incorrect&nbsp;string&nbsp;value:&nbsp;'\xE5\xBC\xA0\xE7\x9B\x8A...'&nbsp;for&nbsp;column&nbsp;'chinese_name'&nbsp;at&nbsp;row&nbsp;1</div>
<div style="color: rgb(0, 0, 128);">[2011/11/27&nbsp;11:30:46:046&nbsp;CST]&nbsp;ERROR&nbsp;org.hibernate.event.def.AbstractFlushingEventListener:(AbstractFlushingEventListener.java:324):&nbsp;Could&nbsp;not&nbsp;synchronize&nbsp;database&nbsp;state&nbsp;with&nbsp;session</div>
<div style="color: rgb(0, 0, 128);">org.hibernate.exception.GenericJDBCException:&nbsp;Could&nbsp;not&nbsp;execute&nbsp;JDBC&nbsp;batch&nbsp;update</div></div>
<p>&nbsp;</p> 
 
<img src ="http://www.blogjava.net/justuszhang2009/aggbug/364925.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/justuszhang2009/" target="_blank">张益刚</a> 2011-11-27 17:27 <a href="http://www.blogjava.net/justuszhang2009/archive/2011/11/27/364925.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>