hjack 发表于 2005-6-12 19:03

[求助]烦了,配tomcat的jndi老是有问题

%tomcathome%/conf/server.xml里添加如何信息:



<!--add start here-->
<Context path="/DBTest" docBase="G:\DBTest"
debug="5" reloadable="true" crossContext="true">
<Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_quality_log." suffix=".txt" timestamp="true"/>

      <Resource name="jdbc/mysql" auth="Container"
                  type="javax.sql.DataSource"/>
      <ResourceParams name="jdbc/mysql">
          <parameter>
            <name>factory</name>
            <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
          </parameter>
          <parameter>
            <name>driverClassName</name>
            <value>com.mysql.jdbc.Driver</value>
          </parameter>
          <parameter>
            <name>url</name>
            <value>jdbc:mysql://localhost:3306/bbs?autoReconnect=true</value>
          </parameter>
          <parameter>
            <name>username</name>
            <value>root</value>
          </parameter>
          <parameter>
            <name>password</name>
            <value>111111</value>
          </parameter>
          <parameter>
            <name>maxActive</name>
            <value>4</value>
          </parameter>
          <parameter>
            <name>maxIdle</name>
            <value>2</value>
          </parameter>
          <parameter>
            <name>maxWait</name>
            <value>5000</value>
          </parameter>
          <parameter>
            <name>removeAbandoned</name>
            <!-- Abandoned DB connections are removed and recycled -->
            <value>true</value>
          </parameter>
          <parameter>
            <name>removeAbandonedTimeout</name>
            <!-- Use the removeAbandonedTimeout parameter to set the number of seconds a DB connection has been idle before it is considered abandoned.-->
            <value>60</value>
          </parameter>
          <parameter>
            <name>logAbandoned</name>
            <!-- Log a stack trace of the code which abandoned -->
            <value>false</value>
          </parameter>

      </ResourceParams>
</Context>
<!--add end here-->



%mywebapp%/WEB-INF/web.xml添加如下信息:


<resource-ref>
      <description>jdbc/mysql</description>
      <res-ref-name>jdbc/mysql</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
    </resource-ref>

%mywebapp%/META-INF/context.xml里添加如下信息:


<Context>
<ResourceLink global="jdbc/mysql" name="jdbc/mysql" type="javax.sql.DataSource"/>
</Context>


测试code如下:


<%@ page contentType = "text/html; charset=gb2312" %>
    <%@ page import = "java.sql.*" %>
    <%@ page import = "javax.naming.*" %>
    <%@ page import = "javax.sql.*" %>
    <%
    Context ctx=null;
    DataSource ds=null;
    Connection conn=null;
    Statement stmt=null;
    ResultSet rs=null;
   
    try{
            ctx = new InitialContext();
            if( ctx == null )
                    out.println("no context");
            ds = (DataSource) ctx.lookup("java:comp/env/jdbc/mysql");
            if( ds == null )
                    out.println("no datasource");
            conn = ds.getConnection();
            stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                    ResultSet.CONCUR_READ_ONLY);
            String strSql = " select * from tuser";
            rs = stmt.executeQuery(strSql);
            while(rs.next()){
                    out.println(rs.getString(1));
            }
    }
    catch(Exception ex){
            ex.printStackTrace();
            out.println(ex.toString());
    }
    finally{
            if( rs != null )
                    rs.close();
            if( stmt != null )
                    stmt.close();
            if( conn != null)
                    conn.close();
            if( ctx != null )
                    ctx.close();
    }
    %>



运行后出现如下错误:
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'

谁可以帮忙看看到底那里出错了。

hjack 发表于 2005-6-12 19:07

在test.jsp里可以成功连数据库的,证明jdbc driver是没有问题的。

