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

标题: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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464609.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java并发编程实战阅读总结(a)

1、锁(lock)与volatile(1)、隐式锁&#xff0c;java提供了强制原子性的内置锁机制&#xff1a;synchronized块或synchronized方法。操作共享状态的复合操作必须是原子的&#xff0c;以避免竞态条件&#xff0c;比如读-改-写操作和检查再运行操作。复合操作会在完整的运行期占有…

我也确实很向往深圳这种拼搏的精神

今天跟个同学聊天&#xff0c;是关于他的offer选择&#xff0c;他拿了一个不错的外企岗位offer&#xff0c;这个offer的薪资是他现在薪资两倍还多一些&#xff0c;他现在人在外地&#xff0c;年后准备来深圳工作&#xff0c;他在微信说让我给些建议。首先我肯定的是&#xff0c…

VBA语法基础

数据类型 “数据类型”是指如何将数据存储在内存中。 (1)Boolean 表示逻辑数据&#xff0c;可以是True或False中的任一个值。占用2字节的存储空间&#xff0c;取值范围为True或False&#xff0c;缺省值为False。 (2)Byte 只能表示正数。占用1字节的存储空间&#xff0c;取值范围…

clamav Java_ClamAV安装使用及API例子

ClamAV是一款由Sourcefire组织开发的开源杀毒引擎&#xff0c;Sourcefire同时也是Snort入侵检测引擎的所有者。ClamAV提供了一种更为快速灵活的框架用以检测恶意代码和软件产品。可以作为现有的台式机、文件服务器、邮件服务器以及其他需要杀毒扫描软件场景中杀毒扫描软件的补充…

PHP json_encode后的数据有的大括号于中括号

当array是一个从0开始的连续数组时&#xff0c;json_encode出来的结果是一个由[]括起来的字符串。 而当array是不从0开始或者不连续的数组时&#xff0c;json_encode出来的结果是一个由{}括起来的key-value模式的字符串。转载于:https://www.cnblogs.com/xxllzizi/p/9836469.ht…

第一次使用 Blog

不喜欢BBS上不负责任的灌水&#xff0c;希望有一个记载自己日常心态和工作中所用到的有用技术的平台&#xff0c;作为自己以后的一个回顾&#xff0c;也与大家一同分享。很久就想拥有自己的Blog了&#xff0c;但这第一次使用 Blog &#xff0c;还是有点兴奋&#xff0c;Blog这个…

中科院开源 RISC-V 处理器“香山”流片,已成功运行 Linux

去年 6 月份&#xff0c;中科院大学教授、中科院计算所研究员包云岗&#xff0c;发布了开源高性能 RISC-V 处理器核心 —— 香山。近日&#xff0c;包云岗在社交平台晒出图片&#xff0c;香山芯片已流片&#xff0c;回片后进行了串口调通&#xff0c;1 月 24 日成功运行了 Linu…

java并发编程实战阅读总结(b)

5、Executor框架 Executor框架是并发集合java.util.concurrent中的一个成员。 Executor为灵活且强大的异步任务执行框架提供了基础&#xff0c;还提供了对生命周期的支持&#xff0c;以及统计信息、应用管理机制和性能监视等机制。Executor 最早是为了解决生产者-消费者模式而…

公司那些事-关于领导

首先,请允许我将范围限定一下,本文中的领导,并不是指那些了不起的大人物,而是说IT企业中的,我们身边的组长,经理,部长等等,之所以这么限定,原因非常简单,本人只接触过这个层面的领导. 领导也是普通人在我们中间,经常有意无意的对领导提出一些比较高的要求,比如领导应该是技术专…

java io流操作_十个Demo进行讲解Java中IO流的常用操作~

好久不见的IO流对IO流的学习&#xff0c;我记得还是初学Java基础的时候&#xff0c;后来找工作过程中经常看到有些招聘信息中写到熟悉IO流&#xff0c;现在想想IO流&#xff0c;真的是一脸懵逼&#xff0c;不说这么多废话了&#xff0c;IO流这次好好整理一下。说说IO流的类别在…

这些应用仍未兼容安卓新版本,系统升级后将无法使用

