我用的是tomcat6.0 和mysql5.0
org.apache.jasper.JasperException: javax.servlet.ServletException: org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:541)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:417)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
root cause javax.servlet.ServletException: org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:850)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779)
org.apache.jsp.jdbc_jsp._jspService(jdbc_jsp.java:93)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
root cause org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1150)
org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
org.apache.jsp.jdbc_jsp._jspService(jdbc_jsp.java:69)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
root cause java.lang.NullPointerException
sun.jdbc.odbc.JdbcOdbcDriver.getProtocol(Unknown Source)
sun.jdbc.odbc.JdbcOdbcDriver.knownURL(Unknown Source)
sun.jdbc.odbc.JdbcOdbcDriver.acceptsURL(Unknown Source)
java.sql.DriverManager.getDriver(Unknown Source)
org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1143)
org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
org.apache.jsp.jdbc_jsp._jspService(jdbc_jsp.java:69)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
我的server.xml    <Context path="/Test" docBase="Test" debug="0" crosscontext="true" reloadable="true">
  <Resource name="jdbc/xk" auth="Container"
            type="javax.sql.DataSource"/>
  <ResourceParams name="jdbc/xk">
    <parameter>
      <name>factory</name>
      <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
    </parameter>
    <parameter>
      <name>username</name>
      <value>root</value>
    </parameter>
    <parameter>
      <name>password</name>
      <value>880610</value>
    </parameter>
    <parameter>
      <name>driverClassName</name>
      <value>com.mysql.jdbc.Driver</value>
    </parameter>
    <parameter>
      <name>url</name>
      <value>jdbc:mysql://localhost:3306/xk?useUnicode=true&amp;characterEncoding=gb2312</value>
    </parameter>
    <parameter>
      <name>maxActive</name>
      <value>20</value>
    </parameter>
    <parameter>
      <name>maxIdle</name>
      <value>5</value>
    </parameter>
    <parameter>
      <name>maxWait</name>
      <value>10000</value>
    </parameter>
  </ResourceParams>
  <ResourceLink global="jdbc/xk" name="jdbc/xk" type="javax.sql.DataSource"/>
</Context>web.xml
<resource-ref>
  <description>JDBC</description>
  <res-ref-name>jdbc/xk</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
 </resource-ref>content.xml 也和server.xml 做了相同的配置
不知道是哪里错了啊

