自从6月份写过一些博客之后,有将近5个月没写博客了,或者由于工作繁忙,或者由于懒于书笔,又或者最近没有研究技术上的东西,根本无从写起。虽然从事项目管理工作,但深知没有技术根底,管理好一个IT项目谈何容易。难得近期各项目走上正轨,有点闲心回忆一下技术方面的东西,那就拿ssh开刀吧,谁叫它是最流行的J2EE框架组合呢。

花了将近3个小时终于把一个ssh整合的例子做完,感叹不如当年勇啊,虽说经验丰富了很多,但是实打实地编码工作,可真不是靠吹牛吹出来的,到处都存在问题,需要花时间一一解决。好了,废话少说,下面列一下用到的一些技术以及注意点,为了避免误导人,或致人懒惰,这里就不将所有代码一一列出,只是贴一些关键的代码段。

用到的技术如下:
1)MySql,在本机上能跑的最小数据库。
2)Hibernate3,有了注解功能后,感觉比Hibernate2方便多了
3)Spring3
4)Struts2
5)Junit4,用于测试service的方法
6)Log4j
7)需要的jar包如下,



1、MySql
    这个就不多说了,安装过程非常简单。创建一个数据库:test,用grant语句创建用户test,密码test;创建一张表:ACCOUNT。
2、Hibernate3
    1)创建一个domain对象:Account,和表ACCOUNT对应;在上面加注解@Entity @Table(name="ACCOUNT"),这样就省去了些hbm文件
    2)创建AccountDao,实现增删改查功能;
3、spring3
    1)创建spring配置文件:spring.xml,定义datasource,sessionFactory等;
    2)创建AccountService,实现业务逻辑,调用AccountDao;
4、Struts2
    1)创建web.xml,将spring.xml放入ContextConfigLocation;
    2)创建struts.xml,定义package和action及跳转;
    3)创建LoginAction类,从页面获取用户名和密码,调用AccountService的用于验证方法

总结,在做这个例子的过程中,出现很多问题,很大一部分都是来自于jar包的缺失和冲突,以下几点是比较难于发现的,
  1)Springframework的jar包版本不一致,会出现很奇怪的问题;
  2)缺少struts2-spring-plugin-2.2.3的jar包,会导致spring的bean无法实例化成功,总是获取到null;
  3)javaee.jar和servlet-api.jar的冲突,个人感觉后者是前者的精简版,在Tomcat容器的lib目录下存在,会和工程中的lib冲突,解决方案是把Tomcat下的servlet-api.jar换成javaee.jar;
  4)如果想通过标记的方式来注入bean,必须在spring配置文件中,添加以下代码:
       <context:annotation-config />
       <context:component-scan base-package="com.glen" />

另外,还有两个问题未解决,望能人帮之,

  1)两表关联,PrimaryKeyJoinColumn不起作用,只能插数据到主表,不能将数据插入关联表;
  2)mysql数据库,插入中文时报错,
[2011/11/27 11:30:45:045 CST] ERROR org.hibernate.util.JDBCExceptionReporter:(JDBCExceptionReporter.java:101): Incorrect string value: '\xE5\xBC\xA0\xE7\x9B\x8A...' for column 'chinese_name' at row 1
[2011/11/27 11:30:46:046 CST] ERROR org.hibernate.event.def.AbstractFlushingEventListener:(AbstractFlushingEventListener.java:324): Could not synchronize database state with session
org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update