求救,还是连接池。

jt80 2004-08-03 08:46:37
我照着如下方法做了:

Tomcat4的数据库连接池配置
Add by: FanyHan
本文主要介绍Tomcat4.1.19这两个版本下数据库连接池的配置,及程序对连接池的JNDI查找,并提供相应

测试代码。最后指出配置及应用过程中的常见问题及解决方法。
一、 Tomcat简介
Tomcat是Apache Jakarta的子项目之一,是Sun公司推荐的JSP、Servlet容器。作为一款优秀的应用服务

器,Tomcat提供了数据库连接池、SSL、Proxy等许多通用组件功能,其中连接池是4.0以上版本的新增功

能,应用非常广泛。
二、 该文配置环境
Tomcat4.1.19 + jdk1.3 + Sql Server 2000 + Jbuilder 8.0 + Win2000
三、 对Tomcat4.1.19的DBCP配置
为方便起见,将连接池置于ROOT下,JNDI名设为jdbc/SqlServerDB,数据库服务器IP为

192.168.0.47,SID为hrntest,配置步骤如下。
第一步:配置server.xml
在server.xml中找到
<!-- Tomcat Root Context -->
<!—
<Context path="" docBase="ROOT" debug="0"/>
-->

将其改为
<!-- Tomcat Root Context -->

<Context path="" docBase="ROOT" debug="0" reloadable="true">
<Resource name="jdbc/SqlServerDB" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/SqlServerDB">
<parameter>
<name>factory</name>

<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>driverClassName</name>

<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</parameter>
<parameter>
<name>url</name> <value>jdbc:microsoft:sqlserver://192.168.0.47:1433;databa

seName=hrntest</value>
</parameter>
<parameter>
<name>username</name>
<value>Fany</value>
</parameter>
<parameter>
<name>password</name>
<value>fanyhan</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>20</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>-1</value>
</parameter>
</ResourceParams>
</Context>


参数说明:
Resource项:
<Resource name="jdbc/SqlServerDB" auth="Container" type="javax.sql.DataSource"/>

Resource项(即连接池的DataSource对象),有3个属性name、auth、type,name项是JNDI的名称定义,

程序通过JNDI才能找到此对象,这里取名jdbc/SqlServerDB;auth项即连接池管理权属性,这里取值

Container,申明为容器管理;type项即对象的类型,这里取值javax.sql.DataSource,申明为数据库连

接池。
在接下来的<ResourceParams>域内容里包含四个参数user、password、driverClassName、driverName,

依次为数据库的用户名、密码、JDBC驱动和数据库地址。
factory参数:
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>

即基础对象工厂,这里取值org.apache.commons.dbcp.BasicDataSourceFactory,即DBCP自带的工厂,也

可以用别的。
DriverClassName参数:
<parameter>
<name>driverClassName</name>
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</parameter>


即数据库的JDBC驱动名称,具体值为:
     Sql Server 2000: com.microsoft.jdbc.sqlserver.SQLServerDriver
首先要下载安装sqlserver-jdbc-驱动,然后将其lib下的三个jar文件放到

tomcat/common/lib下。
MySql:     org.gjt.mm.mysql.Driver
MySql的JDBC驱动包mm.mysql-2.0.14.jar。
     Oracle8.1.7: oracle.jdbc.driver.OracleDriver
Oracle8.1.7的JDBC驱动包名叫classes.jar,一般位于Oracle安装目录下的

ora81\jdbc\lib目录下,初始扩展名为ZIP,需要手工把classes.zip改名为classes.jar,并放到

tomcat/common/lib下。oracle.jdbc.driver.OracleDriver此类由classes.jar提供。
  url参数:
<parameter>
<name>url</name>

<value>jdbc:microsoft:sqlserver://192.168.0.47:1433;
databaseName=hrntest</value>
</parameter>



即数据库的地址。(不同的数据库其地址都不相同)
Sql Server 2000:
jdbc:microsoft:sqlserver://192.168.0.47:1433;databaseName=hrntest
Oracle8.1.7:jdbc:oracle:thin:@192.168.0.47:1521: hrntest
Username参数:

<parameter>
<name>username</name>
<value>Fany</value>
</parameter>



即连接数据库的用户名。
<parameter>
<name>password</name>
<value>fanyhan</value>
</parameter>

password参数:

即连接数据库的密码。
maxActive、maxIdle和maxWait参数:
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>20</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>-1</value>
</parameter>




maxActive是最大激活连接数,这里取值为20,表示同时最多有20个数据库连 
 接。maxIdle是最大的空闲连接数,这里取值为20,表示即使没有数据库连接时依然可以保持20空闲的