<%@ page contentType=\"text/html;charset=gb2312\"%>   
<%@ page import=\"java.sql.*\"%>
<html>
<body>
<%
Class.forName(\"com.mysql.jdbc.Driver\").newInstance();
String url =\"jdbc:mysql://localhost/bbs?user=root&password=111111&useUnicode=true&characterEncoding=GB2312\" ;
Connection conn= DriverManager.getConnection(url);
Statement stmt=conn.createStatement();
String query=\"select userName from tuser\";
ResultSet rs=stmt.executeQuery(query);
while(rs.next())
{
      String s=rs.getString(\"userName\");//看准你的字段是不是字符型,不然就不能用getString,根据字段类使用getBoolean等等
      out.print(s+\"<br>\");
}
rs.close();
stmt.close();
conn.close();
%>
</body>
</html>

wool王 发表于 2005-6-12 21:37

楼主把连接池配置写在server.xml文件里不太适合(这个方法就等同于在tomcat的admin里面配置),我觉得。我以前也这么写的,后来看了csdn一个网友文章,用另外一个方法去做。

具体方法:https://www.gdutbbs.com/viewthread.php?tid=31615

wool王 发表于 2005-6-12 21:40

<?xml version=\'1.0\' encoding=\'utf-8\'?>
<Context docBase=\"你的工作目录\" path=\"/虚拟路径名\" reloadable=\"true\" workDir=\"临时工作区,建议随便建个目录\">
<Resource name=\"jdbc/mysql\" type=\"javax.sql.DataSource\"/>
<ResourceParams name=\"jdbc/mysql\">
    <parameter>
      <name>maxWait</name>
      <value>5000</value>
    </parameter>
    <parameter>
      <name>maxActive</name>
      <value>10</value>
    </parameter>
    <parameter>
      <name>password</name>
      <value></value>
    </parameter>
    <parameter>
      <name>url</name>
      <value>jdbc:mysql://localhost:3306/dataname?useUnicode=true&amp;characterEncoding=UTF-8</value>
    </parameter>
    <parameter>
      <name>driverClassName</name>
      <value>com.mysql.jdbc.Driver</value>
    </parameter>
    <parameter>
      <name>maxIdle</name>
      <value>10</value>
    </parameter>
    <parameter>
      <name>username</name>
      <value>root</value>
    </parameter>
</ResourceParams>
</Context>

[ Last edited by wool王 on 2005-6-12 at 21:43 ]

wool王 发表于 2005-6-12 21:43

<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>
<web-app>
      <resource-ref>
                <description>connectDB</description>
                <res-ref-name>jdbc/sqlserver</res-ref-name>
                <res-type>javax.sql.DataSource</res-type>
                <res-auth>Container</res-auth>
      </resource-ref>
</web-app>

wool王 发表于 2005-6-12 21:46

把4楼的文件起名“工作目录名.xml”放到tomcat目录下的\\conf\\Catalina\\localhost中就可以了。

ps:这里“工作目录名”是你的工作区名,比如你的工作区在e:/xx/aaa的话这里工作目录名就是aaa。

wool王 发表于 2005-6-12 21:54

另外说下,你这个提示:
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class \'\' for connect URL \'null\'
是说JDBC驱动的问题哦,但你直接连接又可以。比较郁闷。而且我看你那样配置好像也没问题的。

你的驱动是什么版本的?我用mysql网站上提供的3.1版本按照我那个方法连接成功。

hjack 发表于 2005-6-12 22:32

谢谢wool.


楼主把连接池配置写在server.xml文件里不太适合(这个方法就等同于在tomcat的admin里面配置),我觉得。
这个我知道,这样就像硬编码一样,我试过写在\\conf\\Catalina\\localhost\\dbtest.xml不行才这样连的。
mysql driver是3.1.8a

wool王 发表于 2005-6-12 22:37

hjack在 2005-6-12 22:32 发表:

谢谢wool.


这个我知道,这样就像硬编码一样,我试过写在\\conf\\Catalina\\localhost\\dbtest.xml不行才这样连的。
mysql driver是3.1.8a

刚才又去mysql网站上下载了新的驱动,替换掉我以前那个。3.1.8a是最新的了。我这边的还是没问题。

ps你成功了么?

hjack 发表于 2005-6-12 22:44

正在试。。。

wool王 发表于 2005-6-12 22:55

加油。。。

如果不行再共同探讨下。

hjack 发表于 2005-6-12 23:01

郁闷呀,还是不行,还是那个org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class \'\' for connect URL \'null\'

wool王 发表于 2005-6-12 23:20

你拷贝多份jdbc驱动到WEB-INF/lib下试试。

joe_233 发表于 2005-6-12 23:28

暂时还不知道是什么问题。。

hjack 发表于 2005-6-12 23:31

无理由呀。。。
我的tomcat是5.5.9
jdk是1.5.0
会不会关这个事呀???

wool王 发表于 2005-6-12 23:32

啊周又来这边吹水。

wool王 发表于 2005-6-12 23:35

hjack在 2005-6-12 23:31 发表:

无理由呀。。。
我的tomcat是5.5.9
jdk是1.5.0
会不会关这个事呀???

哦。。。估计跟这个有关。。。

我测试环境系tomcat4.0.28,,,jdk1.4.2。。。

去google下系埋这个问题。。。

一齐啦,找到原因就贴出来分享下。。。

hjack 发表于 2005-6-13 15:12

真的是tomcat的问题呀。

我从apache那里下了个tomcat4.1.3试了一下,得左啦。

tomcat5真的有bug呀。

joe_233 发表于 2005-6-13 15:18

^_^TOMCAT5 系列真的很有问题~~~
在4.1下用<@pageconten=****>的
在5系列一定要用<@ page language=java conten= ***>才行~
还有一些中文显示问题~
楼主说的问题等。。。

hjack 发表于 2005-6-13 15:28

启动tomcat4.1后出现以下错误,到底是那个xml的web-app出问题呀?除了工作目录下的WEB-INF/web.xml里用到web-app元素外,其它地方都没有改动它呀。
2005-6-13 15:13:52 org.apache.coyote.http11.Http11Protocol init
信息: Initializing Coyote HTTP/1.1 on http-8080
Starting service Tomcat-Standalone
Apache Tomcat/4.1.31
2005-6-13 15:13:54 org.apache.commons.digester.Digester error
严重: Parse Error at line 2 column 10: Document root element \"web-app\", must mat
ch DOCTYPE root \"null\".
org.xml.sax.SAXParseException: Document root element \"web-app\", must match DOCTY
PE root \"null\".
      at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Un
known Source)
      at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
      at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
      at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
      at org.apache.xerces.impl.dtd.XMLDTDValidator.rootElementSpecified(Unkno
wn Source)
      at org.apache.xerces.impl.dtd.XMLDTDValidator.handleStartElement(Unknown
Source)
      at org.apache.xerces.impl.dtd.XMLDTDValidator.startElement(Unknown Sourc
e)
      at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElemen
t(Unknown Source)
      at org.apache.xerces.impl.XMLDocumentScannerImpl$ContentDispatcher.scanR
ootElementHook(Unknown Source)
      at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContent
Dispatcher.dispatch(Unknown Source)
      at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Un
known Source)
      at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
      at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source)
      at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
      at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
      at org.apache.commons.digester.Digester.parse(Digester.java:1548)
      at org.apache.catalina.startup.ContextConfig.applicationConfig(ContextCo
nfig.java:220)
      at org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:57
