标题:Tomcat4/5连接池的设置及简单应用示例

关键字:Tomcat 连接池 JDBC驱动 Context

作者:jrq

内容:

一、Win2k下Tomcat4的连接池的配置

1.安装JDK1.4和jakarta-tomcat-4.1.27.exe。

路径分别为 D:/jdk1.4 和 D:/Tomcat 4.1。
  安装Tomcat 4时,会要求填写web访问端口、用户名、密码等信息。
  web访问端口默认为8080,用户名默认为admin,密码自己填写。

启动Tomcat4,访问http://127.0.0.1:8080/ ,就能看到Apache Tomcat/4.1.27的欢迎访问页面,页面上有一些相关介绍信息等。

2.设置数据库的驱动

以Oracle的JDBC驱动设置为例:

Oracle8i的驱动在/oracle/ora81/jdbc/lib/目录下。名字为classes12.zip。

Oracle9i的驱动在/oracle9i/jdbc/lib/目录下,名字为ojdbc14.jar。

将这个文件copy到D:/Tomcat 4.1/common/lib 下。

注意,如果使用Oracle8i 的驱动,则需要在D:/Tomcat 4.1/common/lib 目录下将classes12.zip更名为classes12.jar,因为Tomcat4不认识zip的后缀名。

3.设置Web应用。

新建一个文件夹,名字为mypool,位置为D:/mypool。这个D:/mypool路径将是web应用的主目录。

打开D:/Tomcat 4.1/conf/server.xml 文件,找到如下行:
 
   <!-- Tomcat Root Context -->
     <!--
         <Context path="" docBase="ROOT" debug="0"/>
     -->
 
 
  在这下面,加入如下行:
 
  <Context path="/mypool" docBase="D:/mypool" privileged="true" reloadable="true"/>

完成后,成为这个样子:

<!-- Tomcat Root Context -->
     <!--
          <Context path="" docBase="ROOT" debug="0"/>
      -->
   
     <Context path="/mypool" docBase="D:/mypool" privileged="true" reloadable="true"/>

保存D:/Tomcat 4.1/conf/server.xml 文件。

配置完成后,重新启动Tomcat,就可以这样访问这个web应用了: http://127.0.0.1:8080/mypool/ 。

4.设置Tomcat的连接池数据源。

访问 http://127.0.0.1:8080/admin 页面,用刚才安装 Tomcat4 时填写的用户名和密码登录。

登录成功后,会出现Tomcat 的web应用管理界面(Tomcat Web Server Administration Tool)。

然后在左边的目录树点击“Data Sources”项,右边可以看到JNDI配置的页面。
 
  在右上角的下拉框中选择“Create New Data Source”,接下来填写配置信息:
 
  JNDI Name: jdbc/myOrcl  
  Data Source URL: jdbc:oracle:thin:@192.168.6.40:1521:dbserver
  JDBC Driver Class: oracle.jdbc.driver.OracleDriver
  User Name: myname
  Password: mypassword
  Max. Active Connections:  可用默认值
  Max. Idle Connections:    可用默认值
  Max. Wait for Connection: 可用默认值
  Validation Query: 可不填写。

然后,按下“save”按钮保存。
  再按下“Commit Changes”按钮将配置更改提交完成。

此时如果看看 Tomcat4 的窗口,会发现在最下面有一行文字提示:

Debugging -- changes saved to conf/server.xml
 
  此时 D:/Tomcat 4.1/conf/server.xml 文件的配置已经更改保存完毕。

如果此时打开D:/Tomcat 4.1/conf/server.xml 文件,会发现server.xml 文件的内容改变了很多。
  一些注释文字都被去掉了。

还会发现上面第三步配置Web应用的如下文字
   
   <!-- Tomcat Root Context -->
     <!--
          <Context path="" docBase="ROOT" debug="0"/>
      -->
   
     <Context path="/mypool" docBase="D:/mypool" privileged="true" reloadable="true"/>

则被自动修改成了这样的:

<Context className="org.apache.catalina.core.StandardContext" cachingAllowed="true" charsetMapperClass="org.apache.catalina.util.CharsetMapper" cookies="true" crossContext="false" debug="0" docBase="D:/mypool" mapperClass="org.apache.catalina.core.StandardContextMapper" path="/mypool" privileged="true" reloadable="true" swallowOutput="false" useNaming="true" wrapperClass="org.apache.catalina.core.StandardWrapper">
        </Context>

好了,至此位置,对Oracle的应用连接池已经配置完毕。
   
   仔细对照server.xml 文件,会发现刚才所配置的连接池信息被放置在<GlobalNamingResources>标签中,这意味着这个信息是可以被全局引用的,大致是如下的样子:

