频 道 直 达 - 新闻 - 读书 - 培训 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 技术圈 - 博客 - BBS
51CTO.COM_中国领先的IT技术网站
找资料:

构建基于Hibernate的servlet(1)

作者: 朱先忠编译 出处:51CTO.com  (  ) 砖  (  ) 好  评论 ( ) 条  进入论坛
更新时间:2006-11-27 13:40
关 键 词:Java  Hibernate  Tomcat  servlet
阅读提示:在本篇中,相应的示例servlet则使用Hibernate(不再是原始JDBC)存取MySQL数据库,但是将继续使用相同的Context.xml文件(没有作任何改变)。因此,在本文中,Hibernate仍将利用与原始JDBC(已在上篇中使用)相同的JNDI数据源。

在上一篇,我们讨论了如何配置Tomcat 5.5的Context.xml文件,它能够建立Tomcat 5.5中的只读JNDI。通过这个JNDI,可以为你的Tomcat servlet提供数据源—无论在你的servlet中使用的是Hibernate还是原始JDBC。而且在上一篇中,相应的示例servlet使用了原始JDBC存取我们的MySQL数据库。

在本篇中,相应的示例servlet则使用Hibernate(不再是原始JDBC)存取MySQL数据库,但是将继续使用相同的Context.xml文件(没有作任何改变)。因此,在本文中,Hibernate仍将利用与原始JDBC(已在上篇中使用)相同的JNDI数据源。

一、Web.xml

让我们先从分析web.xml入手(我们假定,你已经理解web.xml的作用—用于标识和配置任何Java web应用程序组件,并且你已经理解了这个文件的格式):


xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

tomcatJndi.HibernateAppListener


Retrieval
tomcatJndi.Retrieval


RetrieveViaHibernate
tomcatJndi.RetrieveViaHibernate


InsertViaHibernate
tomcatJndi.InsertViaHibernate


Retrieval
/Retrieval


RetrieveViaHibernate
/RetrieveViaHibernate


InsertViaHibernate
/InsertViaHibernate

上面描述了web.xml的所有内容(适用于本系列中的三篇)。它包含了三个servlet:

◆Retrieval—在第一篇中利用原始JDBC的servlet。
◆RetrieveViaHibernate—本篇中的servlet,它查询与第一篇中相同的MySQL数据库,但现在使用的是Hibernate。
◆InsertViaHibernate—第三篇中的servlet,它在一个事务(从Hibernate中获取)边界上执行数据库插入操作。

另外,在靠近web.xml的顶部是一个xml listener元素—在本例中,它用于定义一个ServletContextListener。该监听器是一个类,当web应用程序已经准备好进行请求处理(例如在Tomcat服务器启动时)时,这个类被实例化。具体地说,在处理任何请求之前,应用程序将调用这个类的contextInitialized()方法来进行必要的初始化。例如,在第一次调用这个web.xml中的任何一个servlet之前,在我们的应用程序中会首先激活contextInitialized()方法。此后,这个方法将不被再次激活,除非应用程序重新运行或Tomcat重新启动。

二、ServletContextListener

在我们的例子中,我们想让ServletContextListener加载我们的HibernateUtil类,以便再由该类负责实例化一个静态Hibernate会话工厂。结果是,在我们的任何一个servlet收到Http请求之前,该Hibernate会话工厂已经准备好了。下面,让我们来分析一下我们的监听器(tomcatJndi.HibernateAppListener)的相应代码:

package tomcatJndi;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletContextEvent;
import org.apache.log4j.Logger;
import org.hibernate.Session;
public class HibernateAppListener implements ServletContextListener {
/*应用程序启动事件*/
public void contextInitialized(ServletContextEvent ce) {
Logger loggerConnect = Logger.getLogger("Connect");
try  {
loggerConnect.debug("In HibernateAppListener.contextInitialized");
Class.forName("tomcatJndi.HibernateUtil").newInstance();   
loggerConnect.debug("In HibernateAppListener, Class.forName for

tomcatJndi.HibernateUtil successful");
}
catch (Exception e)  {
loggerConnect.debug("In HibernateAppListener, Class.forName for

tomcatJndi.HibernateUtil throws Exception");
}
}
/*应用程序退出事件*/
public void contextDestroyed(ServletContextEvent ce) {}
}

注意上面调用的Class.forName(...).newInstance()方法,它试图确保指定的类(tomcatJndi.HibernateUtil)被加载,这样才能调用HibernateUtil中的静态初始化器。接下来,让我们分析一下HibernateUtil。

三、HibernateUtil

package tomcatJndi;
import org.hibernate.*;
import org.hibernate.cfg.*;
import org.apache.log4j.Logger;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
Logger loggerRoot = Logger.getRootLogger();
Logger loggerConnect = Logger.getLogger("Connect");
loggerRoot.debug("In HibernateUtil try-clause");
loggerRoot.error("In HibernateUtil try-clause");
loggerConnect.debug("In HibernateUtil try-clause via loggerConnect DEBUG*****");
//从hibernate.cfg.xml中创建SessionFactory
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}

注意,在此,静态SessionFactory(一个singleton)被buildSessionFactory()所实例化。接口org.hibernate.SessionFactory描述了一个Hibernate工厂—我们的代码能够从这个工厂中获得org.hibernate.session对象。在此,这个Hibernate会话(Session)是我们的应用程序中的重点;它负责实现与Hibernate的交互,并且要求它(Hibernate)完成任何功能。


共5页: 1 [2] [3] [4] [5] 下一页
【内容导航】
发表
查看
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 领 先 的 IT 技 术 网 站 ·
技 术 成 就 梦 想
·Java基础教程 (查看52371次)
·UML类图详解 (查看46839次)
·Java编程开发手册 (查看25118次)
·UML统一建模语言 (查看24099次)
·C#技术开发指南 (查看22406次)
·Java编程开发手册 (1195个砖)
·Java基础教程 (429个砖)
·C#技术开发指南 (304个砖)
·PB开发教程 (220个砖)
·.NET开发手册 (217个砖)
·Java编程开发手册 (653个好)
·Java基础教程 (569个好)
·.NET开发手册 (251个好)
·PB开发教程 (209个好)
·Delphi开发技术手册 (174个好)
订阅技术快讯
电子杂志下载
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
名称:Vista精品应用黄皮书
简介:《Vista精品应用黄皮书》囊括了Vista的各方面内容。此次的精简版,是将里面的内容做了提取,便于用户下载和使用。内容包含了各种Vista的安装与实施、技巧与解析以及各种Vista相关学习文档和相关软件的安全下载。该电子书是了解和应用Vista人员必备的工具手册,并且也是第一本
名称:2006中国IT论坛精品集合
简介:本书由“51CTO论坛推广联盟”制作完成。书中所有内容均来自各联盟成员的论坛(网站)。制作本书的目的是为了集中大家的优势资源,将更多更精彩的内容带给广大技术爱好者。本书是联盟成立以来制作的第一本书。
关键字阅读
频道精选
主编信箱 热线:010-66476606 告诉我们您想看的:专题 文章
关于我们 | 诚聘英才 | 联系我们 | 网站大事 | 意见反馈 | 网站地图
Copyright©2005-2007 51CTO.COM 版权所有