您的位置:首页 > 运维架构 > Tomcat

Tomcat5.0与SqlServer2000配置连接池(jtds驱动)

2004-10-09 21:49 423 查看
软件:
(1)tomcat5.0
http://apache.linuxforum.net/dist/j...mcat-5.0.25.exe
(2)jtds.jar
http://jtds.sourceforge.net/

(3)jdk1.4
(4)Sqlserver2000(windows2003系统需要sp3补丁)

设置环境变量
(1)CATALINA_HOME
tomcat的安装路径,如:E:/Tomcat5.0
(2)CATALINA_BASE
tomcat的安装路径,如:E:/Tomcat5.0
(3)JAVA_HOME
jdk安装路径,如:E:/Program Files/j2sdk1.4.2
(4)PATH
%JAVA_HOME%/bin
(5)class_path
.;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar;%CATALINA_HOME%/common/lib/servlet-api.jar(前面的.和;不能少)

将jtds.jar放在正确的目录
只能放在%CATALINA_HOME%/common/lib/目录下

修改server.xml文件
改文件位于:;%CATALINA_HOME%/conf/server.xml

在<host>与</host>之间,修改后的内容为:
<Context path="/tiannet" docBase="E:/tiannet"
debug="5" reloadable="true" crossContext="true">

<Logger className="org.apache.catalina.logger.FileLogger"
directory="logs" prefix="localhost_log." suffix=".txt"
timestamp="true"/>

<Resource name="jdbc/connectDB"
auth="Container"
type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/connectDB">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>

<parameter>
<name>removeAbandoned</name>
<value>true</value>
</parameter>
<parameter>
<name>removeAbandonedTimeout</name>
<value>60</value>
</parameter>
<parameter>
<name>logAbandoned</name>
<value>false</value>
</parameter>

<parameter>
<name>maxActive</name>
<value>100</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>
<parameter>
<name>username</name>
<value>sa</value>
</parameter>
<parameter>
<name>password</name>
<value>123</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>net.sourceforge.jtds.jdbc.Driver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:jtds:sqlserver://127.0.0.1:1433/tiannet;charset=gb2312</value>
</parameter>
</ResourceParams>
</Context>

参数说明
1) path 指定路径,也就是访问web的路径,这里为http://localhost:8080/tiannet
2) docBase 虚拟目录的路径,绝对路径。如果虚拟目录设置%CATALINA_HOME%/webapps目录的某个子目录下(如tiannet),则可直接写子目录名称(如tiannet)。
3) reloader 当网页被更新时是否重新编译。
4) maxActive 连接池的最大数据库连接数。设为0表示无限制。
5) maxIdle 数据库连接的最大空闲时间。超过此空闲时间,数据库连接将被标记为不可用,然后被释放。设为0表示无限制。
6) maxWait 最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
7) removeAbandoned 回收被遗弃的(一般是忘了释放的)数据库连接到连接池中。
8) removeAbandonedTimeout 数据库连接过多长时间不用将被视为被遗弃而收回连接池中。
9) logAbandoned 将被遗弃的数据库连接的回收记入日志。
10) driverClassName JDBC驱动程序。
11)username : 连接数据库的用户名
12)password : 连接数据库的密码
13) url 格式化数据库连接字符串(这里的tiannet为数据库名),格式为:

jdbc:jtds:<server_type>://<server>[:<port>][/<database>][;<property>=<value>[;...]]

更多url的说明请参照:
http://jtds.sourceforge.net/faq.html

将上面的内容修改保存,并重新启动tomcat后,在%CATALINA_HOME%/conf/Catalina/localhost/目录下会多出一个xml文件,这里为:tiannet.xml。现在虚拟目录就生效了。

修改/WEB-INF/web.xml文件
在虚拟目录的根目录(这里为:E:/tiannet)下建立WEB-INF目录,在WEB-INF目录下新建一个web.xml文件,基本内容为:

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app>
<display-name>tiannet web</display-name>
<description>connectDB test</description>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/connectDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

注意<res-ref-name>jdbc/connectDB</res-ref-name>的jdbc/connectDB和server.xml文件中的Resource的name属性以及ResourceParams的name属性值是一样的。

测试连接池的代码

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

<html>
<body>
<%
DataSource ds = null;
Connection conn = null;
ResultSet rs = null;
Statement stmt = null;
InitialContext ctx = null;
String m_strDriver = "net.sourceforge.jtds.jdbc.Driver", // 驱动字符串
m_strConURL = "jdbc:jtds:sqlserver"; // 连接字符串
try
{
ctx=new InitialContext();
ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB"); //注意connectDB的名称和上面一致
conn = ds.getConnection();
stmt = conn.createStatement();

String strSql = " select * from test"; //test为数据库中的一个表
rs = stmt.executeQuery(strSql);
while(rs.next())
{
out.println(rs.getString(1) + "");
out.println(rs.getString(2) + "");
}
}
catch(Exception ex)
{
out.println(ex.getMessage());
}
finally
{
rs.close();
stmt.close();
conn.close();
ctx.close();
}
%>
</body>
</html>

到这里所有的配置就结束了。
由于首次使用tomcat和jtds,所以花了比较多的时间。
其间遇到一个错误:

Can't open a socket on localhost:1433. Check host and port number and make sure the security

manager allows this connection. You can also try running the SocketApplet

(java.net.ConnectException: Connection refused: connect).

这个错误是因为windows2003server系统没有打上sp3的补丁,奇怪的是.net连接sqlserver2000不需要打补丁。

也可能会遇到这样的错误:

No suitable driver

这多半是连接字符串的格式不正确造成的。

最让我头疼的错误还是:
Cannot create JDBC driver of class '' for connect URL 'null'

我出现这个错误的原因是因为:在server.xml中设置docBase的值,也就是虚拟目录的名称(测试时用的DBTest),其大小写与建的虚拟目录名称大小写不一致(当时为DBtest)。

配置好这些东西后,登陆进tomcat的管理页面,点击commit changes按钮,你会发现server.xml文件发生了改变,那些修改的内容已经全部没了。而这些内容已经全部被移到%CATALINA_HOME%/conf/Catalina/localhost/下相应的xml文件中了(这里为tiannet.xml)。
其实在admin的界面也可以建立虚拟目录、配置连接池等。不需要手动修改server.xml 文件,配置好一切东西后,其连接池的配置信息会自动放置在%CATALINA_HOME%/conf/Catalina/localhost/的xml文件中。
但是我在这样做后,测试时遇到一个异常:
Name java:comp is not bound in this Context
到现在依然没有找到解决办法。

PS:
如果xml里有中文,则需将encoding设置为gb2312
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: