Java Servlet做为首选的服务器端数据处理技术,正在迅速取代CGI脚本。Servlet超越CGI的优点之一在于,不只多个请求能够共享公用资源,并且还能够在不一样用户请求之间保留持续数据。本文介绍一种充分发挥该特点的实用技术,即数据库链接池。数据库
1、实现链接池的意义安全
动态Web站点每每用数据库存储的信息生成Web页面,每个页面请求致使一次数据库访问。链接数据库不只要开销必定的通信和内存资源,还必须完成用户验证、安全上下文配置这类任务,于是每每成为最为耗时的操做。固然,实际的链接时间开销变幻无穷,但1到2秒延迟并不是不常见。若是某个基于数据库的Web应用只需创建一次初始链接,不一样页面请求可以共享同一链接,就能得到显著的性能改善。
Servlet是一个Java类。Servlet引擎(它多是Web服务软件的一部分,也多是一个独立的附加模块)在系统启动或Servlet第一次被请求时将该类装入Java虚拟机并建立它的一个实例。不一样用户请求由同一Servlet实例的多个独立线程处理。那些要求在不一样请求之间持续有效的数据既能够用Servlet的实例变量来保存,也能够保存在独立的辅助对象中。
用JDBC访问数据库首先要建立与数据库之间的链接,得到一个链接对象(Connection),由链接对象提供执行SQL语句的方法。本文介绍的数据库链接池包括一个管理类DBConnectionManager,负责提供与多个链接池对象(DBConnectionPool类)之间的接口。每个链接池对象管理一组JDBC链接对象,每个链接对象能够被任意数量的Servlet共享。
类DBConnectionPool提供如下功能:服务器
1) 从链接池获取(或建立)可用链接。
2) 把链接返回给链接池。
3) 在系统关闭时释放全部资源,关闭全部链接。性能
此外, DBConnectionPool 类还可以处理无效链接(原来登记为可用的链接,因为某种缘由再也不可用,如超时,通信问题),并可以限制链接池中的链接总数不超过某个预约值。
管理类DBConnectionManager用于管理多个链接池对象,它提供如下功能:spa
1) 装载和注册JDBC驱动程序。
2) 根据在属性文件中定义的属性建立链接池对象。
3) 实现链接池名字与其实例之间的映射。
4) 跟踪客户程序对链接池的引用,保证在最后一个客户程序结束时安全地关闭全部链接池。线程