<GlobalNamingResources>
    <Environment name="simpleValue" override="true" type="java.lang.Integer" value="30"/>
    <Resource name="jdbc/myOrcl" scope="Shareable" type="javax.sql.DataSource"/>
    <Resource auth="Container" description="User database that can be updated and saved" name="UserDatabase" scope="Shareable" type="org.apache.catalina.UserDatabase"/>
   
    <ResourceParams name="jdbc/myOrcl">
      <parameter>
        <name>maxWait</name>
        <value>5000</value>
      </parameter>
      <parameter>
        <name>maxActive</name>
        <value>200</value>
      </parameter>
      <parameter>
        <name>password</name>
        <value>mypassword</value>
      </parameter>
      <parameter>
        <name>url</name>
        <value>jdbc:oracle:thin:@192.168.6.40:1521:dbserver</value>
      </parameter>
      <parameter>
        <name>driverClassName</name>
        <value>oracle.jdbc.driver.OracleDriver</value>
      </parameter>
      <parameter>
        <name>maxIdle</name>
        <value>20</value>
      </parameter>
      <parameter>
        <name>username</name>
        <value>myname</value>
      </parameter>
    </ResourceParams>
    <ResourceParams name="UserDatabase">
      <parameter>
        <name>factory</name>
        <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
      </parameter>
      <parameter>
        <name>pathname</name>
        <value>conf/tomcat-users.xml</value>
      </parameter>
    </ResourceParams>
  </GlobalNamingResources>

5.设置web应用对连接池的引用。
 
  打开D:/Tomcat 4.1/conf/server.xml 文件,找到刚才配置的web应用文字,由于刚才server.xml 文件被自动修改过,并去掉了很多注释内容,所以刚才配置的web应用

<Context path="/mypool" docBase="D:/mypool" privileged="true" reloadable="true"/>

被自动修改成了这样的:

<Context className="org.apache.catalina.core.StandardContext" cachingAllowed="true" charsetMapperClass="org.apache.catalina.util.CharsetMapper" cookies="true" crossContext="false" debug="0" docBase="D:/mypool" mapperClass="org.apache.catalina.core.StandardContextMapper" path="/mypool" privileged="true" reloadable="true" swallowOutput="false" useNaming="true" wrapperClass="org.apache.catalina.core.StandardWrapper">
        </Context>

在<Context></Context>的描述中加上本web应用对全局连接池的引用说明,如下文字:

<ResourceLink global="jdbc/myOrcl" name="jdbc/myOrcl" type="javax.sql.DataSource"/>

设置完成后,web应用的描述大致如下面的样子:

<Context className="org.apache.catalina.core.StandardContext" cachingAllowed="true" charsetMapperClass="org.apache.catalina.util.CharsetMapper" cookies="true" crossContext="false" debug="0" docBase="D:/mypool" mapperClass="org.apache.catalina.core.StandardContextMapper" path="/mypool" privileged="true" reloadable="true" swallowOutput="false" useNaming="true" wrapperClass="org.apache.catalina.core.StandardWrapper">  
   
      <ResourceLink global="jdbc/myOrcl" name="jdbc/myOrcl" type="javax.sql.DataSource"/>      
   
 </Context>

保存D:/Tomcat 4.1/conf/server.xml 文件。

