在网上再三查找,并经过反复试验后,总算是把它配置好了,发现如下几个问题:
1。 Tomcat 5.5.17 的Admin功能很不完善,在JNDI的配置上存在BUG,无法把非全局的DataSource 或ResourceLinks写入%TOMCAT_HOME%/conf/Catalina/localhost/<webname>.xml中;只能手工进行;
2. CLASSPATH配置可能也有问题,Driver包必须放在%TOMCAT_HOME%\common\lib下才能被找到,%TOMCAT_HOME%/shared/lib下不行,甚至在<webname>/WEB-INF/lib下也不能被找到,应该是这个版本的问题,记得以前至少在应用下是能找到的;
总结一下,主要是三个地方要配置:
a. %TOMCAT_HOME%/conf/ 下配置DataSource: 配置server.xml 或 localhost/<webname>.xml
其中server.xml下配置DataSource则可供所有WEB应用使用,
需要在<GlobalNamingResources> 下加上<Resource>项,这个通过Admin页面也可以完成;然后给需要用到的应用中加上<ResourceLink>即可,但只能手工进行
<ResourceLink name="jdbc/<jndiname>" global="jdbc/<jndiname>" type="javax.sql.DataSource"/>, 放在<Context>下;
如果只想给某个程序用,不想配置Server.xml的话,可以只在localhost/<webname>.xml中加上<Resource>,把<Resource>加到<Context>下
<Resource
auth="Container"
description="DB Connection"
name="jdbc/<jndiname>"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
password="<pass>"
maxIdle="2"
maxWait="5000"
username="<user>"
url="jdbc:mysql://localhost/<dbname>"
maxActive="4"/>
b. 在应用的web.xml中配置<resource-ref>
<resource-ref>
<description>EMCenter Database for WEB Applications</description>
<res-ref-name>jdbc/<jndiname></res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
c. 把driver包拷贝到%TOMCAT_HOME%/common/lib/下,应该是最简配置了,有兴趣的可以继续试验,留意看logs/目录下的日志记录能加快进程。其实Admin要是能改进一下最好了,这样太麻烦
另: 有些不解的是,我用的sqltags包(jstl.jar,standard.jar)放在WEB-INF/lib下却能被找到,测试代码如下:
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@ taglib uri="
http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<%@ taglib uri="
http://java.sun.com/jsp/jstl/core" prefix="c" %>
<sql:query var="rs" dataSource="jdbc/<jndiname>">
select * from <tablename>
</sql:query>
<html>
<head>
<title>DB Test</title>
</head>
<body>
<h2>Results</h2>
<c:forEach var="row" items="${rs.rows}">
ID ${row.id}<br/>
name ${row.name}<br/>
</c:forEach>
</body>
</html>