關於tomcat連接池的配置我在自己開始的時候碰到過許多的問題至少失敗過六次今天終於成功了對於這個問題的產生與由來我也給大伙說說
在《程序員csdn開發高手》這本雜志的年第期一位名叫宋廷宇的老師寫了一篇文章名赤《tomcat連接池的圖形化配置與使用》我看到了這篇文章該作者所使用的數據庫是sql server而我所使用的數據庫是mysqltomcat版本為 文中有這麼一段話在tomcat 及後續版本中提供了圖形界面的web應用發布工具但是使用這個工具發布采用數據庫連接池的web應用時自動生成的配置不能找到數據源這是一個bug相信在後續的版本中所有關於數據庫連接池的配置和發布都不需要在手工修改配置文件而使用簡單方便的全圖形化工具當時我個人認為我所使用的tomcat 版的bug應該修正了吧況且數據庫配置嘛換湯不換藥原理應該是一樣的但是我嚴格按照這篇文章上來配置結果事與願為配置成功運行後出錯了附錯誤如下
orgapachecommonsdbcpSQLNestedException: Cannot create JDBC driver of class
for connect URL null cause: No suitable driver
相信學過jsp連接數據庫的人都有常識那就是將驅動加入CLASSPATH排除錯誤驅動沒問題迷惑中於是乎檢查重來再檢查再重來錯誤不變
既然圖形下配置錯誤那麼我手動配置上網搜索最權威的當然就是tomcat的doc剛好文檔中有一篇講如何配置mysql數據庫連接池的(全英文的幸好我英語過得去)一步一步嚴格按照它的格式來配置當我看到同樣的錯誤時猶如晴天劈雳一個字暈!!!差點放棄(如果放棄了就不會有我今天這篇文章了好險呀!!!)
因此我認為tomcat有問題這個錯誤很多人都見過在csdn及本論壇上有許多人問到這樣的問題為這問題我還在國外的論壇上搜索了也有人問到這樣的問題他們說這是tomcat的一個bug於是我就默認了後來想想不對如果是bug的話jarkata項目組織肯定會貼出來並且修正這個bug的
我就下載了最新版本的tomcat( )再次試驗首先是按照書上的文章進行圖形化配置結果依然心裡想bug肯定修正且我與作者的步驟一樣問題休在???沉著冷靜下來再次看看tomcat的文檔又回想起宋廷宇老師的文章中那段話莫非真的是圖形配置中的bug
http://jakartaapacheorg/tomcat/tomcatdoc/jndidatasourceexampleshowtohtml
好就來手工配置吧於是又打開tomcat的doc開始了手工配置配置之前建議大家對serverxml文件做一個備份原因就不講了
打開serverxml文件在哪??暈!!打開tomcat$\conf文件夾(tomcat$指的是tomcat的安裝目錄下皆同)至於數據庫的建立我就不說了自己按照文章去做吧說明一下盡管我不說我還是按照文章上來做的你們照葫蘆畫瓢即可
首先將那段
<Context path=/DBTest docBase=DBTest
debug= reloadable=true crossContext=true>
<!—注意到這裡的DBTest了吧這就是要求大家建立DBTest目錄的原因>
<Logger className=orgapachecatalinaloggerFileLogger
prefix=localhost_DBTest_log suffix=txt
timestamp=true/>
<Resource name=jdbc/TestDB
auth=Container
type=javaxsqlDataSource/>
<ResourceParams name=jdbc/TestDB>
<parameter>
<name>factory</name>
<value>orgapachecommonsdbcpBasicDataSourceFactory</value>
</parameter>
<! Maximum number of dB connections in pool Make sure you
configure your mysqld max_connections large enough to handle
all of your db connections Set to for no limit
>
<parameter>
<name>maxActive</name>
<value></value>
</parameter>
<! Maximum number of idle dB connections to retain in pool
Set to for no limit
>
<parameter>
<name>maxIdle</name>
<value></value>
</parameter>
<! Maximum time to wait for a dB connection to become available
in ms in this example seconds An Exception is thrown if
this timeout is exceeded Set to to wait indefinitely
>
<parameter>
<name>maxWait</name>
<value></value>
</parameter>
<! MySQL dB username and password for dB connections >
<parameter>
<name>username</name>
<value>javauser</value>
<!—數據庫用戶名>
</parameter>
<parameter>
<name>password</name>
<value>javadude</value>
<!—數據庫密碼>
</parameter>
<! Class name for the old mmmysql JDBC driver uncomment this entry and comment next
if you want to use this driver we recommend using Connector/J though
<parameter>
<name>driverClassName</name>
<value>orggjtmmmysqlDriver</value>
</parameter>
這裡面是被注釋的因為以前連接mysql是這樣連接的現在建議用下面的方法自己可以看到
>
<! Class name for the official MySQL Connector/J driver >
<parameter>
<name>driverClassName</name>
<value>commysqljdbcDriver</value>
</parameter>
<! The JDBC connection url for connecting to your MySQL dB
The autoReconnect=true argument to the url makes sure that the
mmmysql JDBC Driver will automatically reconnect if mysqld closed the
connection mysqld by default closes idle connections after hours
>
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost:/javatest?autoReconnect=true</value>
<!這是數據庫的地址也可以不要這麼繁瑣改為
jdbc:mysql://localhost/javatest即可javatest為數據庫名>
</parameter>
</ResourceParams>
</Context>
貼在這了別嫌長啊我加了注釋至於我們貼到什麼位置在</Host>前面找到相對應的位置由於我的serverxml文件未備份所以我無法再次將所貼位置告訴大家了不好意思有事給我發過來我一定還記得的到時再手把手教你們
在tomcat$\webapps文件夾下建立一個名為DBTest的文件夾注意大小寫在此文件夾下建立WEBINF文件夾及一個文件:testjsp再在WEBINF文件夾下建立兩個文件夾lib及classes將數據庫驅動文件拷貝到lib文件夾下同樣還在WEBINF文件夾下建一個文件webxml看到doc上有現成的要不要拷貝呀這就有個問題doc有個問題有空給它們寫封信吧這也是我經過實現才發現的
<?xml version= encoding=ISO?>
<webapp xmlns=http://javasuncom/xml/ns/jee
xmlns:xsi=http://wwwworg//XMLSchemainstance
xsi:schemaLocation=http://javasuncom/xml/ns/jee
http://javasuncom/xml/ns/jee/webapp__xsd version=>
<description>MySQL Test App</description>
<resourceref>
<description>DB Connection</description>
<resrefname>jdbc/TestDB</resrefname>
<restype>javaxsqlDataSource</restype>
<resauth>Container</resauth>
</resourceref>
</webapp>
用我的沒錯的
Testjsp
<%@ page contentType=text/html; charset=GBK%>
<%@ page import=javasql*javaxsqlDataSourcejavaxnaming*%>
<html>
<head><title>testjsp</title></head>
<body bgcolor=#ffffff>
<h>test Tomcat</h>
<%
try
{
Context initCtx=new InitialContext();
DataSource ds = (DataSource)initCtxlookup(java:comp/env/jdbc/TestDB);
Connection conn=dsgetConnection();
outprintln(data from database:<br>);
Statement stmt=conncreateStatement();
ResultSet rs =stmtexecuteQuery(select id foo bar from testdata);
while(rsnext())
{
outprintln(rsgetInt(id));
outprintln(rsgetString(foo));
outprintln(rsgetString(bar));
}
rsclose();
stmtclose();
}
catch(Exception e)
{
eprintStackTrace();
}
%>
</body>
</html>
doc上的testjsp是使用了tag 我認為沒必要大家反而看不懂並且它沒有關閉connection及statement個人認為存在不安全因素因此我自己也改過來了
接下來的事情嘛自己測試測試前要將mysql打開常識性的錯誤別犯了
啟動tomcat至http://localhost:/DBTest/testjsp在我的界面上是
test Tomcat
data from database:
hello
From:http://tw.wingwit.com/Article/program/MySQL/201311/29662.html