[求助]烦了,配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'
谁可以帮忙看看到底那里出错了。 在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>
楼主把连接池配置写在server.xml文件里不太适合(这个方法就等同于在tomcat的admin里面配置),我觉得。我以前也这么写的,后来看了csdn一个网友文章,用另外一个方法去做。
具体方法:https://www.gdutbbs.com/viewthread.php?tid=31615 <?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&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 ] <?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> 把4楼的文件起名“工作目录名.xml”放到tomcat目录下的\\conf\\Catalina\\localhost中就可以了。
ps:这里“工作目录名”是你的工作区名,比如你的工作区在e:/xx/aaa的话这里工作目录名就是aaa。 另外说下,你这个提示:
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class \'\' for connect URL \'null\'
是说JDBC驱动的问题哦,但你直接连接又可以。比较郁闷。而且我看你那样配置好像也没问题的。
你的驱动是什么版本的?我用mysql网站上提供的3.1版本按照我那个方法连接成功。 谢谢wool.
楼主把连接池配置写在server.xml文件里不太适合(这个方法就等同于在tomcat的admin里面配置),我觉得。
这个我知道,这样就像硬编码一样,我试过写在\\conf\\Catalina\\localhost\\dbtest.xml不行才这样连的。
mysql driver是3.1.8a hjack在 2005-6-12 22:32 发表:
谢谢wool.
这个我知道,这样就像硬编码一样,我试过写在\\conf\\Catalina\\localhost\\dbtest.xml不行才这样连的。
mysql driver是3.1.8a
刚才又去mysql网站上下载了新的驱动,替换掉我以前那个。3.1.8a是最新的了。我这边的还是没问题。
ps你成功了么? 正在试。。。 加油。。。
如果不行再共同探讨下。 郁闷呀,还是不行,还是那个org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class \'\' for connect URL \'null\' 你拷贝多份jdbc驱动到WEB-INF/lib下试试。 暂时还不知道是什么问题。。 无理由呀。。。
我的tomcat是5.5.9
jdk是1.5.0
会不会关这个事呀??? 啊周又来这边吹水。 hjack在 2005-6-12 23:31 发表:
无理由呀。。。
我的tomcat是5.5.9
jdk是1.5.0
会不会关这个事呀???
哦。。。估计跟这个有关。。。
我测试环境系tomcat4.0.28,,,jdk1.4.2。。。
去google下系埋这个问题。。。
一齐啦,找到原因就贴出来分享下。。。 真的是tomcat的问题呀。
我从apache那里下了个tomcat4.1.3试了一下,得左啦。
tomcat5真的有bug呀。 ^_^TOMCAT5 系列真的很有问题~~~
在4.1下用<@pageconten=****>的
在5系列一定要用<@ page language=java conten= ***>才行~
还有一些中文显示问题~
楼主说的问题等。。。 启动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