配置tomcat5.5 jndi 各種配置方式 分析總結(mysql)

 準備工作:
安裝tomcat5.5(注意這點)
安裝mysql
拷貝mysql驅動到tomcat_home/common/lib下
新建一個web工程
在工程中加入index.jsp
None.gif<%@page import="java.util.*,javax.naming.*,java.sql.*,javax.sql.*" %>
None.gif
<%@page contentType="text/html;charset=BIG5"%>
None.gif
<%    
None.gif    Context ctx 
= new InitialContext();      
None.gif    String strLookup 
= "java:comp/env/jdbc/test"
None.gif    DataSource ds 
=(DataSource) ctx.lookup(strLookup);
None.gif    Connection con 
= ds.getConnection();
ExpandedBlockStart.gif    
if (con != null){
InBlock.gif        out.print(
"success");
ExpandedBlockStart.gif    }
else{
InBlock.gif        out.print(
"failure");
ExpandedBlockEnd.gif    }
       
None.gif
%>
web.xml中加入
None.gif<resource-ref>
None.gif    
<res-ref-name>jdbc/test</res-ref-name>
None.gif    
<res-type>javax.sql.DataSource</res-type>
None.gif    
<res-auth>Container</res-auth>
None.gif    
<res-sharing-scope>Shareable</res-sharing-scope>
None.gif
</resource-ref>

配置tomcat
這一步的目的就是告訴tomcat如何連接數據庫
可以分爲兩種大的類型,每種類型又有很多種配置方式
配置類型一;
(直接配置的類型,這種方式最簡單)

方法一:
直接在tomcat_home/conf/localhost/下建立一個xml文件,文件名是<yourAppName>.xml
例如我的工程名叫jndi,對應的名字叫jdni.xml
內容如下:

None.gif<Context>
None.gif 
<Resource
None.gif          name
="jdbc/test"
None.gif          type
="javax.sql.DataSource"
None.gif          password
="bb"
None.gif          driverClassName
="com.mysql.jdbc.Driver"
None.gif          maxIdle
="2"
None.gif          maxWait
="50"
None.gif          username
="root"
None.gif          url
="jdbc:mysql://localhost:3306/test"
None.gif          maxActive
="4"/>
None.gif
</Context>

方法二:
只需在tomcat_home/webapps/myapps/META-INF/context.xml中增加:
None.gif<context>
None.gif
<Resource
None.gif          name
="jdbc/test"
None.gif          type
="javax.sql.DataSource"
None.gif          password
="bb"
None.gif          driverClassName
="com.mysql.jdbc.Driver"
None.gif          maxIdle
="2"
None.gif          maxWait
="50"
None.gif          username
="root"
None.gif          url
="jdbc:mysql://localhost:3306/test"
None.gif          maxActive
="4"/>
None.gif
</context>


說明:這種配置需要告訴tomcat resource的內容,resource應用於什麼地方
第一種方法通過文件名知道了app的name
第二種方式本身就在app內部,所以name肯定知道
兩種方式都要放在context中

配置類型二:
(配置全局resource,然後通過resourcelink來映射)

步驟一:配置全局resource(這一步對於所有的配置都是一樣的)
打開tomcat_home/conf/server.xml加入

None.gif<Resource
None.gif          name
="jdbc/test"
None.gif          type
="javax.sql.DataSource"
None.gif          password
="bb"
None.gif          driverClassName
="com.mysql.jdbc.Driver"
None.gif          maxIdle
="2"
None.gif          maxWait
="50"
None.gif          username
="root"
None.gif          url
="jdbc:mysql://localhost:3306/test"
None.gif          maxActive
="4"/>


步驟二:映射
(映射可以配置在多個地方,也就有多個配置方法:)

方法一:(對比類型一的配置理解)
直接在tomcat_home/conf/localhost/下建立一個xml文件,文件名是<yourAppName>.xml
例如我的工程名叫jndi,對應的名字叫jdni.xml加入如下內容

None.gif<Context>
None.gif
<ResourceLink global="jdbc/test" name="jdbc/test" type="javax.sql.DataSource"/>
None.gif
</Context>

方法二:(對比類型一的配置理解)
在tomcat_home/webapps/myapps/META-INF/context.xml的Context中增加:
None.gif<context>
None.gif
<ResourceLink global="jdbc/test" name="jdbc/test" type="javax.sql.DataSource"/> 
None.gif
</context>


方法三:(上邊兩種方法都是把全局的resource 映射給jndi這個web應用,第三種方法就是把這個
全局的resource直接公開給所有的應用)
在tomcat_home/conf/context.xml的<Context></context>之間加入
<ResourceLink global="jdbc/test" name="jdbc/test" type="javax.sql.DataSource"/>

運行測試:
打開ie,輸入http://localhost:8080/jndi/index.jsp
看到success

常見錯誤:
1,Name jdbc is not bound in this Context
2,Cannot create JDBC driver of class '' for connect URL 'null' conf localhost
原因:
大多數是因爲配置了全局的resource,但沒有link造成的。
解決:
加入link就行了,link的方式見類型二的三種方法。

分析:
看到上邊這麼多方法,是否感覺眼花繚亂,其實不要死記配置,按照原理分析一下就好了。
你需要的是告訴tomcat哪個應用如何連接數據庫。

類型一的方式對應一個應用單獨使用這個配置的情況
就是直接告訴tomcat"應用名"  "連接數據庫需要的參數"

類型二的方式對應多個應用共享一個配置的情況
這樣先配置server.xml告訴tomcat全局範圍的"連接數據庫需要的參數"
然後映射,映射的時候
1,如果不知道"app name(應用名)"就只需要通過文件名來傳遞這個信息
2,如果"app name"都知道就只需要加入映射的內容
3,如果要配置成全局公用的,就不需要"app name",本身放在tomcat的context.xml中

最後再次提醒一下:所有的配置必須放在<context></context>之間

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章