JNDI連接數據庫-配置方法
<第一步>---context.xml 文件的配置
首先打開tomcat5.5 文件夾 C:\Program Files\Tomcat 5.5\conf 這是我的 tomcat 本機路徑 在 conf 里有一個 context.xml 打開它,接着在<Context>....</Context>節點中添加 JNDI 配置文件<Resource..../>
例如: <!--addressBook 數據庫 配置 JNDI -->
<Resource
name="jdbc/addressBook"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="sa"
password="luhaifeng"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://localhost:1433;databaseName=addressBook" />
<Resource.../>里的屬性介紹:
name: 指定 Resource 的 JNDI 名字
auth: 指定管理 Resource 的 Manager,它有兩個可選值:Container 和 Application。Container 表示由容器來創建 Resource,Application 表示由 Web 應用來創 建和管理Resource
type: 指定 Resource 所屬的 Java 類名
maxActive: 指定數據庫連接池中處於活動狀態的數據庫連接的最大數目,取 值為 0,表示不受限制 maxIdle: 指定數據庫連接池中處於空閑狀態的數據庫連接的最大數目,取 值為 0,表示不受限制 maxWait: 指定數據庫連接池中的數據連接處於空閑狀態的最長時間(以毫秒 為單位),超過這一時間將會拋出異常。 取值為-1,表示可以無限制等待
username: 指定連接數據庫的用戶名
password: 指定連接數據庫的口令
driverClassName: 指定連接數據庫的 JDBC 驅動程序
url: 指定連接數據庫的 URL
<第二步>-----web.xml 文件的配置
配置好了 context.xml 后,我們現在就要配置我們自己項目中的 web.xml 文件了, 打開項目中WEB-INF\web.xml 文件中的<web-app>節點下添加 JNDI 配置文件 <resource-ref>....</resource-ref>
例如:
<!--addressBook 數據庫 配置 JNDI -->
<resource-ref>
<description>addressBook DataSource</description>
<res-ref-name>jdbc/addressBook</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<resource-ref.../>里的屬性介紹:
description: 對所引用資源的說明 res-ref-name: 指定所引用資源的 JNDI 名字,與<Resource>元素中的 name 屬性 對應
res-type: 指定所引用資源的類名字,與<Resource>元素中的 type 屬性對應
res-auth: 指定管理所引用資源的 Manager,與<Resource>元素中的 auth 屬性對應
<第三步>
-----添加數據庫驅動文件 通過數據源訪問數據庫,由於數據源有 Tomcat 創建並維護,所以必須把 JDBC 驅動 程序復制到 Tomcat 的 common\lib 目錄下面,*注意*Tomcat6.0 下沒有 common 文 件,所有直接將 JDBC 驅動程序放在 lib 文件夾里。
<第四步>-----在程序里獲取 Connection 對象
由於 DataSource 對象由 Web 容器(Tomcat)提供,因此不能在程序中采用創建一 個實例的方法來生成 DataSource 對象,而需要采用 Java 的另一個技術
JNDI(Java Naming and Directory Interface),來獲得 DataSource 對象。 javax.naming.Context 提供了查找 JNDI Resource 的接口,
例如,可以通過一下代碼獲得名稱為jdbc/addressBook 的數據源的引用:
Context ctx=new InitialContext();
DataSource ds=(DataSource)ctx.loopup("java:comp/env/jdbc/addressBook");
得到了 DataSource 對象后, 可以通過 DataSource 的 getConnection()方法來獲得數 據庫連接對象 Connection。 Connection conn=ds.getConnection();
lookup(String name) -----返回與指定的名字綁定的對象