一,新建工程
1.1 开发环境是Eclipse3.2+MyEclipse5.5,SSH版本是Spring2.0+Hibernate3.0+Struts1.2。
1.2 新建一个Java的WEB工程,新建工程的时候导入JSTL1.1的包。
1.3 源代码已经上传,见于http://download.csdn.net/source/2071908
二,加入Struts
2.1 在新建的工程里导入Struts1.2的包和标签。
2.2 新建一套简单的登录验证页面测试是否成功,成功以后进行下一步。
三,加入Spring
3.1 用Eclipse自动加入Spring2.0的AOP和Core两组包。
3.2 我个人的习惯是把applicationContext.xml放在WebRoot/WEB-INF目录下。
3.3 去掉"commons-attributes-compiler.jar"、"commons-attributes-api.jar"两个多余的包。
3.4 修改struts-config.xml文件
3.4.1 在message-resources标签下,新加入
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation" value="/WEB-INF/action-servlet.xml,/WEB-INF/applicationContext.xml" />
</plug-in>
3.4.2 所有的action的type="org.springframework.web.struts.DelegatingActionProxy"
3.5 修改web.xml,在开头部分加入
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/action-servlet.xml,/WEB-INF/applicationContext.xml
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
3.6 新加入/WEB-INF/action-servlet.xml文件,这个文件是用于记录<bean>信息的,可以设置多个用于不同的业务。
<bean name="/login" class="com.fz.struts.action.LoginAction">
<property name="userDAO" ref="userDAO"></property>
</bean>
注:<property name="userDAO" ref="userDAO"></property>这一部分是Hibernate被Spring注入的内容,暂时先不要写.
3.7 测试原有的登录页面是否能够照常启动。
四,加入Hibernate
4.1 用Eclipse导入Hibernate。
4.1.1 加入Core和Advanced Support两个lib库。
4.1.2 选择使用Spring的application.xml文件为Hibernate的配置文件,这样便于结合使用。
4.1.3 选择Spring的application.xml文件,设定SessionFactory ID。
4.1.4 选择要使用的DataSource并且设定其BEAN ID。
4.1.5 选定Hibernate的数据库连接
4.1.6 选顶HibernateSessionFactory的放置的包路径,完成导入Hibernate.
4.2 修改applicationContext.xml文件,配置Spring和Hibernate结合
4.2.1 <bean id="DataSource"
class="org.apache.commons.dbcp.BasicDataSource">
要改成<bean id="DataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
否则会找不到指定的连接类
4.2.2 配置事务
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="SessionFactory"/>
</property>
</bean>
4.3 配置一套DAO
4.3.1 配置applicationContext.xml文件的实体的XML,既在property name="mappingResources"的list属性里
加入<value>com/test/hibernate/pojo/TbUsers.hbm.xml</value>
完整SessionFactory片段如下:
<bean id="SessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="DataSource">
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/test/hibernate/pojo/TbUsers.hbm.xml</value>
</list>
</property>
</bean>
4.3.2 代理
<bean id="UserDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager"/>
</property>
<property name="target" ref="TbUsersDAO">
</property>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
4.3.3 注入SessionFactory
<bean id="TbUsersDAO" class="com.test.hibernate.pojo.TbUsersDAO">
<property name="sessionFactory">
<ref bean="SessionFactory" />
</property>
</bean>
五,整体测试
5.1 关于开发的部分我就不多说了,写一条登录验证测试一下。
六,备注
6.1 以下<url-pattern>参数里面的内容可以控制action显示的后缀,可以改成htm,html一类的。
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
6.2 DataSource是已经设定好的数据库的配置连接的文件。
6.3 log4j.properties文件时Log4j的配置文件,使用Log4j便于调试错误。
6.4 myeclipse 添的spring2.0时自动添加的包cglib-nodep-2.1_3.jar有问题.
(它添加的是spring1.2里面的CGLIB)所以不要用它添加的这个jar包,
自己导入spring 2.0.4里的cglib-nodep-2.1_3.jar,并且把添加hibernate3.0时
自动添加三个包asm.jar,asm- attrs.jar,cglib-2.1.3.jar 删除就可以了。
注:这个问题可以导致SessionFactory创建失败,或者类似的包冲突问题。
6.5 大多数的问题都是各种的包冲突,先考虑排查这个问题。
6.6 SSH所使用的jar包需要导入到工程里面来,便于我们修改引用的jar包.