连接,而不被清除,随时处于待命状态。MaxWait是最大等待秒钟数,这里取值-1,表示无限等待,直到

超时为止,也可取值9000,表示9秒后超时。
第二步:配置web.xml
打开webapps/ROOT/WEB-INF下web.xml,加入如下内容:
<resource-ref>
<description>SqlServer Datasource example</description>
<res-ref-name>jdbc/SqlServerDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>


第三部:配置tomcat(添加类)
将Microsoft SQL Server 2000 Driver for JDBC\lib目录下的三个jar文件拷贝到Tomcat安装目录的

common\lib下。
 配置完成

四、 测试代码
数据库如下:
    Create table test(id varchar(12),name varchar(30))
方法1:写一个jsp文件(testdb.jsp),将其置于webapps/ROOT目录下,打开tomcat运行该页面进行测

试。

页面testdb.jsp的内容如下:

<%@ page contentType="text/html;charset=GBK"%>
<%@ page import= "java.sql.* "%>
<%@ page import= "javax.naming.* "%>

<%
try{
Context initCtx = new InitialContext();
Context ctx = (Context) initCtx.lookup("java:comp/env");
//获取连接池对象
Object obj = (Object) ctx.lookup("jdbc/SqlServerDB");
//类型转换
javax.sql.DataSource ds = (javax.sql.DataSource)obj;
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
String strSql = " insert into test(id,name) values('00001','fany')";
stmt.executeUpdate(strSql);
strSql = " select id,name from test ";
ResultSet rs = stmt.executeQuery(strSql);
if(rs.next()){
out.println(rs.getString(1));
out.println(rs.getString(2));
}
}catch(Exception ex){
ex.printStackTrace();
throw new SQLException("cannot get Connection pool.");
}
%>

运行时报错:
type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: cannot get Connection pool.
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
org.apache.jsp.test_jsp._jspService(test_jsp.java:78)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause

java.sql.SQLException: cannot get Connection pool.
org.apache.jsp.test_jsp._jspService(test_jsp.java:68)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


note The full stack trace of the root cause is available in the Apache Tomcat/5.0.27 logs.

大家帮忙看看。
...全文
188 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jt80 2004-08-04
  • 打赏
  • 举报
回复
哪位高手快帮帮我啊,给个详细点例子啊
从配置到实际应用的例子,详细点啊,我快崩溃了啊啊!
55555555555555555555555555555555
jt80 2004-08-04
  • 打赏
  • 举报
回复
怎么有问题啊?
chunqiangsun 2004-08-04
  • 打赏
  • 举报
回复
应该是你的驱动有问题
jt80 2004-08-04
  • 打赏
  • 举报
回复
继续关注!
loveunittesting 2004-08-04
  • 打赏
  • 举报
回复
我以前也用过tomcat的数据源,就是按照tomat5.0的文档配置的,粗略看了一下这个文档,应该没什么问题。不过还是建议你参考tomcat的文档。
首先,确定用这个url和驱动肯定能用,或者换一个驱动,比如odbc的看看。我感觉和驱动程序有关系
jt80 2004-08-04
  • 打赏
  • 举报
回复
自己顶一下,关注中!
jt80 2004-08-04
  • 打赏
  • 举报
回复
楼上的,tomcat5的文档哪有下载?提供一个url啊。谢谢!
felix1999 2004-08-04
  • 打赏
  • 举报
回复
前几天我用连接池也没有成功,今天照着tomcat的文档试了一下,居然成功了,你看文档吧,里面有例子,其中有一个MySql的例子,就把相关的驱动和url改一下就行了
jt80 2004-08-04
  • 打赏
  • 举报
回复
给点实际的东西啊,555555555555555555
lodestar51 2004-08-04
  • 打赏
  • 举报
