在網(wǎng)上再三查找,并經(jīng)過反復(fù)試驗(yàn)后,總算是把它配置好了,發(fā)現(xiàn)如下幾個(gè)問題:
1。 Tomcat 5.5.17 的Admin功能很不完善,在JNDI的配置上存在BUG,無(wú)法把非全局的DataSource 或ResourceLinks寫入%TOMCAT_HOME%/conf/Catalina/localhost/<webname>.xml中;只能手工進(jìn)行;
2. CLASSPATH配置可能也有問題,Driver包必須放在%TOMCAT_HOME%\common\lib下才能被找到,%TOMCAT_HOME%/shared/lib下不行,甚至在<webname>/WEB-INF/lib下也不能被找到,應(yīng)該是這個(gè)版本的問題,記得以前至少在應(yīng)用下是能找到的;
總結(jié)一下,主要是三個(gè)地方要配置:
a. %TOMCAT_HOME%/conf/ 下配置DataSource: 配置server.xml 或 localhost/<webname>.xml
其中server.xml下配置DataSource則可供所有WEB應(yīng)用使用,
需要在<GlobalNamingResources> 下加上<Resource>項(xiàng),這個(gè)通過Admin頁(yè)面也可以完成;然后給需要用到的應(yīng)用中加上<ResourceLink>即可,但只能手工進(jìn)行
<ResourceLink name="jdbc/<jndiname>" global="jdbc/<jndiname>" type="javax.sql.DataSource"/>, 放在<Context>下;
如果只想給某個(gè)程序用,不想配置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. 在應(yīng)用的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/下,應(yīng)該是最簡(jiǎn)配置了,有興趣的可以繼續(xù)試驗(yàn),留意看logs/目錄下的日志記錄能加快進(jìn)程。其實(shí)Admin要是能改進(jìn)一下最好了,這樣太麻煩
另: 有些不解的是,我用的sqltags包(jstl.jar,standard.jar)放在WEB-INF/lib下卻能被找到,測(cè)試代碼如下:
<%@ 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>