我的漫漫程序之旅

          專注于JavaWeb開發
          隨筆 - 39, 文章 - 310, 評論 - 411, 引用 - 0
          數據加載中……

          Tomcat配置JNDI數據源

          經過3個多小時的努力,配置JNDI數據源(主要是通過DBCP連接池)終于搞定~
          還是Tomcat官方的說明好,不過全是英文的,大概還看得懂.
          百度上那么花花綠綠的太多了,一個也沒成功!...
          本例使用的數據庫為Ms SQL Server 2000,對于其它數據庫只是修改一下相應的參數即可,
          服務器是Tomcat5.5, 與之間的版本配置連接池最簡便
          自己總結了一下,希望起到一個拋磚引玉的作用

          總結:
          第一步:

          將驅動程序(jar包)放到tomcat安裝目錄下的common\lib文件夾下
          第二步:

          在Tomcat的webapps目錄隨便創建一個工程目錄,例如myjdbc。在myjdbc目錄下創建META-INF目錄,在此目錄下創建一個context.xml文件,里面的內容如下:

          <?xml version="1.0" encoding="UTF-8"?> 
          <Context>

           
          <Resource name="jdbc/test" 
            auth
          ="Container"
           
            type
          ="javax.sql.DataSource"

                   maxActive
          ="100" 
            maxIdle
          ="30"
           
            maxWait
          ="10000"

                   username
          ="sa" password="" 
            driverClassName
          ="net.sourceforge.jtds.jdbc.Driver"

                   url
          ="jdbc:jtds:sqlserver://localhost/pubs"/>
           
          </Context>

           

          附注如下:
          Tomcat標準數據源資源工廠配置項如下:
          * driverClassName - 所使用的JDBC驅動類全稱。
          * maxActive - 同一時刻可以自數據庫連接池中被分配的最大活動實例數。
          * maxIdle - 同一時刻數據庫連接池中處于非活動狀態的最大連接數。
          * maxWait - 當連接池中沒有可用連接時,連接池在拋出異常前將等待的最大時間,單位毫秒。
          * password - 傳給JDBC驅動的數據庫密碼。
          * url - 傳給JDBC驅動的連接URL。
          * user - 傳給JDBC驅動的數據庫用戶名。
          * validationQuery - 一個SQL查詢語句,用于在連接被返回給應用前的連接池驗證。
          * 如果指定了該屬性,則必為至少返回一行記錄的SQL SELECT語句。


          jdbc/test是數據源的名稱(隨意寫,要和web.xml文件中 <res-ref-name>jdbc/test</res-ref-name> 一樣即可),
          其他的參數按照自己的實際情況進行修改,例如數據庫的名稱、賬號、密碼。

          第三步:

          在myjdbc目錄下創建WEB-INF目錄,創建web.xml文件,內容如下:

          <?xml version="1.0" encoding="UTF-8"?> 
          <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
           
          xmlns:xsi
          ="http://www.w3.org/2001/XMLSchema-instance"
           
          xsi:schemaLocation
          ="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
           
          version
          ="2.4">
           

              
          <resource-ref>
           
                  
          <description>DB Connection</description>
           
                  
          <res-ref-name>jdbc/test</res-ref-name>
           
                  
          <res-type>javax.sql.DataSource</res-type>
           
                  
          <res-auth>Container</res-auth>
           
              
          </resource-ref>
           
          </web-app>
           

           

          說明:
          <resource-ref>
          <descrtiption>引用資源說明</descrtiption>
          <res-ref-name>引用資源的JNDI名</res-ref-name>
          <res-type>引用資源的類名</res-type>
          <res-auth>管理者(Container)</res-auth><!--Container-容器管理 Application-Web應用管理-->
          </resource-ref>
          第四步:

          寫個jsp,試一下吧!

          <%@ page contentType="text/html;charset=utf-8"%>
          <%@ page import="java.sql.*,javax.sql.*,javax.naming.*,com.DBConnection" %>
          <%
            try
            {
             
          //初始化查找命名空間
             Context ctx 
          = new
           InitialContext(); 
             
          //InitialContext ctx = new
           InitialContext();亦可 
             
          //找到DataSource,對名稱進行定位java:comp/
          env是必須加的,后面跟你的DataSource名
             DataSource ds 
          = (DataSource)ctx.lookup("java:comp/env/jdbc/test"
          );
             
          //
          取出連接
             Connection conn 
          =
           ds.getConnection();
          System.out.println(
          "connection pool connected !!"
          );   
            } catch (NamingException e) {
             System.out.println(e.getMessage());
            } catch (SQLException e) {
             e.printStackTrace();
            }finally
            {
             
          //
          注意不是關閉,是放回連接池.
             conn.close();
            }

          }
          %>


          或寫個JSP用標簽庫測試一下:

          <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
          <%@ 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/test">
          select * from authors
          </sql:query>

          <html>
            
          <head>
              
          <title>DB Test</title>
            
          </head>
            
          <body>
          <c:forEach var="row" items="${rs.rows}">
              ${row.city}
          <br/>
          </c:forEach>
            
          </body>
          </html>

           

          我成功了!Good Luck!
          以下是配置JNDI的其他方法,個人不建議使用,因為修改服務器的
          server.xml和web.xml,如果有一點錯誤,你的容器就會崩潰~

          注:連接數據源的方法還有很多,在這里我簡要說之:
          比如說第二步還可以這么做:

          在/tomcat/conf/Catalina/localhost(或其它主機名)/中添加以
          虛擬目錄名稱(你的工程名)命名的XML文件來配置context.
          比如我的主機下有個目錄dbpool其地址為tomcat/webapps/test我可以這樣來配置這個上下文:
          在tomcat/conf/Catalina/localhost/目錄下創建test.xml文件,內容和上面一樣.

          還可以:
          在/tomcat/conf/server.xml中<host></host>標簽之間添加
             
           

          <Context path="/test" docBase="test"
                  debug
          ="5" reloadable="true" crossContext="true">
            
          <Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource"
                         maxActive
          ="100" maxIdle="30" maxWait="10000"
                         username
          ="javauser" password="javadude" driverClassName="net.sourceforge.jtds.jdbc.Driver"
                         url
          ="jdbc:jtds:sqlserver://localhost/pubs"/>
          </Context>

           

          其中path是你的工程路徑(相對或絕對亦可),其中docBase="test"說明,此主機已經指向到webapps目錄下了,回頭
          來看test這個上下文,它實際目錄是位于webapps的目錄下的,所以
          在Context中我們可以將docBase直接設置為test了。如果它在webapps/dbpool/test下,則設置為dbpool/test就可以了。

          附:JNDI——Java Naming and Directory Interface是一套提供naming和 directory功能的 API,
          Java應用程式開發者透過使用 JNDI,在naming和 directory方面的應用上就有了共通的準則.



          posted on 2008-01-13 08:28 々上善若水々 閱讀(29568) 評論(3)  編輯  收藏 所屬分類: JavaWeb

          評論

          # re: Tomcat配置JNDI數據源  回復  更多評論   

          hao !
          2009-05-01 21:08 | guolu

          # re: Tomcat配置JNDI數據源  回復  更多評論   

          非常感謝!!!
          2009-05-24 15:16 | dellyn

          # re: Tomcat配置JNDI數據源  回復  更多評論   

          謝謝啊,我解決了
          2011-04-13 21:34 | gaofeng
          主站蜘蛛池模板: 读书| 凯里市| 中宁县| 乌拉特前旗| 高州市| 霞浦县| 新源县| 西华县| 曲松县| 河曲县| 连江县| 田阳县| 石渠县| 镇原县| 庆阳市| 枞阳县| 连江县| 北辰区| 吉木乃县| 清原| 沧州市| 嘉黎县| 随州市| 衡阳市| 温宿县| 雷州市| 奈曼旗| 城固县| 罗源县| 平山县| 邵东县| 麦盖提县| 无为县| 怀安县| 武汉市| 麟游县| 安泽县| 临西县| 光泽县| 云梦县| 上栗县|