回复
对连接池不懂,。。。。
学习。。。
2020网络安全教育心得   网络是一把双刃剑,对于我们青少年健康成长既有有利的一面,也有不利于我们的 一面,我们一定要利用它好的一面,让它帮我们学习,帮我们走向成功。接下来小编在 这里给大家带来网络安全教育心得,希望对你有所帮助!   网络安全教育心得1   不可否认,网络是把双刃剑。在当今社会,网络安全不得不引起了很多人的重视。 网络对当今社会的影响还是很大的。网络究竟是利大于弊,还是弊大于利呢?这是一个引 人深思的问题。   首先,网络确实为人们带来了许多的便利。人们跨越不出门但却跨越知天下大小事 。还可以在网上购物、网上聊天、听歌等等。由于网络的发达,一个个棘手的问题接踵 而来。例如有一些人因沉迷于网络而无法自拔。在现实社会中,青少年狙猝死宇网吧的 案例数不甚数,它引起了人们对网络安全的高度重视。   但不得不说,计算机是一项伟大的发明,因为在网上几乎能查到自己想找的资料。 但也由于它的发达,会死很多人在玩的时候兴奋过度而永远长眠于地下。所以说,网络 也是恐怖的。   网络安全成了很多人关心的问题,很多人发出由衷的疑问:"怎样使用网络才安全呢 ?"我认为:者何人的自制力有很大的关系。因为疲累过后适当的听一下歌曲可以使人放 松。但有的人却无节制的玩,这不仅不能起到效果,反而还会使人更加颓兽,这不违背 了自己最终的意愿了吗?   有些商家为了个人利益,发明出血腥场面的游戏,但却能吸引大批的青少年。他们 仅仅是为了寻求刺激。但这却使他们的身心健康受到了影响,心灵开始扭曲,放佛自己 身临其境,从而分不清虚实。所以说网络是虚构的也不够如此罢了。   我认为我们应该利用网络来学习知识,远离那些不堪入眼的资料。但在我们查阅资 料时常会弹出一些无聊的广告,这对我们的影响也是极大的,因为处于青春期的我们迷 茫,好奇。但这往往会使我们掉下悬崖。当这是,我们应该向老师、家长以及自己信任 的人求助。   不过网络也是精彩的,看的就是我们怎样去利它。例如,我们可以发邮件与异国的 人聊天,我们不用担心语言不通而无法聊天,因为网上有翻译软件的,这样我们还可以 学习异国文化。   但也有的人不务正业,在网上发许多不良信息来误导别人的思想。所以网络是把双 刃剑,可以成全一个人,但也可以毁掉一个人,看的就是我们怎样使用。   有很多人的网络安全意识弱,随便将自己的号码和地址给网上认识的陌生人,从而 让犯   罪分子有了犯罪的机会,殊不知,这给自己的安全带来隐患。   还有的人将别人的照片经过处理(丑化)发到网上去,这不仅犯了当事人的肖像权, 还打击别人的人格,但我们也可以通过网络找到这个人并去告他维护自己的利益。网络 各种各样的软件给我们带来方便,同时还带来了不利的影响。   网络安全还是具有很大的影响。我们应该重视网络安全方面的问题。应该查阅资料 ,让自己得到更好的保护。科技发展的好处,同时也带来了不为人知的坏处。网络安全 的影响对我们身心健康的发展很重要,我们应当重视。   让我们进一步探索网络安全的影响。创造跟美好、更文明的世界,使祖国更强大。   网络安全教育心得2   1月1日下午四点四十分我们观看安全教育影片,使我大为震撼。   在统计中得知每年由于车祸而死亡人数多得惊人,而且大多数都是中小学生。一名 叫钱红艳的小女孩因为车祸而失去了自己的双腿。她的爷爷让她下半身躲在篮球里,用 篮球来代替自己的双腿来走路,人们都叫她"篮球女孩"。她是多么可怜,因为车祸,把 她的自信心碾得粉碎,让她对生活失去了信心。我们应该遵记交通法规,不让悲剧重演 。   在夏天游泳是中小学生最喜爱的活动之一了。而溺水身亡人数等于每天一个个班级 里的一位学生不见。在游泳中我们不能在没有大人的看护下进行比赛,在遇到有人落水 时要呼喊大人来帮助,我们还要学会对溺水者进行抢救。只要学会做到这些要求,我们 就能在夏天游泳时有保障。   不给陌生人开门,也是我们所要牢记的。影片中的小主人公是聪明的,当自家停电 陌生人冒充修电工人时,他打给同学电话得知没有停电。又假装和爸爸打,说他马上回 家来下走陌生人。我们都应该学习小主人公,当陌生人来时从容镇定,不慌不忙地来应 付。   我们只要做到遵守交通法规,了解游泳常识,不随便给陌生人开门,我们一定可以 拥有安全,更好的来面对崭新的每一天。   网络安全教育心得3   9月18日至24日为第四届国家网络安全宣传周。9月18日当天,由东兰县委宣传部、 公安局、工信局、教育局、文广新体局等部门共同举办的东兰县2017年国家网络安全宣 传周活动正式开启。   今年网络安全宣传周的活动主题为"网络安全为人民,网络安全靠人民",我县通过 "线上线下"相结合的方式,将宣传周活动全面铺开。线上,通过开展"短信网络知识进万 家"、微信H5网络知识有奖问答、网

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