1.安裝JDK1.4和jakarta-tomcat-4.1.27.exe。
??路徑分別為?D:\jdk1.4?和?D:\Tomcat?4.1。
??安裝Tomcat?4時,會要求填寫web訪問端口、用戶名、密碼等信息。
??web訪問端口默認為8080,用戶名默認為admin,密碼自己填寫。
??啟動Tomcat4,訪問
http://127.0.0.1:8080/?,就能看到Apache?Tomcat/4.1.27的歡迎訪問頁面,頁面上有一些相關介紹信息等。
2.設置數據庫的驅動
??以Oracle的JDBC驅動設置為例:
??oracle8i的驅動在\oracle\ora81\jdbc\lib\目錄下。名字為classes12.zip。
??oracle9i的驅動在\oracle9i\jdbc\lib\目錄下,名字為ojdbc14.jar。
??將這個文件copy到D:\Tomcat?4.1\common\lib?下。
??注意,如果使用Oracle8i?的驅動,則需要在D:\Tomcat?4.1\common\lib?目錄下將classes12.zip更名為classes12.jar,因為Tomcat4不認識zip的后綴名。
3.設置Web應用。
??新建一個文件夾,名字為mypool,位置為D:\mypool。這個D:\mypool路徑將是web應用的主目錄。
??打開D:\Tomcat?4.1\conf\server.xml?文件,找到如下行:
??
???<!--?Tomcat?Root?Context?-->
?????<!--
?????????<Context?path=""?docBase="ROOT"?debug="0"/>
?????-->
?
?
??在這下面,加入如下行:
??
??<Context?path="/mypool"?docBase="D:\mypool"?privileged="true"?reloadable="true"/>
??
??完成后,成為這個樣子:
????<!--?Tomcat?Root?Context?-->
?????<!--
??????????<Context?path=""?docBase="ROOT"?debug="0"/>
??????-->
????
?????<Context?path="/mypool"?docBase="D:\mypool"?privileged="true"?reloadable="true"/>
??保存D:\Tomcat?4.1\conf\server.xml?文件。
??配置完成后,重新啟動Tomcat,就可以這樣訪問這個web應用了:?
http://127.0.0.1:8080/mypool/?。
4.設置Tomcat的連接池數據源。
??訪問?
http://127.0.0.1:8080/admin?頁面,用剛才安裝?Tomcat4?時填寫的用戶名和密碼登錄。
??登錄成功后,會出現Tomcat?的web應用管理界面(Tomcat?Web?Server?Administration?Tool)。
??然后在左邊的目錄樹點擊“Data?Sources”項,右邊可以看到JNDI配置的頁面。
?
??在右上角的下拉框中選擇“Create?New?Data?Source”,接下來填寫配置信息:
??
??JNDI?Name:?jdbc/myOrcl??
??Data?Source?URL:?jdbc:oracle:thin:@192.168.6.40:1521:dbserver
??JDBC?Driver?Class:?oracle.jdbc.driver.OracleDriver
??User?Name:?myname
??Password:?mypassword
??Max.?Active?Connections:??可用默認值?
??Max.?Idle?Connections:????可用默認值
??Max.?Wait?for?Connection:?可用默認值
??Validation?Query:?可不填寫。
??然后,按下“save”按鈕保存。
??再按下“Commit?Changes”按鈕將配置更改提交完成。
??此時如果看看?Tomcat4?的窗口,會發現在最下面有一行文字提示:??
???Debugging?--?changes?saved?to?conf/server.xml
?
??此時?D:\Tomcat?4.1\conf\server.xml?文件的配置已經更改保存完畢。
??如果此時打開D:\Tomcat?4.1\conf\server.xml?文件,會發現server.xml?文件的內容改變了很多。
??一些注釋文字都被去掉了。
??還會發現上面第三步配置Web應用的如下文字
????
???<!--?Tomcat?Root?Context?-->
?????<!--
??????????<Context?path=""?docBase="ROOT"?debug="0"/>
??????-->
????
?????<Context?path="/mypool"?docBase="D:\mypool"?privileged="true"?reloadable="true"/>
??則被自動修改成了這樣的:
?????<Context?className="org.apache.catalina.core.StandardContext"?cachingAllowed="true"?charsetMapperClass="org.apache.catalina.util.CharsetMapper"?cookies="true"?crossContext="false"?debug="0"?docBase="D:\mypool"?mapperClass="org.apache.catalina.core.StandardContextMapper"?path="/mypool"?privileged="true"?reloadable="true"?swallowOutput="false"?useNaming="true"?wrapperClass="org.apache.catalina.core.StandardWrapper">
????????</Context>
????
???好了,至此位置,對Oracle的應用連接池已經配置完畢。
???
???仔細對照server.xml?文件,會發現剛才所配置的連接池信息被放置在<GlobalNamingResources>標簽中,這意味著這個信息是可以被全局引用的,大致是如下的樣子:
????<GlobalNamingResources>
????<Environment?name="simpleValue"?override="true"?type="java.lang.Integer"?value="30"/>
????<Resource?name="jdbc/myOrcl"?scope="Shareable"?type="javax.sql.DataSource"/>
????<Resource?auth="Container"?description="User?database?that?can?be?updated?and?saved"?name="UserDatabase"?scope="Shareable"?type="org.apache.catalina.UserDatabase"/>
????
????<ResourceParams?name="jdbc/myOrcl">
??????<parameter>
????????<name>maxWait</name>
????????<value>5000</value>
??????</parameter>
??????<parameter>
????????<name>maxActive</name>
????????<value>200</value>
??????</parameter>
??????<parameter>
????????<name>password</name>
????????<value>mypassword</value>
??????</parameter>
??????<parameter>
????????<name>url</name>
????????<value>jdbc:oracle:thin:@192.168.6.40:1521:dbserver</value>
??????</parameter>
??????<parameter>
????????<name>driverClassName</name>
????????<value>oracle.jdbc.driver.OracleDriver</value>
??????</parameter>
??????<parameter>
????????<name>maxIdle</name>
????????<value>20</value>
??????</parameter>
??????<parameter>
????????<name>username</name>
????????<value>myname</value>
??????</parameter>
????</ResourceParams>
????<ResourceParams?name="UserDatabase">
??????<parameter>
????????<name>factory</name>
????????<value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
??????</parameter>
??????<parameter>
????????<name>pathname</name>
????????<value>conf/tomcat-users.xml</value>
??????</parameter>
????</ResourceParams>
??</GlobalNamingResources>??
5.設置web應用對連接池的引用。
??
??打開D:\Tomcat?4.1\conf\server.xml?文件,找到剛才配置的web應用文字,由于剛才server.xml?文件被自動修改過,并去掉了很多注釋內容,所以剛才配置的web應用
???<Context?path="/mypool"?docBase="D:\mypool"?privileged="true"?reloadable="true"/>
??被自動修改成了這樣的:
?????<Context?className="org.apache.catalina.core.StandardContext"?cachingAllowed="true"?charsetMapperClass="org.apache.catalina.util.CharsetMapper"?cookies="true"?crossContext="false"?debug="0"?docBase="D:\mypool"?mapperClass="org.apache.catalina.core.StandardContextMapper"?path="/mypool"?privileged="true"?reloadable="true"?swallowOutput="false"?useNaming="true"?wrapperClass="org.apache.catalina.core.StandardWrapper">
????????</Context>
??在<Context></Context>的描述中加上本web應用對全局連接池的引用說明,如下文字:
????<ResourceLink?global="jdbc/myOrcl"?name="jdbc/myOrcl"?type="javax.sql.DataSource"/>??
??設置完成后,web應用的描述大致如下面的樣子:
????<Context?className="org.apache.catalina.core.StandardContext"?cachingAllowed="true"?charsetMapperClass="org.apache.catalina.util.CharsetMapper"?cookies="true"?crossContext="false"?debug="0"?docBase="D:\mypool"?mapperClass="org.apache.catalina.core.StandardContextMapper"?path="/mypool"?privileged="true"?reloadable="true"?swallowOutput="false"?useNaming="true"?wrapperClass="org.apache.catalina.core.StandardWrapper">???
???
??????<ResourceLink?global="jdbc/myOrcl"?name="jdbc/myOrcl"?type="javax.sql.DataSource"/>??????
???
?</Context>
??保存D:\Tomcat?4.1\conf\server.xml?文件。
??注意,設置這個連接池的引用說明是非常重要的一步。
??一些朋友在Tomcat4中配置連接池失敗的原因大都歸咎與此。還有網上一些文章說這是一個Tomcat4的一個Bug。
??我用了整整兩天兩夜的時間才明白其中的奧秘。[:(]
??當時離瘋掉只查一點點。因為畢竟配置一個連接池是很簡單的。[:(]
6.一般情況下,到此,連接池的設置就完成了。
??然后需要重新啟動Tomcat,這樣就可以使用連接池來工作了。
??但是,看到很多文章上說,還需要設置一下web.xml才能應用。我沒有設置web.xml,連接池也可以完全使用。
??現在說一下web.xml的配置方法。
??在D:\mypool中新建文件夾,命名為WEB-INF,注意是大寫的字母。
??然后在D:\mypool\WEB-INF\?下新建文件web.xml,其內容為:
??<web-app>
????<resource-ref>
????????<description>Oracle?DataSource?example</description>
????????<res-ref-name>jdbc/myOrcl</res-ref-name>
????????<res-type>javax.sql.DataSource</res-type>
????????<res-auth>Container</res-auth>
????</resource-ref>
??</web-app>
??保存D:\mypool\WEB-INF\web.xml?文件。
7.一個簡單的應用示例。
??寫了一個簡單的JSP頁面,用連接池來訪問數據庫。
內容如下:
---------------------
<%@?page?contentType="text/html;charset=GBK"%>
<%@?page?import="javax.naming.*"%>
<%@?page?import="javax.sql.*"%>
<%@?page?import="java.sql.*"%>
<%
????try
????{???????????????????
???????Context?initCtx?=?new?InitialContext();
?
???????if(initCtx==null)
??????????throw?new?Exception("沒有匹配的環境");
???????Context?ctx?=?(Context)?initCtx.lookup("java:comp/env");
??????
???????//獲取連接池對象???????????????????
???????Object?obj?=?(Object)?ctx.lookup("jdbc/myOrcl");??
??????
??????//類型轉換
???????javax.sql.DataSource?ds?=?(javax.sql.DataSource)obj;
?????????
???????if(ds==null)
??????????throw?new?Exception("沒有匹配數據庫");??
????
???????Connection?conn?=?ds.getConnection();
??????
???????Statement?stmt?=?conn.createStatement();???????????????????
?????????????????????????????
???????String?strSql="select?*?from?grade";??//SQL,要保證grade數據表里面有記錄。
??????????????????????
???????ResultSet?rs=stmt.executeQuery(strSql);
???????if(rs.next())
?????????{?????????????????????
??????????out.println(rs.getString(1));??????????????????????????
??????????out.println(rs.getString(2));??????????????????????
?????????}
???????rs.close();??????//關閉ResultSet??
???????stmt.close();????//關閉Statement
???????conn.close();????//將連接放回到連接池
?????}
?????catch(Exception?ex)
?????{????
?????????ex.printStackTrace();
?????????throw?new?SQLException("cannot?get?Connection?pool."+ex);
?????}
%>
<hr>
--------------------
??
記住,用完后的數據庫連接要釋放。
不然當打開的連接過多或惡意刷屏,連接池的連接數目會被用完。
當連接池的連接數目用完后,再訪問jsp頁面時,會在頁面出現如下的錯誤信息,報告連接池的連接被耗盡:
java.sql.SQLException:?DBCP?could?not?obtain?an?idle?db?connection,?pool?exhausted
二、Win2k下Tomcat5?的連接池的配置
安裝jakarta-tomcat-5.0.13.exe,假如Tomcat5的安裝目錄為?D:\Tomcat?5.0?。
別忘了把oracle的驅動程序classes12.jar文件copy到目錄?D:\Tomcat?5.0\common\lib\?下。
Tomcat5的連接池設置和Tomcat4?的差不多,僅說明一下不同點或需要特別注意的地方。
1.?Tomcat5啟動后,訪問?
http://127.0.0.1:8080/admin?頁面,當設置完Tomcat的連接池數據源后,打開D:\Tomcat?5.0\conf\server.xml?文件,會看到配置的連接池相關信息大致如下樣子:
<GlobalNamingResources>
????<Environment?name="simpleValue"?type="java.lang.Integer"?value="30"/>
????<Resource?name="jdbc/myOrcl"?type="javax.sql.DataSource"/>
????<Resource?auth="Container"?description="User?database?that?can?be?updated?and?saved"?name="UserDatabase"?type="org.apache.catalina.UserDatabase"/>
????<ResourceParams?name="jdbc/myOrcl">
??????<parameter>
????????<name>maxWait</name>
????????<value>5000</value>
??????</parameter>
??????<parameter>
????????<name>maxActive</name>
????????<value>4</value>
??????</parameter>
??????<parameter>
????????<name>password</name>
????????<value>mypassword</value>
??????</parameter>
??????<parameter>
????????<name>url</name>
????????<value>jdbc:oracle:thin:@127.0.0.1:1521:dbserver</value>
??????</parameter>
??????<parameter>
????????<name>driverClassName</name>
????????<value>oracle.jdbc.driver.OracleDriver</value>
??????</parameter>
??????<parameter>
????????<name>maxIdle</name>
????????<value>2</value>
??????</parameter>
??????<parameter>
????????<name>username</name>
????????<value>myusername</value>
??????</parameter>
????</ResourceParams>
????<ResourceParams?name="UserDatabase">
??????<parameter>
????????<name>factory</name>
????????<value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
??????</parameter>
??????<parameter>
????????<name>pathname</name>
????????<value>conf/tomcat-users.xml</value>
??????</parameter>
????</ResourceParams>
??</GlobalNamingResources>
可以看到,一些連接池的信息配置參數已經和Tomcat4不同了。
但大致配置步驟和方法都是一樣的。
2.設置web應用對連接池的引用。
?打開D:\Tomcat?5.0\conf\Catalina\localhost\?目錄,找到和web應用同名的xml文件(mypool.xml),打開這個文件,
修該其<Context></Context>的描述信息,添加如下行:
???<ResourceLink?global="jdbc/myOrcl"?name="jdbc/myOrcl"?type="javax.sql.DataSource"/>??
使mypool.xml文件的內容看起來大致這個:
??
???<Context?docBase="D:/mypool"?path="/mypool"?privileged="true"?reloadable="true">
?????<ResourceLink?global="jdbc/myOrcl"?name="jdbc/myOrcl"?type="javax.sql.DataSource"/>
???</Context>
然后保存mypool.xml,需要重新Tomcat5服務,使之生效。
3.JSP頁面測試文件的寫法也是一樣的,不再贅述。
4.一些補充:
??如果web應用沒有配置對連接池的引用,即沒有配置<ResourceLink>,則會在訪問jsp頁面時出現如下錯誤:
????NameNotFoundException:?Name?jdbc?is?not?bound?in?this?Context
??如果缺少Oracle的JDBC驅動,則會在訪問jsp頁面時出現如下錯誤:
????java.sql.SQLException:?Cannot?load?JDBC?driver?class?'oracle.jdbc.driver.OracleDriver'