[转载]【Java EE】Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架 整合开发
本人采用的开发环境为MyEclipse6.6,数据库为MySQL,Web服务为Tomcat。
这三个框架的整合其实就是Struts2.1.6+Spring2.5.6的整合、Spring2.5.6+Hibernate3.3.1的整合。
(一)Struts2.1.6+Spring2.5.6的整合
详见之前发表的文章【J2EE】Struts2.1.6与Spring2.5.6框架整合
(二)Spring2.5.6+Hibernate3.3.1的整合
1、引入Hibernate必需的jar包
hibernate3.jar
antlr-2.7.6.jar
commons-collections-3.1.jar
dom4j-1.6.1.jar
javassist-3.4.GA.jar
jta-1.1.jar
slf4j-api-1.5.2.jar
因为slf4j-api-1.5.2.jar只有接口,还需要其实现类,而Hibernate带有的jar包中并没有包含,所以还需自己到apache网站下载
slf4j-log4j12-1.5.2.jar
log4j-1.2.14.jar
两个jar包,一个是其实现,log4j-1.2.14.jar是slf4j-log4j12-1.5.2.jar所需要用到的jar包
2、在web.xml中配置过滤器,让Spring为我们自动管理session,无需我们手动开、关Hibernate中的session
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3、在web.xml中配置过滤器,处理字符集编码
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
4、在applicationContext-common.xml中配置一些公共的配置
<!-- 配置sessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
<!-- 配置事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
<!-- 配置事务的传播特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="modify*" propagation="REQUIRED" />
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
<!-- 那些类的哪些方法参与事务 -->
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
<aop:config>
<aop:advisor pointcut="execution(* com.test.manager.*.*(..))"
advice-ref="txAdvice" />
</aop:config>
5、在上一步中我们用到了aop,Spring本身并没有对其实现,而是使用了现成别人已经做好了的。需要引入两个jar包,在Spring中的 lib\aspectj 目录下
aspectjrt.jar
aspectjweaver.jar
(三)验证三个框架是否成功整合
1、对之前发表的文章【J2EE】Struts2.1.6与Spring2.5.6框架整合中的com.test.manager.impl中的类LoginManagerImpl作如下修改:
继承HibernateDaoSupport
修改isLogin方法的实现
<bean id="loginManager"
class="com.test.manager.impl.LoginManagerImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
3、在MySQL中存入数据,用户名和密码均为intrl,以便测试时使用。
4、重新启动Tomcat服务,访问登录页,进行测试,可以成功读取数据库中的User信息进行验证。三个框架整合成功!!!![](http://www.cnitblog.com/weiweibbs/aggbug/59930.html)
这三个框架的整合其实就是Struts2.1.6+Spring2.5.6的整合、Spring2.5.6+Hibernate3.3.1的整合。
(一)Struts2.1.6+Spring2.5.6的整合
详见之前发表的文章【J2EE】Struts2.1.6与Spring2.5.6框架整合
(二)Spring2.5.6+Hibernate3.3.1的整合
1、引入Hibernate必需的jar包
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
2、在web.xml中配置过滤器,让Spring为我们自动管理session,无需我们手动开、关Hibernate中的session
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
6、 利用ANT+Xdoclet自动生成Hibernate配置文件,详见之前发表的文章【J2EE】ANT+Xdoclet自动生成Hibernate配置文件
7、在MySQL中建立数据库test
8、部署项目,启动Tomcat服务器便可在数据库中见到Hibernate为我们自动生成了两张表t_group、t_user
(三)验证三个框架是否成功整合
1、对之前发表的文章【J2EE】Struts2.1.6与Spring2.5.6框架整合中的com.test.manager.impl中的类LoginManagerImpl作如下修改:
继承HibernateDaoSupport
修改isLogin方法的实现
1
package com.test.manager.impl;
2![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
3
import java.util.List;
4![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
5
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
6![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
7
import com.test.manager.LoginManager;
8
import com.test.model.User;
9![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
10
public class LoginManagerImpl extends HibernateDaoSupport implements
11
LoginManager {
12
@SuppressWarnings("unchecked")
13
public boolean isLogin(String username, String password) {
14
/*
15
* if(null!=username&&null!=password&&"intrl".equals(username.trim())&&"intrl".equals(password.trim())) {
16
* return true; } return false;
17
*/
18![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
19
Object[] s = new Object[2];
20
s[0] = username;
21
s[1] = password;
22
List<User> users = this.getHibernateTemplate().find(
23
"from User user where user.username=? and password=?", s);
24
if (users.size() == 0) {
25
return false;
26
}
27
return true;
28
}
29
}
2、因为我们所继承的类HibernateDaoSupport需要显示地注入sessionFactory,所以必须在applicationContext-beans.xml中修改loginManager的配置,增加一个所需注入参数![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
2
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
3
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
4
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
5
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
6
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
7
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
8
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
9
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
10
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
11
![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
12
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
13
![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
14
![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
15
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
16
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
17
![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
18
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
19
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
20
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
21
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
22
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
23
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
24
![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
25
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
26
![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
27
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
28
![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
29
![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
4、重新启动Tomcat服务,访问登录页,进行测试,可以成功读取数据库中的User信息进行验证。三个框架整合成功!!!