9)
      at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfi
g.java:181)
      at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(Lifecycl
eSupport.java:119)
      at org.apache.catalina.core.StandardContext.start(StandardContext.java:3
523)
      at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1141)

      at org.apache.catalina.core.StandardHost.start(StandardHost.java:707)
      at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1141)

      at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:316
)
      at org.apache.catalina.core.StandardService.start(StandardService.java:4
50)
      at org.apache.catalina.core.StandardServer.start(StandardServer.java:214
3)
      at org.apache.catalina.startup.Catalina.start(Catalina.java:463)
      at org.apache.catalina.startup.Catalina.execute(Catalina.java:350)
      at org.apache.catalina.startup.Catalina.process(Catalina.java:129)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:585)
      at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:156)
2005-6-13 15:13:54 org.apache.commons.digester.Digester error
严重: Parse Error at line 2 column 10: Document is invalid: no grammar found.
org.xml.sax.SAXParseException: Document is invalid: no grammar found.
      at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Un
known Source)
      at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
      at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
      at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
      at org.apache.xerces.impl.dtd.XMLDTDValidator.handleStartElement(Unknown
Source)
      at org.apache.xerces.impl.dtd.XMLDTDValidator.startElement(Unknown Sourc
e)
      at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElemen
t(Unknown Source)
      at org.apache.xerces.impl.XMLDocumentScannerImpl$ContentDispatcher.scanR
ootElementHook(Unknown Source)
      at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContent
Dispatcher.dispatch(Unknown Source)
      at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Un
known Source)
      at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
      at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source)
      at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
      at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
      at org.apache.commons.digester.Digester.parse(Digester.java:1548)
      at org.apache.catalina.startup.ContextConfig.applicationConfig(ContextCo
nfig.java:220)
      at org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:57
9)
      at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfi
g.java:181)
      at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(Lifecycl
eSupport.java:119)
      at org.apache.catalina.core.StandardContext.start(StandardContext.java:3
523)
      at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1141)

      at org.apache.catalina.core.StandardHost.start(StandardHost.java:707)
      at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1141)

      at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:316
)
      at org.apache.catalina.core.StandardService.start(StandardService.java:4
50)
      at org.apache.catalina.core.StandardServer.start(StandardServer.java:214
3)
      at org.apache.catalina.startup.Catalina.start(Catalina.java:463)
      at org.apache.catalina.startup.Catalina.execute(Catalina.java:350)
      at org.apache.catalina.startup.Catalina.process(Catalina.java:129)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:585)
      at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:156)
2005-6-13 15:13:55 org.apache.struts.util.PropertyMessageResources <init>
信息: Initializing, config=\'org.apache.struts.util.LocalStrings\', returnNull=tru
e
2005-6-13 15:13:55 org.apache.struts.util.PropertyMessageResources <init>
信息: Initializing, config=\'org.apache.struts.action.ActionResources\', returnNul
l=true
2005-6-13 15:13:56 org.apache.struts.util.PropertyMessageResources <init>
信息: Initializing, config=\'org.apache.webapp.admin.ApplicationResources\', retur
nNull=true
2005-6-13 15:13:59 org.apache.coyote.http11.Http11Protocol start
信息: Starting Coyote HTTP/1.1 on http-8080
2005-6-13 15:14:09 org.apache.jk.common.ChannelSocket init
信息: JK2: ajp13 listening on /0.0.0.0:8009
2005-6-13 15:14:09 org.apache.jk.server.JkMain start
信息: Jk running ID=0 time=0/63config=D:\\Tomcat 4.1\\conf\\jk2.properties
页: [1] 2 3
查看完整版本: [求助]烦了,配tomcat的jndi老是有问题