J2EE Web 框架整合(Struts, hibernate, Spring)

近来一直在实践 J2EE Web 框架整合(Struts, hibernate, Spring),遇到的问题还是真多啊。好多问题也解决了,大多都是通过在网上查资料、看其他同僚的成果。很多解决方案还是很有帮助的,很开眼界,虽然不一定适合我的问题。所以这里就打算把自己遇到的问题以及我的解决方案整理一下。其中一写问题想不起来具体细节了,就先从昨天的收获说起吧。

我的环境是:

IDE: MyEclipse6.0

JDK: 1.5.0_11

Tomcat: apache-tomcat-6.0.14

Struts: Struts 1.1(1.1和其他的版本不太一样,编辑界面的菜单也多几项)

Spring: Spring 2.0

Hibernate: Hibernate 3.1

 步骤如下:

整合的顺序,是1)struts 2)spring 3)hibernate

我不知道为什么struts一定要放在第一位。倒是先整合spring,之后配置hibernate可以公用applicationContext.xml减少复杂性。

1.建好工程后,先开始整合struts,这个没什么好说的,看着界面自己点点就可以了。

2整合Spring

直接构选 Spring 2.0 persistence JDBC这个选项,否则会却包,之后applicationContext文件会表错,说找不到包。

web libraries也要选中,其中包含一些儿与集成相关的包

添加包有两种方式,默认是在工程中做个映射;第二种就是把包拷到lib下面。推荐第二种方式,因为,这种方式在与hibernate集成的时候会出错,而且spring 和 hibernate会有相同的包,用第二种方式可以减少包冲突

要把applicationContext.xml放在/WEB-INF/下面,否则在整合hibernate的时候会找不到这个文件

3整合hibernate

包都选上吧,一样也把包拷到lib下面,

选择Spring的配置文件。

Session Factory已经创建了,就不用钩选这个选项了,会重复的。

环境初步搭建完毕!

package hib; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.cfg.Configuration; /** * Configures and provides access to Hibernate sessions, tied to the * current thread of execution. Follows the Thread Local Session * pattern, see {@link http://hibernate.org/42.html }. */ public class HibernateSessionFactory { /** * Location of hibernate.cfg.xml file. * Location should be on the classpath as Hibernate uses * #resourceAsStream style lookup for its configuration file. * The default classpath location of the hibernate config file is * in the default package. Use #setConfigFile() to update * the location of the configuration file for the current session. */ private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml"; private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>(); private static Configuration configuration = new Configuration(); private static org.hibernate.SessionFactory sessionFactory; private static String configFile = CONFIG_FILE_LOCATION; static { try { configuration.configure(configFile); sessionFactory = configuration.buildSessionFactory(); } catch (Exception e) { System.err .println("%%%% Error Creating SessionFactory %%%%"); e.printStackTrace(); } } private HibernateSessionFactory() { } /** * Returns the ThreadLocal Session instance. Lazy initialize * the <code>SessionFactory</code> if needed. * * @return Session * @throws HibernateException */ public static Session getSession() throws HibernateException { Session session = (Session) threadLocal.get(); if (session == null || !session.isOpen()) { if (sessionFactory == null) { rebuildSessionFactory(); } session = (sessionFactory != null) ? sessionFactory.openSession() : null; threadLocal.set(session); } return session; } /** * Rebuild hibernate session factory * */ public static void rebuildSessionFactory() { try { configuration.configure(configFile); sessionFactory = configuration.buildSessionFactory(); } catch (Exception e) { System.err .println("%%%% Error Creating SessionFactory %%%%"); e.printStackTrace(); } } /** * Close the single hibernate session instance. * * @throws HibernateException */ public static void closeSession() throws HibernateException { Session session = (Session) threadLocal.get(); threadLocal.set(null); if (session != null) { session.close(); } } /** * return session factory * */ public static org.hibernate.SessionFactory getSessionFactory() { return sessionFactory; } /** * return session factory * * session factory will be rebuilded in the next call */ public static void setConfigFile(String configFile) { HibernateSessionFactory.configFile = configFile; sessionFactory = null; } /** * return hibernate configuration * */ public static Configuration getConfiguration() { return configuration; } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码匠君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值