错误提示:org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null' 
%TOMCAT_HOME%/conf/server.xml、%APP_HOME%/WEB-INF/web.xml、
%TOMCAT_HOME%/conf/Catalina\localhost\xx.xml均已配置,
数据库sqlserver的sp4已打
用Class.forName()方式能够正常访问数据库
错误出在ds.getConnection();这一行,请问何解?

解决方案 »

  1.   

    补充:三个jar文件也拷贝到%TOMCAT_HOME%/common/lib目录下了
      

  2.   

    server.xml<?xml version='1.0' encoding='utf-8'?>
    <Server>
      <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"/>
      <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
      <GlobalNamingResources>
        <Environment name="simpleValue" type="java.lang.Integer" value="30"/>
        <Resource auth="Container" description="User database that can be updated and saved" name="UserDatabase" type="org.apache.catalina.UserDatabase"/>
        <Resource name="jdbc/WebDB" type="javax.sql.DataSource"/>
        <ResourceParams name="UserDatabase">
          <parameter>
            <name>factory</name>
            <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
          </parameter>
          <parameter>
            <name>pathname</name>
            <value>conf/tomcat-users.xml</value>
          </parameter>
        </ResourceParams>
        <ResourceParams name="jdbc/WebDB">
          <parameter>
            <name>maxWait</name>
            <value>5000</value>
          </parameter>
          <parameter>
            <name>maxActive</name>
            <value>4</value>
          </parameter>
          <parameter>
            <name>password</name>
            <value>asdfgyuiop</value>
          </parameter>
          <parameter>
            <name>url</name>
            <value>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=WebDB</value>
          </parameter>
          <parameter>
            <name>driverClassName</name>
            <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
          </parameter>
          <parameter>
            <name>maxIdle</name>
            <value>2</value>
          </parameter>
          <parameter>
            <name>username</name>
            <value>sa</value>
          </parameter>
        </ResourceParams>
      </GlobalNamingResources>
      <Service name="Catalina">
        <Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" port="80" redirectPort="8443" maxSpareThreads="75" maxThreads="150" minSpareThreads="25">
        </Connector>
        <Connector port="8009" protocol="AJP/1.3" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" redirectPort="8443">
        </Connector>
        <Engine defaultHost="localhost" name="Catalina">
          <Host appBase="d:\java" name="localhost">
            <Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_log." suffix=".txt" timestamp="true"/>
          </Host>
          <Logger className="org.apache.catalina.logger.FileLogger" prefix="catalina_log." suffix=".txt" timestamp="true"/>
          <Realm className="org.apache.catalina.realm.UserDatabaseRealm"/>
        </Engine>
      </Service>
    </Server>
      

  3.   

    web.xml<?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">  <display-name>Welcome to Tomcat</display-name>
      <description>
         Welcome to Tomcat
      </description>
    <!-- JSPC servlet mappings start -->    <servlet>
            <servlet-name>ywb</servlet-name>
            <servlet-class>org.apache.jsp.index_jsp</servlet-class>
        </servlet>    <servlet-mapping>
            <servlet-name>ywb</servlet-name>
            <url-pattern>/index.jsp</url-pattern>
        </servlet-mapping>
        
        <servlet-mapping>
            <servlet-name>ywb</servlet-name>
            <url-pattern>/index.htm</url-pattern>
        </servlet-mapping><!-- JSPC servlet mappings end -->
     <resource-ref>
       <description>DB Connection</description>
       <res-ref-name>jdbc/WebDB</res-ref-name>
       <res-type>javax.sql.DataSource</res-type>
       <res-auth>Container</res-auth>
     </resource-ref>
    </web-app>
      

  4.   

    test.xml<?xml version='1.0' encoding='utf-8'?>
    <Context displayName="LyBBS" docBase="test" path="/test" workDir="work\Catalina\localhost\test">
    <ResourceLink global="jdbc/WebDB" name="jdbc/WebDB" type="javax.sql.DataSource"/>
    </Context>
      

  5.   

    <%@page language="java" contentType="text/html;charset=gb2312"%>
    <%@page import="javax.naming.*"%>
    <%@page import="javax.sql.*"%>
    <%@page import="java.sql.*"%>
    <%
      Context ctx;
      DataSource ds;
      Connection cn;
      Statement stm;
      ResultSet rt;
     
     try{
      Context initCtx = new InitialContext(); 
      ctx = (Context) initCtx.lookup("java:comp/env"); 
      ds = (DataSource)ctx.lookup("WebDB");
      if (ds!=null) out.println("aa<BR>");
      cn = ds.getConnection("sa","asdfgyuiop");
      out.println("bb<BR>");
      stm = cn.createStatement();
      rt = stm.executeQuery("select * from entry");
      while(rt.next()){
        out.println(rt.getString(1)+"<BR>");
      }
      rt.close();
      stm.close();
      cn.close();
     }
     catch(Exception e){
      out.println(e);
     }
    %>
      

  6.   

    初步判断问题在server.xml文件
    我这里的Resource和ResourceParams是在<Context></Context>之间定义的,而你的不是我在帮助文档上看到这样一句,你试试看!?
    Add this in between the </Context> tag of the examples context and the </Host> tag closing the localhost definition
    <Context path="/DBTest" docBase="DBTest"
            debug="5" reloadable="true" crossContext="true">  <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">
    以下和你一样,略
      

  7.   

    数据源应该配在这个test.xml文件中,这个文件是放在conf\Catalina\localhost目录下
    test.xml<?xml version='1.0' encoding='utf-8'?>
    <Context crossContext="true" displayName="research" docBase="f:/research/mobile" path="/test" reloadable="true">
      <Resource name="research" type="javax.sql.DataSource"/>
      <ResourceParams name="WebDB">
        <parameter>
          <name>maxWait</name>
          <value>5000</value>
        </parameter>
        <parameter>
          <name>maxActive</name>
          <value>500</value>
        </parameter>
        <parameter>
          <name>password</name>
          <value>123</value>
        </parameter>
        <parameter>
          <name>url</name>
          <value>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=WebDB</value>
        </parameter>
        <parameter>
          <name>driverClassName</name>
          <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
        </parameter>
        <parameter>
          <name>maxIdle</name>
          <value>500</value>
        </parameter>
        <parameter>
          <name>username</name>
          <value>sa</value>
        </parameter>
      </ResourceParams>
    </Context>程序中访问就跟你说的一样的了!
      

  8.   

    一般单个应用的话,为节约TOMCAT资源,都只配置数据源的局部变量,不建议在sever.xml文件中配全局变量!
      

  9.   

    ok,多谢djpsunday(少壮且为风流事) ,终于搞定了。