标题: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日夜 于石市
分享到:
相关推荐
一个简单的通过Tomcat连接池访问mysql数据库的jsp程序例子。
这是一个很简易并且很干净的tomcat连接池示例,在该示例中有详细的说明,最为重要的是它只突出表现tomcat和链接池的技术,剥离了其他繁琐的技术,所以很适合对初学连接池的读者,和像我一样当年花了好长时间配了好久...
struts2示例(包括tomcat连接池)struts2示例(包括tomcat连接池)struts2示例(包括tomcat连接池)
NULL 博文链接:https://hylong05.iteye.com/blog/560654
数据库连接池的使用范例,还要修改tomcat下的config文件
c3p0数据库连接池技术实例,包括了c3p0的jar包等,直接导入到eclipse或者myeclipse的工作空间后即可在Tomcat里运行
博文链接:https://qmug.iteye.com/blog/222540
本文为大家介绍下在Tomcat服务器下使用连接池来连接数据库的操作,下面有个不错的示例,大家可以参考下
此外,还涵盖了Tomcat的高级配置,如虚拟主机、连接池、性能监控和安全配置,以及如何部署企业级应用程序。 适用人群 本博客适合对Web开发和部署感兴趣的初学者。无论是编程新手,还是已经有一定编程基础的读者,都...
tomcat的版本4和版本5 2 章节简介 2 第1章 一个简单的Web服务器 3 1.1 The Hypertext Transfer Protocol (HTTP) 3 1.2 HTTP Request 3 1.3 HTTP Response 4 1.4 Socket类 4 1.5 ServerSocket类 5 1.6 应用举例 5 第2...
MySQL5.1.36,tomcat5.0.28 利用struts1.2,JSTL标签库,通过JDBC连接池实现对数据库表(test.userinfo)增删改查的完整示例. 未用Eclipse或MyEclipse,几乎纯手工实现,含所需库文件. 欢迎大家下载部署,学习. 2009-12-15
tomcat的版本4和版本5 2 章节简介 2 第1章 一个简单的Web服务器 3 1.1 The Hypertext Transfer Protocol (HTTP) 3 1.2 HTTP Request 3 1.3 HTTP Response 4 1.4 Socket类 4 1.5 ServerSocket类 5 1.6 应用举例 5 第2...
8.4 jdbc数据源和连接池 299 8.5 mysql对中文的处理 302 8.6 小结 302 第9章 会话跟踪 303 9.1 用于会话跟踪的技术 303 9.1.1 ssl会话 304 9.1.2 cookies 304 9.1.3 url重写 305 9.2 java servlet api的会话...
它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...
14-8 JNDI - 数据来源(Data Source) 与连接池(Connection Pool) 14-9 JSTL 的 SQL 标签库 14-10 Connection Pool - Proxool 第十五章 JSP Tag Library 15-1 JSP Tag Library 简介 15-2 一个简单的 Tag Library 范例...
8.4 jdbc数据源和连接池 299 8.5 mysql对中文的处理 302 8.6 小结 302 第9章 会话跟踪 303 9.1 用于会话跟踪的技术 303 9.1.1 ssl会话 304 9.1.2 cookies 304 9.1.3 url重写 305 9.2 java servlet api的会话...
2. 使用了DataSource连接池技术 3. 使用AJAX技术增强用户体验 4. 使用Filter实现认证控制 5. 使用HIVE技术开发根据用户的已购票项而生成的猜你喜欢电影项的推荐 # 环境配置 # 1. 安装JDK和Tomcat 2. 配置环境变量 3....
8.4 jdbc数据源和连接池 299 8.5 mysql对中文的处理 302 8.6 小结 302 第9章 会话跟踪 303 9.1 用于会话跟踪的技术 303 9.1.1 ssl会话 304 9.1.2 cookies 304 9.1.3 url重写 305 9.2 java servlet api的会话...
12.2.2 HttpClient连接池源码分析 240 12.2.3 HttpClient 4.2.3配置 241 12.2.4 问题示例 243 12.3 线程池 244 12.3.1 Java线程池 245 12.3.2 Tomcat线程池配置 248 13 异步并发实战 250 13.1 同步阻塞调用 251 13.2...
8.4 jdbc数据源和连接池 299 8.5 mysql对中文的处理 302 8.6 小结 302 第9章 会话跟踪 303 9.1 用于会话跟踪的技术 303 9.1.1 ssl会话 304 9.1.2 cookies 304 9.1.3 url重写 305 9.2 java servlet api的会话...