`
laorer
  • 浏览: 434570 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

论JSP数据库连接池的必要性

阅读更多
论JSP数据库连接池的必要性

  一般情况下,在使用开发基于数据库的WEB程序时,传统的模式基本是按以下步骤:
  
  1. 在主程序(如Servlet、Beans)中建立数据库连接。
  
  2. 进行SQL操作,取出数据。
  
  3. 断开数据库连接。
  
  使用这种模式开发,存在很多问题。首先,我们要为每一次WEB请求(例如察看某一篇文章的内容)建立一次数据库连接,对于一次或几次操作来讲,或许你觉察不到系统的开销,但是,对于WEB程序来讲,即使在某一较短的时间段内,其操作请求数也远远不是一两次,而是数十上百次(想想全世界的网友都有可能在您的网页上查找资料),在这种情况下,系统开销是相当大的。
  
  事实上,在一个基于数据库的WEB系统中,建立数据库连接的操作将是系统中代价最大的操作之一。很多时候,可能您的网站速度瓶颈就在于此。
  
  其次,使用传统的模式,你必须去管理每一个连接,确保他们能被正确关闭,如果出现程序异常而导致某些连接未能关闭,将导致数据库系统中的内存泄露,最终我们将不得不重启数据库。
  
  针对以上问题,我们首先想到可以采用一个全局的Connection对象,创建后就不关闭,以后程序一直使用它,这样就不存在每次创建、关闭连接的问题了。但是,同一个连接使用次数过多,将会导致连接的不稳定,进而会导致WEB SERVER的频频重启。
  
  故而,这种方法也不可取。实际上,我们可以使用连接池技术来解决上述问题。首先,介绍一下连接池技术的基本原理。顾名思义,连接池最基本的思想就是预先建立一些连接放置于内存对象中以备使用:
    
  如图所示,当程序中需要建立数据库连接时,只须从内存中取一个来用而不用新建。同样,使用完毕后,只需放回内存即可。而连接的建立、断开都有连接池自身来管理。同时,我们还可以通过设置连接池的参数来控制连接池中的连接数、每个连接的最大使用次数等等。通过使用连接池,将大大提高程序效率,同时,我们可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。下面我们以一个名为ConnectionPool的连接池为例来看看连接池的实现。先看看ConnectionPool的基本属性:
  
  m_ConnectionPoolSize:
  连接池中连接数量下限
  m_ConnectionPoolMax:
  连接池中连接数量上限
  m_ConnectionUseCount:
  一个连接的最大使用次数
  m_ConnectionTimeout:
  一个连接的最长空闲时间
  m_MaxConnections = -1:
  同一时间的最大连接数
  m_timer:定时器
  
  这些属性定义了连接池与其中的每个连接的有效状态值。连接池的自我管理,实际上就是通过定时的对每个连接的状态、连接的数量进行判断而进行相应操作。其管理流程如下:
    
  通过上图,我们可以定义出ConnectionPool要完成管理所需要的基本接口:
  
  public class ConnectionPool
  implements TimerListener
  {
  public boolean initialize()
  //连接池初始化
  public void destroy()
  //连接池的销毁
  public synchronized java.sql.Connection
  getConnection()
  //取一个连接
  public synchronized void close()
  //关闭一个连接
  private synchronized
  void removeFromPool()
  //把一个连接从连接池中删除
  private synchronized
  void fillPool()
  //维护连接池大小
  public synchronized
  void TimerEvent()
  //定时器事件处理函数
  }
  
  通过这几个接口,已经可以完成连接池的基本管理。在TimeEvent()函数中完成连接池的状态检验工作,fillPool()时连接池至少保持最小连接数。因为我们要保存每一个连接的状态,所以还需要一个数据库连接对象:
  
  class ConnectionObject
  {
  public java.sql.Connection con;
  public boolean inUse;
  //是否被使用标志
  public long lastAccess;
  //最近一次开始使用时间
  public int useCount;
  //被使用次数
  }
  
  加入了ConnectionObject对象后,在ConnectionPool中操作的应该只是ConnectionObject,而其他进程需要的只是ConnectionObject的con属性,因此我们再加入一个类,作为其他进程获得与返回连接的接口:
  
  CLASS Conn
  {
  GetConnection();
  //从连接池中取出一个有效连接
  CloseConnection();
  //返回连接,此时并没有关闭连接,只是放回了连接池
  DestroyPool();
  //销毁连接池
  }
  
  最后我们的整个系统总的架构如下:
    


分享到:
评论

相关推荐

    JSP数据库连接池的必要性.doc

    JSP数据库连接池的必要性主要体现在提高性能和资源管理两个方面。在传统的JSP开发中,每当有数据库操作需求时,都会进行建立、使用和关闭数据库连接的过程。这种模式在高并发的Web应用程序中会带来显著的性能损耗,...

    数据库连接池配置终极指南

    本文档将详细介绍如何在自安装的Tomcat服务器以及JBuilder自带的Tomcat中配置数据库连接池,确保开发与调试过程中的高效性。 #### 二、准备工作 1. **安装Tomcat** - 确保安装的Tomcat版本支持数据库连接池功能...

    tomcat数据库连接池配置

    ### Tomcat 数据库连接池配置详解 在Java Web开发中,Tomcat作为一款广泛使用的应用服务器,其数据库连接池配置是十分重要的一个环节。合理的配置能够显著提高应用程序的性能和稳定性。本文将以MySQL数据库为例,...

    MVC模式下数据库连接池的Web应用方案

    本文旨在提出一个结合MVC模式与数据库连接池技术的优化Web系统方案,并通过实际案例证明其有效性。 #### 1 传统的Web系统架构和数据库连接技术 当前的Web系统开发通常采用JSP(JavaServer Pages)和基于JDBC(Java...

    数据库 连接池

    对于学习高级JAVA、JSP、Servlet等技术栈的同学来说,掌握数据库连接池的原理与应用是十分必要的。 #### 一、数据库连接池的基本概念 数据库连接池是一种用于管理数据库连接的机制,它通过预先创建多个数据库连接...

    tomcat6配置数据库连接池代码

    本文将详细讲解如何在Tomcat6中配置数据库连接池,并以`index.jsp`为例展示如何在Web应用中使用这些配置。首先,我们需要了解数据库连接池的基本概念和常用的连接池实现,如Apache的DBCP或C3P0。这里我们假设使用的...

    Java数据库连接池与简单自定义标签

    总结起来,Java数据库连接池优化了数据库操作的效率,而自定义标签提供了定制化JSP页面的灵活性。两者都是Java Web开发中的重要工具,能够帮助开发者构建高效、易维护的应用程序。在实际项目中,了解并掌握这两个...

    jsp登陆和注册代码,与MYSQL数据库连接,对初学者有很好的借鉴作用

    【标题】"jsp登陆和注册代码,与MYSQL数据库连接,对初学者有很好的借鉴作用" 涉及到的关键技术主要包括JSP(JavaServer Pages)、MySQL数据库连接以及用户身份验证的基本流程。以下是对这些知识点的详细说明: 1. ...

    dreamweaver编写jsp时连接数据库

    请注意,实际开发中还需要考虑异常处理、连接池管理、安全性等问题,以确保应用程序的稳定性和效率。同时,随着技术的发展,可能需要更新到更现代的MySQL版本和JDBC驱动,以利用新功能和安全改进。

    JSP数据库连接大全

    在本文中,我们将深入探讨如何使用JSP进行数据库连接,主要涵盖Oracle 8/8i/9i、SQL Server 7.0/2000和DB2这三种...需要注意的是,实际应用中还需要考虑异常处理、连接池管理等最佳实践,以确保程序的健壮性和性能。

    jsp连接mysql数据库 jar包+代码

    连接池如Apache Commons DBCP或C3P0可以有效地重用数据库连接,避免频繁的创建和销毁连接带来的开销。 总之,通过引入MySQL Connector/J的jar包和编写相应的JSP代码,我们可以成功地在Java Web应用程序中连接到...

    java测试数据库连接

    在Java编程中,数据库连接是不可或缺的一部分,尤其...直接使用Java类适用于简单场景,JSP+JavaBean更适合Web应用,而连接池则能提升大型应用的性能和稳定性。理解并熟练运用这些技术,对于Java开发人员来说至关重要。

    jsp连接mysql数据库的javabean

    在Java Web开发中,JSP(JavaServer Pages)通常用于创建动态网页,而MySQL是一种广泛使用的开源...在实际应用中,可以根据需求进行扩展,比如添加事务处理、异常处理、连接池管理等功能,以提高应用的稳定性和性能。

    Eclipse配合Resin开发web,附加mysql数据库连接池配置设置整合与测试.docx

    ### Eclipse配合Resin开发Web应用及MySQL数据库连接池配置整合与测试 #### 一、为何选择Eclipse 在Java开发领域,Eclipse是一款备受推崇的集成开发环境(IDE)。对于那些从.NET平台转战Java的新手开发者而言,寻找一...

    jsp数据库编程指南

    8. 错误处理与异常捕获:在JSP数据库编程中,必须妥善处理可能出现的错误和异常,例如数据库连接失败、SQL执行错误等,确保程序的健壮性。 9. 安全性:在处理用户输入和数据库交互时,要警惕SQL注入、XSS攻击等安全...

    jsp连接数据库 DB类

    通过创建DB类并封装数据库操作,JSP项目可以更有效地管理数据库连接,减少代码冗余,同时提高代码的可读性和可复用性。在实际开发中,还需要考虑异常处理、事务管理和连接池的使用,以优化性能和安全性。

    Eclipse配合Resin开发web,附加mysql数据库连接池配置设置整合与测试.pdf

    ### Eclipse配合Resin开发Web应用及MySQL数据库连接池配置整合与测试 #### 一、为何选择Eclipse 在Java开发领域,Eclipse是一款备受推崇的集成开发环境(IDE)。对于那些从.NET平台转战Java的开发者来说,寻找一款...

    jsp连Sql_server数据库模板

    总结来说,"jsp连Sql_server数据库模板"是一个帮助开发者快速实现JSP与SQL Server数据库连接的工具,它可能包含了JDBC驱动、连接配置、数据库操作的模板代码,以及必要的异常处理机制。掌握这些知识点对于开发基于...

    经典jsp对数据库的增加+展示

    推荐使用连接池技术,如C3P0或HikariCP,来管理数据库连接,提高资源利用率和响应速度。 - **安全性和效率**:直接使用`Statement`执行SQL语句可能会导致SQL注入风险,应考虑使用`PreparedStatement`来预编译SQL语句...

Global site tag (gtag.js) - Google Analytics