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.sq
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值