注意,设置这个连接池的引用说明是非常重要的一步。
  一些朋友在Tomcat4中配置连接池失败的原因大都归咎与此。还有网上一些文章说这是一个Tomcat4的一个Bug。
  我用了整整两天两夜的时间才明白其中的奥秘。[:(]
  当时离疯掉只查一点点。因为毕竟配置一个连接池是很简单的。[:(]

6.一般情况下,到此,连接池的设置就完成了。

然后需要重新启动Tomcat,这样就可以使用连接池来工作了。

但是,看到很多文章上说,还需要设置一下web.xml才能应用。我没有设置web.xml,连接池也可以完全使用。

现在说一下web.xml的配置方法。

在D:/mypool中新建文件夹,命名为WEB-INF,注意是大写的字母。

然后在D:/mypool/WEB-INF/ 下新建文件web.xml,其内容为:

<web-app>
    <resource-ref>
        <description>Oracle DataSource example</description>
        <res-ref-name>jdbc/myOrcl</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>
  </web-app>

保存D:/mypool/WEB-INF/web.xml 文件。

7.一个简单的应用示例。

写了一个简单的JSP页面,用连接池来访问数据库。

内容如下:
---------------------
<%@ page contentType="text/html;charset=GBK"%>
<%@ page import="javax.naming.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="java.sql.*"%>
<%
    try
    {                  
       Context initCtx = new InitialContext();
 
       if(initCtx==null)
          throw new Exception("没有匹配的环境");

Context ctx = (Context) initCtx.lookup("java:comp/env");
     
       //获取连接池对象                  
       Object obj = (Object) ctx.lookup("jdbc/myOrcl");  
     
      //类型转换
       javax.sql.DataSource ds = (javax.sql.DataSource)obj;
         
       if(ds==null)
          throw new Exception("没有匹配数据库");  
   
       Connection conn = ds.getConnection();
     
       Statement stmt = conn.createStatement();                  
                             
       String strSql="select * from grade";  //SQL,要保证grade数据表里面有记录。
                     
       ResultSet rs=stmt.executeQuery(strSql);

if(rs.next())
         {                    
          out.println(rs.getString(1));                          
          out.println(rs.getString(2));                      
         }
       rs.close();      //关闭ResultSet  
       stmt.close();    //关闭Statement
       conn.close();    //将连接放回到连接池
     }

catch(Exception ex)

{    
         ex.printStackTrace();
         throw new SQLException("cannot get Connection pool."+ex);
     }
%>

<hr>
--------------------
 
记住,用完后的数据库连接要释放。
不然当打开的连接过多或恶意刷屏,连接池的连接数目会被用完。
当连接池的连接数目用完后,再访问jsp页面时,会在页面出现如下的错误信息,报告连接池的连接被耗尽:
java.sql.SQLException: DBCP could not obtain an idle db connection, pool exhausted

二、Win2k下Tomcat5 的连接池的配置

安装jakarta-tomcat-5.0.13.exe,假如Tomcat5的安装目录为 D:/Tomcat 5.0 。

别忘了把oracle的驱动程序classes12.jar文件copy到目录 D:/Tomcat 5.0/common/lib/ 下。

Tomcat5的连接池设置和Tomcat4 的差不多,仅说明一下不同点或需要特别注意的地方。

1. Tomcat5启动后,访问 http://127.0.0.1:8080/admin 页面,当设置完Tomcat的连接池数据源后,打开D:/Tomcat 5.0/conf/server.xml 文件,会看到配置的连接池相关信息大致如下样子:

<GlobalNamingResources>
    <Environment name="simpleValue" type="java.lang.Integer" value="30"/>
    <Resource name="jdbc/myOrcl" type="javax.sql.DataSource"/>
    <Resource auth="Container" description="User database that can be updated and saved" name="UserDatabase" type="org.apache.catalina.UserDatabase"/>
    <ResourceParams name="jdbc/myOrcl">
      <parameter>
        <name>maxWait</name>
        <value>5000</value>
      </parameter>
      <parameter>
        <name>maxActive</name>
        <value>4</value>
      </parameter>
      <parameter>
        <name>password</name>
        <value>mypassword</value>
      </parameter>
      <parameter>
        <name>url</name>
        <value>jdbc:oracle:thin:@127.0.0.1:1521:dbserver</value>
      </parameter>
      <parameter>
        <name>driverClassName</name>
        <value>oracle.jdbc.driver.OracleDriver</value>
      </parameter>
      <parameter>
        <name>maxIdle</name>
        <value>2</value>
      </parameter>
      <parameter>
        <name>username</name>
        <value>myusername</value>
      </parameter>
    </ResourceParams>
    <ResourceParams name="UserDatabase">
      <parameter>
        <name>factory</name>
        <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
      </parameter>
      <parameter>
        <name>pathname</name>
        <value>conf/tomcat-users.xml</value>
      </parameter>
    </ResourceParams>
  </GlobalNamingResources>

可以看到,一些连接池的信息配置参数已经和Tomcat4不同了。
但大致配置步骤和方法都是一样的。

2.设置web应用对连接池的引用。

打开D:/Tomcat 5.0/conf/Catalina/localhost/ 目录,找到和web应用同名的xml文件(mypool.xml),打开这个文件,
修该其<Context></Context>的描述信息,添加如下行:

<ResourceLink global="jdbc/myOrcl" name="jdbc/myOrcl" type="javax.sql.DataSource"/>

使mypool.xml文件的内容看起来大致这个:
 
   <Context docBase="D:/mypool" path="/mypool" privileged="true" reloadable="true">
     <ResourceLink global="jdbc/myOrcl" name="jdbc/myOrcl" type="javax.sql.DataSource"/>
   </Context>

然后保存mypool.xml,需要重新Tomcat5服务,使之生效。

3.JSP页面测试文件的写法也是一样的,不再赘述。

4.一些补充:

如果web应用没有配置对连接池的引用,即没有配置<ResourceLink>,则会在访问jsp页面时出现如下错误:
    NameNotFoundException: Name jdbc is not bound in this Context

如果缺少Oracle的JDBC驱动,则会在访问jsp页面时出现如下错误:
    java.sql.SQLException: Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver'

by  jrq
                    
                                                                                                                      2004年10月26日夜  于石市

转载于:https://www.cnblogs.com/java0819/archive/2004/10/29/2146295.html

Tomcat4/5连接池的设置及简单应用示例相关推荐

  1. 摘要: Druid连接池一个设置引发的血案 -- 链接池出现问题

    摘要: Druid连接池一个设置引发的血案 今天在一台配置很低的机器上运行批量更新的程序~~~ 大概跑了三十分钟~~~这配置~~~这程序~~~ 然后华丽丽的报异常了~~~ 具体异常是这样的, DEBU ...

  2. Druid连接池 一个设置 removeAbandonedTimeout

    2019独角兽企业重金招聘Python工程师标准>>> Druid连接池 一个设置 removeAbandonedTimeout 博客分类: 数据库 <!-- 超过时间限制是否 ...

  3. Druid连接池一个设置引发的血案

    参考:http://my.oschina.net/haogrgr/blog/224010 今天在一台配置很低的机器上运行批量更新的程序~~~ 大概跑了三十分钟~~~这配置~~~这程序~~~ 然后华丽丽 ...

  4. c3p0连接池的配置和简单使用

    背景 一般我们在项目中操作数据库时,都是每次需要操作数据库就建立一个连接,操作完成后释放连接.因为jdbc没有保持连接的能力,一旦超过一定时间没有使用(大约几百毫秒),连接就会被自动释放掉.而每次新建 ...

  5. get/close not same thread Druid 连接池一个设置没设置对引发的血案

    我就郁闷了,1000W+数据审核每次总是到一半就出这么个错,仔细找找原来是一个配置项的小问题,removeAbandonedTimeout 这个代表你从连接池取出一个连接多少秒之后你还没还回来,那就强 ...

  6. druiddatasource java_Druid连接池一个设置引发的血案

    今天在一台配置很低的机器上运行批量更新的程序~~~ 大概跑了三十分钟~~~这配置~~~这程序~~~ 然后华丽丽的报异常了~~~ 具体异常是这样的, DEBUG: (BaseJdbcLogger.jav ...

  7. 【转】Druid连接池一个设置引发的血案

    https://my.oschina.net/haogrgr/blog/224010 今天在一台配置很低的机器上运行批量更新的程序~~~ 大概跑了三十分钟~~~这配置~~~这程序~~~ 然后华丽丽的报 ...

  8. Druid连接池一个设置引发的血案【abandon connection, open stackTrace】

    2019独角兽企业重金招聘Python工程师标准>>> 今天在一台配置很低的机器上运行批量更新的程序~~~ 大概跑了三十分钟~~~这配置~~~这程序~~~ 然后华丽丽的报异常了~~~ ...

  9. [.NET开发] C#连接MySQL的两个简单代码示例

    实现代码一.使用的是mysql自带的驱动安装一下即可 这是一个简单的例子. 在这里有个问题:dataset如果没设主键的话,可能会引起一些对数库操作的问题,比如会造成updata出现错误. stati ...

最新文章

  1. 自己动手开发智能聊天机器人完全指南(附python完整源码)
  2. 云计算基础设施智能运维的下一段征程,你们准备好了吗?
  3. 自动驾驶芯片_自动驾驶芯片“争夺战”
  4. Queue.ArrayBlockQueue
  5. gdbstub中的基本命令_程序员应该知道的 20 个 Linux 系统管理命令
  6. ASP.NET MVC Links
  7. 如何调用npm已经安装在全局位置的模块
  8. Flutter从零到∞学习笔记
  9. 文本去重算法:Minhash/Simhash/Klongsent
  10. 碧桂园博智林机器人总部大楼_碧桂园11.4亿元竞得北滘坤洲地块,近博智林机器人谷...
  11. 携手业内专家赋能AI时代--EpiK铭识协议发起开源知识运动
  12. python学习-day9内置函数(高阶)
  13. 92款超级漂亮的css按钮样式 复制即用
  14. THREADED_EXECUTION
  15. 小波变换之尺度函数和小波函数
  16. FFmpeg三大工具--ffplay
  17. win10下如何使用debug
  18. 腾讯校园招聘会笔试题 难题解析
  19. springboot动态多数据源配置和使用(二)
  20. iTest(APP性能测试:CPU、Mem、网络等)使用方法

热门文章

  1. 计算机专业会议评级,2018计算机专业工程教育认证研讨会
  2. java用链表做学生系统_C语言链表实现学生管理系统
  3. IDEA启动Tomcat AJP连接器配置secretRequired=“true“,但是属性secret确实空或者空字符串,这样的组合是无效的解决办法
  4. java1.5以后新增的特性_jdk1.5之后的一些新特性
  5. PHP获取服务器端的相关信息
  6. Struts1.x和Struts2.0的Action的区别
  7. 工业炉温度计算机控制系统,热处理工业炉计算机控制系统组态王+PLC)
  8. 循环斐波那契数列_第五课:斐波那契数列(第一课时)
  9. python回归分析实验_python线性回归实验
  10. www.python123.org_python爬虫-requests