在網上再三查找,并經過反復試驗后,總算是把它配置好了,發現如下幾個問題:
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>