我自JSP页面里通过JNDI读取tomcat的服务器配置,但是运行报错如下:
HTTP Status 500 - An exception occurred processing JSP page /First.jsp at line 44type Exception reportmessage An exception occurred processing JSP page /First.jsp at line 44description The server encountered an internal error that prevented it from fulfilling this request.exceptionorg.apache.jasper.JasperException: An exception occurred processing JSP page /First.jsp at line 4441:  Context ctx = new InitialContext();
42:  DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/testdb");
43:  if (ds == null) return;
44:  Connection conn = ds.getConnection();
45:  Statement stmt = conn.createStatement();
46:  ResultSet rs = stmt.executeQuery("select * from news_inf");
47:  while (rs.next()) {我的tomcat服务器conf目录下context.xml配置如下:
<Context>    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->    <!-- Uncomment this to enable Comet connection tacking (provides events
         on session expiration as well as webapp lifecycle) -->
    <!--
    <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
    -->   <Resource
       name="jdbc/testdb"
       auth="Container"
       type="javax.sql.DataSource"
       driverClassName="com.mysql.jdbc.Driver"
       url="jdbc:mysql://localhost:3306/javaee"
       username="root"
       password="123456"
       maxActive="5"
       maxIdle="2" 
       maxWait="10000"/>
</Context>
项目中WEB-INF目录下web.xml配置如下:
<?xml version="1.0" encoding="gbk"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>MySQLJSP</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<resource-ref>
<description>MySQL DataSource</description>
<res-ref-name>jdbc/testdb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
仔细看了也不知道哪里写错了,请高手指点!

解决方案 »

  1.   

    type Exception reportmessage An exception occurred processing JSP page /First.jsp at line 44description The server encountered an internal error that prevented it from fulfilling this request.exceptionorg.apache.jasper.JasperException: An exception occurred processing JSP page /First.jsp at line 4441:  Context ctx = new InitialContext();
    42:  DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/testdb");
    43:  if (ds == null) return;
    44:  Connection conn = ds.getConnection();
    45:  Statement stmt = conn.createStatement();
    46:  ResultSet rs = stmt.executeQuery("select * from news_inf");
    47:  while (rs.next()) {
    Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)root causejavax.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:912)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:841)
    org.apache.jsp.First_jsp._jspService(First_jsp.java:134)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)root causeorg.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
    org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1452)
    org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371)
    org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
    org.apache.jsp.First_jsp._jspService(First_jsp.java:112)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)root causejava.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.createConnectionFactory(BasicDataSource.java:1437)
    org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371)
    org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
    org.apache.jsp.First_jsp._jspService(First_jsp.java:112)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)note The full stack trace of the root cause is available in the Apache Tomcat/7.0.42 logs.
    Apache Tomcat/7.0.42
      

  2.   

    你是不是用的 MyEclipse 自带的 tomcat 调试的?MyEclipse 默认使用它自带的 tomcat。
    你把它改成你自己安装的 tomcat 试试。
      

  3.   

    1.server.xml 仔细核对  resoures 标签 的各属性 书否配错,
    2.查看你版本 Tomcat 5.5 版本以上 是不是 。
    3.运行结果要页面得到,不要到java程序得到
      

  4.   

    org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'你JDBC的 dirver class 和 URL 怎么都是空啊~?
      

  5.   

    我使用的是Eclipse,用的是自己安装的tomcat 7.0
      

  6.   

    这些信息不是都写在配置文件里读取的吗?JNDI 要配置 GlobalNamingResources 这个tomcat都带有文档的,你可以看看
    <GlobalNamingResources ...>
      ...
      <Resource name="jdbc/EmployeeDB" auth="Container"
                type="javax.sql.DataSource"
         description="Employees Database for HR Applications"/>
      ...
    </GlobalNamingResources>
      

  7.   

    启动tomcat http://localhost:8080/docs/jndi-resources-howto.html
      

  8.   

    这些信息不是都写在配置文件里读取的吗?JNDI 要配置 GlobalNamingResources 这个tomcat都带有文档的,你可以看看
    <GlobalNamingResources ...>
      ...
      <Resource name="jdbc/EmployeeDB" auth="Container"
                type="javax.sql.DataSource"
         description="Employees Database for HR Applications"/>
      ...
    </GlobalNamingResources>
    这个是要写在哪个文件里的,之前在网上也找过一些资料,很多只说明配置context.xml和web.xml
      

  9.   

    这些信息不是都写在配置文件里读取的吗?JNDI 要配置 GlobalNamingResources 这个tomcat都带有文档的,你可以看看
    <GlobalNamingResources ...>
      ...
      <Resource name="jdbc/EmployeeDB" auth="Container"
                type="javax.sql.DataSource"
         description="Employees Database for HR Applications"/>
      ...
    </GlobalNamingResources>
    这个是要写在哪个文件里的,之前在网上也找过一些资料,很多只说明配置context.xml和web.xml编辑server.xml文件。 搜JNDI
    可以看到下面这块代码 ,就写这。话说这种配置的东西就看 软件附带的文档,很详细,还有例子, 比在网上乱搜好多了。
    =============================================  <!-- Global JNDI resources
           Documentation at /docs/jndi-resources-howto.html
      -->
      <GlobalNamingResources>
        <!-- Editable user database that can also be used by
             UserDatabaseRealm to authenticate users
        -->
        <Resource name="UserDatabase" auth="Container"
                  type="org.apache.catalina.UserDatabase"
                  description="User database that can be updated and saved"
                  factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
                  pathname="conf/tomcat-users.xml" />
      </GlobalNamingResources>
      

  10.   

    http://localhost:8080/manager/text/resources
    可以看到tomcat里配置的JNDI
      

  11.   

    这些信息不是都写在配置文件里读取的吗?JNDI 要配置 GlobalNamingResources 这个tomcat都带有文档的,你可以看看
    <GlobalNamingResources ...>
      ...
      <Resource name="jdbc/EmployeeDB" auth="Container"
                type="javax.sql.DataSource"
         description="Employees Database for HR Applications"/>
      ...
    </GlobalNamingResources>
    这个是要写在哪个文件里的,之前在网上也找过一些资料,很多只说明配置context.xml和web.xml编辑server.xml文件。 搜JNDI
    可以看到下面这块代码 ,就写这。话说这种配置的东西就看 软件附带的文档,很详细,还有例子, 比在网上乱搜好多了。
    =============================================  <!-- Global JNDI resources
           Documentation at /docs/jndi-resources-howto.html
      -->
      <GlobalNamingResources>
        <!-- Editable user database that can also be used by
             UserDatabaseRealm to authenticate users
        -->
        <Resource name="UserDatabase" auth="Container"
                  type="org.apache.catalina.UserDatabase"
                  description="User database that can be updated and saved"
                  factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
                  pathname="conf/tomcat-users.xml" />
      </GlobalNamingResources>
    按照你说的配置了还是不行,报一样的错