解决方案 »

  1.   

    1)启动Tomcat服务器,打开浏览器,输入http://localhost:8080/admin(其中localhost是名称服务器或称为主机),
    进入管理界面的登陆页面,这时候请输入原来安装时要求输入的用户名和密码,登陆到管理界面,2)选择Resources-Data sources进入配置数据源界面,选择
     Data Source Actions ->选择Create New Data Source,进入配置详细信息界面
    主要内容例如下:
    JNDI Name:   ->jdbc/mysql
    Data Source URL  ->jdbc:mysql://localhost:3306/test
    JDBC Driver Class-> org.gjt.mm.mysql.Driver
    3)修改\conf\Catalina\localhost目录下建立一个xml文件,名称为你所发布的web应用的名称.xml,(如testpool.xml)打开添加内容如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <Context>
     <Resource
          name="jdbc/mysql"
          type="javax.sql.DataSource"
          password="123456"
          driverClassName="org.gjt.mm.mysql.Driver"
          maxIdle="2"
          maxWait="50"
          username="root"
          url="jdbc:mysql://localhost:3306/test"
          maxActive="4"/></Context>
    内容同conf/server.xml中<GlobalNamingResources>
     <Resource
          name="jdbc/mysql"
          type="javax.sql.DataSource"
          password="123456"
          driverClassName="org.gjt.mm.mysql.Driver"
          maxIdle="2"
          maxWait="50"
          username="root"
          url="jdbc:mysql://localhost:3306/test"
          maxActive="4"/>
      </GlobalNamingResources>

    少了这一步会报错:Cannot create JDBC driver of class '' for connect URL 'null'

    4)修改web.xml打开%TOMCAT_HOME%\conf\web.xml或yourwebapp/web-inf/web.xml,添加以下内容:
        <resource-ref>
        <description>DB Connection</description>
        <res-ref-name>jdbc/mysql</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
        </resource-ref>
        注意res-ref-name填写的内容要与在上文提到的JNDI Name名称一致。 
     到这里,配置工作就基本完成了!5)引用JNDI时用"java:comp/env/jdbc/mysql";
    建立文件测试 test.jsp:
    <%@page contentType="text/html;charset=utf-8" %>
    <%@page import="java.sql.*" %>
    <%@page import="javax.sql.*" %>
    <%@page import="javax.naming.*" %>
    <html>
    <head>
    <title>Tomcat连接池测试</title>
    </head>
    <body>
    <%
      Context ctx=new InitialContext();
      Connection conn=null;
      DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/mysql");
      conn=ds.getConnection();
      Statement stmt=conn.createStatement(ResultSet.CONCUR_READ_ONLY,ResultSet.CONCUR_UPDATABLE);
      ResultSet rs=stmt.executeQuery("select * from testexample");
      while(rs.next()){
      out.println(rs.getInt(1));
      out.println(rs.getString(2));
      out.println(rs.getString(3));
      }
      out.println("数据库操作成功!");
      rs.close();
      stmt.close();
      conn.close();
        
     %>
    </body>
    </html>
      

  2.   

    tomcat6.0与tomcat5.0中配置数据源的配置文件格式是不一样的
    tomcat5.0是以下格式配置:
    <Context path="/Test" docBase="Test" debug="0" crosscontext="true" reloadable="true"> 
      <Resource name="jdbc/xk" auth="Container" 
                type="javax.sql.DataSource"/> 
      <ResourceParams name="jdbc/xk"> 
        <parameter> 
          <name>factory </name> 
          <value>org.apache.commons.dbcp.BasicDataSourceFactory </value> 
        </parameter> 
        <parameter> 
          <name>username </name> 
          <value>root </value> 
        </parameter> 
        <parameter> 
          <name>password </name> 
          <value>880610 </value> 
        </parameter> 
        <parameter> 
          <name>driverClassName </name> 
          <value>com.mysql.jdbc.Driver </value> 
        </parameter> 
        <parameter> 
          <name>url </name> 
          <value>jdbc:mysql://localhost:3306/xk?useUnicode=true&amp;characterEncoding=gb2312 </value> 
        </parameter> 
        <parameter> 
          <name>maxActive </name> 
          <value>20 </value> 
        </parameter> 
        <parameter> 
          <name>maxIdle </name> 
          <value>5 </value> 
        </parameter> 
        <parameter> 
          <name>maxWait </name> 
          <value>10000 </value> 
        </parameter> 
      </ResourceParams> 
      <ResourceLink global="jdbc/xk" name="jdbc/xk" type="javax.sql.DataSource"/> 
    </Context> 
    tomcat6.0是按以下格式配置:
    <Resource 
          name="jdbc/mysql" 
          type="javax.sql.DataSource" 
          password="123456" 
          driverClassName="org.gjt.mm.mysql.Driver" 
          maxIdle="2" 
          maxWait="50" 
          username="root" 
          url="jdbc:mysql://localhost:3306/test" 
          maxActive="4"/> 
      </GlobalNamingResources> 最好的方法,就是按楼的方式配置
      

  3.   

    改了一下变成了Cannot load JDBC driver class 'com.mysql.jdbc.Driver'
    真郁闷
      

  4.   

    1楼的说得很对,2楼也说对了,3楼的情况应该是jar包的版本不对,建议用3.1.20以上的
      

  5.   

    1楼的说得很对,2楼也说对了,3楼的情况应该是jar包的版本不对,建议用3.1.20以上的
      

  6.   

    是mysql-connector-java-5.1.7,不会是这个问题吧
    搞了一下,又变成了Name jdbc is not bound in this Context