8月7日&#xff0c;谷歌正式发布Android 9 Pie&#xff0c;至今已两月有余。近日&#xff0c;华为终端开放实验室对国内主流应用在Android 9 Pie的兼容性进行测试&#xff0c;结果显示&#xff1a;目前TOP3000应用兼容率已经超过95%&#xff0c;但仍有少量应用存在启动失败、闪…

非常郁闷,WinForm中正常显示的自定义控件无法在WebForm中正常显示!

我写了一个自定义控件(Win Control)&#xff0c;此控件在WinForm中运行正常&#xff0c;但在WebForm中无法显示(在WebForm中此控件并不显示为红叉&#xff0c;但是一个对象图标)。由于没有出现权限或安全方面的提示&#xff0c;因此我从头开始一行一行进行比对&#xff0c;最终…

在家过年这两天|多图

这两天收到了很多朋友的新年祝福&#xff0c;在这里回应下&#xff0c;希望看到这篇文章的朋友们新的一年快乐开心&#xff0c;在求学的人学有所成&#xff0c;在工作的朋友们功成名就&#xff0c;家人健康&#xff0c;吃喝不愁……祝你们㏠㏡㏢㏣㏤㏥㏦㏧㏨㏩㏪㏫㏬㏭㏮㏯㏰㏱…

两路归并排序

两路归并排序&#xff08;升序排列&#xff09; (平均/最差)时间复杂度O(NlogN) 将两个有序的单链表合并为一个有序的单链表&#xff0c;默认是按升序排列的。 合并操作是非常适合用递归来完成的一类操作&#xff0c;递归实现将会比迭代实现更加清晰且易于理解。 尽管如此&…

Eclipse下的项目管理插件介绍

前言 最近,一直学习开源项目的代码,难免会碰到各种版本管理器,作为一名在校大学生,学校的课程完全没提及到,靠着自己的摸索,走了不少弯路,写个列表,望对大家有所帮助.顺便提一下,这里只说客户端,至于服务端,自行根据提供的资料学习 CVS 这里eclipse自带就有,也有一段历史,现在的…

算命

今天大年初三&#xff0c;出了太阳变暖很多&#xff0c;我们带着家里的小朋友一起上街吃早餐。因为明天要去阳西&#xff0c;决定去外婆家看看&#xff0c;在超时买了点东西&#xff0c;走回车上刚好看到路边有算命先生&#xff0c;我就想着来计算一下。我先是问了记算一次多少…

back log

1*你应该备份日志 BACKUP LOG 数据库名 TO DISKc:\aalogbak WITH INIT,NO_TRUNCATE 这样你的日志清空也备份了&#xff0c;日志也清空了&#xff0c;你可以压缩了 在维护日志备份序列时&#xff0c;调度 BACKUP LOG 语句按间隔发生&#xff0c;以使事务日志不致增长到超过预期的…

java loadlibrary_java – System.loadLibrary不起作用.链中的第二个lib的UnsatisfiedLinkError...

我有通过JNI使用cpp共享库libclient.so的java程序Client.class.libclient.so构建为共享并使用cpp共享库libhttp.so.libclient.so和libhttp.so放在文件夹/ home / client / lib64中Client.class放在/ home / client / bin中客户端可以加载库> System.load和环境变量LD_LIBRAR…

tcp的滑动窗口

今天阅读了TCP中滑动窗口部分的内容&#xff0c;总结如下&#xff1a; 滑动窗口&#xff1a;又叫缓冲区&#xff0c;是两台主机间传送数据时的缓冲区。每台TCP/IP主机支持两个滑动窗口&#xff1a;一个用于接收数据&#xff0c;另一个用于发送数据。 窗口尺寸表示计算机可能缓…

嵌入式行业那些坑与出路

嵌入式的坑烧钱嵌入式的学习十分烧钱&#xff0c;这就让人有点望而却步。我是做DSP起步的&#xff0c;更是能体会到嵌入式绝对是一个拿钱搭梯子的学习行业。在我的学习过程中身边有不少的人投向了CS行业&#xff0c;也就是纯软件开发&#xff0c;比如网页、手机应用、数据库等。…