tomcat5.027报Cannot load JDBC driver的错误

AiQun 2005-08-14 02:16:25
我前几天做好了一个例子,使用tomcat连接池连接mssql数据,当时
msbase.jar
mssqlserver.jar
msutil.jar
三个文件是放在的web-info/lib目录内
测试通过了

今天又修改了一些程序代码重新启动这个应用.可是tomcat报
org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.microsoft.jdbc.sqlserver.SQLServerDriver'
错误.

然后我把这个应用及tomcat 池连接池配置.xml文件配置到另外一台机器上
ms的三个包仍然放在应用的web-info/lib目录内,tomcat版本是一样的.
测试通过
为什么产生这样的现象?

======================tomcat 池连接池配置==========================
<Context path="/example" docBase="G:/java/workspace/example/WebRoot"
debug="0" privileged="true">
<Resource name="jdbc/example"
auth="Container"
type="javax.sql.DataSource"/>

<ResourceParams name="jdbc/example">
<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>

<!-- MSSQLserver dB username and password for dB connections -->
<parameter>
<name>username</name>
<value>sa</value>
</parameter>
<parameter>
<name>password</name>
<value>555</value>
</parameter>

<!-- Class name for mssqlserver JDBC driver -->
<parameter>
<name>driverClassName</name>
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</parameter>

<!-- The JDBC connection url for connecting to your mssqlserver dB.-->
<parameter>
<name>url</name>
<value>jdbc:microsoft:sqlserver://192.168.19.169:1433;databasename=pubs</value>
</parameter>

<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>

</ResourceParams>
</Context>


==================web.xml========================
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>Struts </display-name>
<filter>
<filter-name>SetCharacterEncoding</filter-name>
<filter-class>com.titans.util.web.character.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>gbk</param-value>
</init-param>
<init-param>
<param-name>ignore</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SetCharacterEncoding</filter-name>
<servlet-name>action</servlet-name>
</filter-mapping>


<listener>
<listener-class>com.titans.util.web.online.OnlineCounterListener</listener-class>
</listener>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/config/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>config/login</param-name>
<param-value>/WEB-INF/config/struts-config-login.xml</param-value>
</init-param>
<init-param>
<param-name>config/main</param-name>
<param-value>/WEB-INF/config/struts-config-main.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>application</param-name>
<param-value>ApplicationResources</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<taglib>
<taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
<taglib-location>/WEB-INF/tags/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
<taglib-location>/WEB-INF/tags/struts-html.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
<taglib-location>/WEB-INF/tags/struts-logic.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-template.tld</taglib-uri>
<taglib-location>/WEB-INF/tags/struts-template.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-tiles.tld</taglib-uri>
<taglib-location>/WEB-INF/tags/struts-tiles.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-nested.tld</taglib-uri>
<taglib-location>/WEB-INF/tags/struts-nested.tld</taglib-location>
</taglib>

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


==========================testDb.jsp======================
<%@ page contentType="text/html; charset=GBK"%>
<html>
<head>
<title>DB Test</title>
</head>
<body>
<%@ page import="javax.naming.*" %>
<%@ page import="javax.sql.*" %>
<%@ page import="java.sql.*" %>
<%@ page import="com.titans.hibernate.*" %>
<%@ page import="com.titans.util.tools.Config" %>
<%@ page import="org.apache.log4j.Logger" %>
<%@ page import="org.apache.log4j.xml.DOMConfigurator"%>
<%

String foo = "连接池测试失败!";
int bar = -1;
Logger log = null;
try{
log = Config.getLogger(Config.class);
Context ctx = new InitialContext();
if(ctx == null )
throw new Exception("错误:连接池没有连接成功!");
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/example");

if (ds != null) {
Connection conn = ds.getConnection();
if(conn != null) {
foo = "Got Connection "+conn.toString();
Statement stmt = conn.createStatement();
stmt.executeUpdate("use pubs");
ResultSet rst = stmt.executeQuery("select * from orders");
log.info("select * from orders");
if(rst.next()) {
bar=rst.getInt("OrderID");
foo=rst.getString("CustomerID") + " ,连接池连接成功!";
}
conn.close();
}
}

}catch(Exception e) {
e.printStackTrace();
if(log!=null)
log.error("testDb.jsp错误:",e);
}

%>

<h2>Ms sql server 2000 java search Results</h2>
Foo <%= foo %><br/>
Bar <%= bar %>
</body>
</html>

...全文
208 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
OnlyFor_love 2005-10-29
  • 打赏
  • 举报
回复
把classpath中的$TOMCAT_HOME$\common\lib去掉,然后仍旧把那些jdbc驱动包放到你的工程文件的lib下就可以了
humanity 2005-08-23
  • 打赏
  • 举报
回复
common 就是 Tomcat 和你的程序都用的“公用”库,

因为连接池是 Tomcat 管理,他在你的程序启动之前就加载 资源,
这个时候你的程序的加载器还未启动,而且即使启动了,父级 类加载器也无法访问 子级 加载器加载的资源, 这样 服务器就无法找到类库, 因为 驱动被子级 类加载器加载,服务器却无法访问。

子级 类 加载器 却能访问 父类加载器加载 的资源 ,看一下 Tomcat 类加载器层次 的文章,一篇就明白。
AiQun 2005-08-22
  • 打赏
  • 举报
回复
我的本意是说为什么第一次放在应用的lib下是可以运行的.为什么非得放到 $TOMCAT_HOME$\common\lib 下?
zling1981 2005-08-22
  • 打赏
  • 举报
回复
因为你在环境变量里设了CLASSPATH的路径是$TOMCAT_HOME$\common\lib 。。。
bohemia 2005-08-20
  • 打赏
  • 举报
回复
如楼上所说。
AiQun 2005-08-18
  • 打赏
  • 举报
回复
帖子提前太频繁了!!!
Little_qd 2005-08-18
  • 打赏
  • 举报
回复
将jar放到 $TOMCAT_HOME$\common\lib 下

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