• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    tomcat連接池的配置與使用數據庫mysql

    發布: 2008-2-21 14:51 | 作者: liyong_2003 | 來源: 網絡 | 查看: 161次 | 進入軟件測試論壇討論

    領測軟件測試網 關于tomcat連接池的配置,我在自己開始的時候碰到過許多的問題,至少失敗過六次,今天終于成功了。對于這個問題的產生與由來我也給大伙說說。

        在《程序員csdn開發高手》這本雜志的2004年第02期,一位名叫宋廷宇的老師寫了一篇文章,名赤《tomcat連接池的圖形化配置與使用》,我看到了這篇文章,該作者所使用的數據庫是sql server,而我所使用的數據庫是mysql,tomcat版本為5.0 19。文中有這么一段話:“在tomcat 4.1.18及后續版本中提供了圖形界面的web應用發布工具,但是使用這個工具發布采用數據庫連接池的web應用時,自動生成的配置不能找到數據源。這是一個bug,相信在后續的版本中所有關于數據庫連接池的配置和發布都不需要在手工修改配置文件,而使用簡單方便的全圖形化工具”。當時我個人認為:我所使用的tomcat 5.0版的,bug應該修正了吧,況且數據庫配置嘛,換湯不換藥,原理應該是一樣的,但是我嚴格按照這篇文章上來配置,結果事與愿為,配置成功運行后出錯了。附錯誤如下:

        org.apache.commons.dbcp.SQLNestedException: 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(5.0 25)再次試驗,首先是按照書上的文章進行圖形化配置,結果依然,心里想,bug肯定修正,且我與作者的步驟一樣。問題休在???沉著冷靜下來,再次看看tomcat的文檔。又回想起宋廷宇老師的文章中那段話,莫非真的是圖形配置中的bug。

        http://jakarta.apache.org/tomcat/tomcat-5.0-doc/jndi-datasource-examples-howto.html

        好,就來手工配置吧。于是又打開tomcat的doc開始了手工配置。配置之前建議大家對server.xml文件做一個備份,原因就不講了。

        打開server.xml文件,在哪??暈!打開tomcat$\conf文件夾(tomcat$指的是tomcat的安裝目錄,下皆同)。至于數據庫的建立我就不說了,自己按照文章去做吧,說明一下,盡管我不說,我還是按照文章上來做的,你們照葫蘆畫瓢即可。

    首先將那段
    <Context path="/DBTest" docBase="DBTest"
           debug="5" reloadable="true" crossContext="true">
    <!—注意到這里的DBTest了吧,這就是要求大家建立DBTest目錄的原因。-->

     <Logger className="org.apache.catalina.logger.FileLogger"
                prefix="localhost_DBTest_log." suffix=".txt"
                timestamp="true"/>

     <Resource name="jdbc/TestDB"
                  auth="Container"
                  type="javax.sql.DataSource"/>
     <ResourceParams name="jdbc/TestDB">
       <parameter>
         <name>factory</name>
         <value>org.apache.commons.dbcp.BasicDataSourceFactory</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 0 for no limit.
            -->
       <parameter>
         <name>maxActive</name>
         <value>100</value>
       </parameter>

       <!-- Maximum number of idle dB connections to retain in pool.
            Set to 0 for no limit.
            -->
       <parameter>
         <name>maxIdle</name>
         <value>30</value>
       </parameter>

       <!-- Maximum time to wait for a dB connection to become available
            in ms, in this example 10 seconds. An Exception is thrown if
            this timeout is exceeded.  Set to -1 to wait indefinitely.
            -->
       <parameter>
         <name>maxWait</name>
         <value>10000</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 mm.mysql 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>org.gjt.mm.mysql.Driver</value>
    </parameter>
    這里面是被注釋的,因為以前連接mysql是這樣連接的,現在建議用下面的方法,自己可以看到。
        -->
      
       <!-- Class name for the official MySQL Connector/J driver -->
       <parameter>
          <name>driverClassName</name>
          <value>com.mysql.jdbc.Driver</value>
       </parameter>
      
       <!-- The JDBC connection url for connecting to your MySQL dB.
            The autoReconnect=true argument to the url makes sure that the
            mm.mysql JDBC Driver will automatically reconnect if mysqld closed the
            connection.  mysqld by default closes idle connections after 8 hours.
            -->
       <parameter>
         <name>url</name>
         <value>jdbc:mysql://localhost:3306/javatest?autoReconnect=true</value>
    <!--這是數據庫的地址,也可以不要這么繁瑣,改為
    jdbc:mysql://localhost/javatest即可,javatest為數據庫名-->
       </parameter>
     </ResourceParams>
    </Context>

        貼在這了,別嫌長啊。我加了注釋。至于我們貼到什么位置,在</Host>前面,找到相對應的位置,由于我的server.xml文件未備份,所以我無法再次將所貼位置告訴大家了,不好意思,有事給我發過來,我一定還記得的,到時再手把手教你們。

        在tomcat$\webapps文件夾下建立一個名為DBTest的文件夾,注意大小寫。在此文件夾下建立WEB-INF文件夾,及一個文件:test.jsp,再在WEB-INF文件夾下建立兩個文件夾:lib及classes,將數據庫驅動文件拷貝到lib文件夾下,同樣還在WEB-INF文件夾下建一個文件web.xml,看到doc上有現成的,要不要拷貝呀,這就有個問題,doc有個問題,有空給它們寫封信吧,這也是我經過實現才發現的。

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <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">
     <description>MySQL Test App</description>
     <resource-ref>
         <description>DB Connection</description>
         <res-ref-name>jdbc/TestDB</res-ref-name>
         <res-type>javax.sql.DataSource</res-type>
         <res-auth>Container</res-auth>
     </resource-ref>
    </web-app>

        用我的,沒錯的。

    Test.jsp
    <%@ page contentType="text/html; charset=GBK"%>
    <%@ page import="java.sql.*,javax.sql.DataSource,javax.naming.*"%>
    <html>
    <head><title>test.jsp</title></head>
    <body bgcolor="#ffffff">
    <h1>test Tomcat</h1>
    <%
    try
    {
    Context initCtx=new InitialContext();
    DataSource ds = (DataSource)initCtx.lookup("java:comp/env/jdbc/TestDB");
    Connection conn=ds.getConnection();
    out.println("data from database:<br>");
    Statement stmt=conn.createStatement();
    ResultSet rs =stmt.executeQuery("select id, foo, bar from testdata");
    while(rs.next())
    {
    out.println(rs.getInt("id"));
    out.println(rs.getString("foo"));
    out.println(rs.getString("bar"));
    }
    rs.close();
    stmt.close();
    }
    catch(Exception e)
    {
    e.printStackTrace();
    }
    %>
    </body>
    </html>

        doc上的test.jsp是使用了tag ,我認為沒必要,大家反而看不懂,并且它沒有關閉connection及statement,個人認為存在不安全因素,因此我自己也改過來了。

        接下來的事情嘛,自己測試,測試前要將mysql打開,常識性的錯誤別犯了。

        啟動tomcat至http://localhost:8080/DBTest/test.jsp,在我的界面上是

    test Tomcat
    data from database:
    1 hello 12345

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    TAG: tomcat連接池


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>