在server.xml的context元素中加入以下代码:<Resource name="jdbc/myoracle" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/myoracle" >
<parameter>  
  <name>validationQuery</name>  
     <value>true</value>  
 </parameter>   
   <parameter>
     <name>driverClassName</name>
     <value>oracle.jdbc.driver.OracleDriver</value>
   </parameter>
   <parameter>
     <name>url</name>
    <value>jdbc:oracle:thin:@localhost:1521:SHORTME</value>
   </parameter>
   <parameter>
     <name>username</name>
     <value>scott</value>
   </parameter>
   <parameter>
     <name>password</name>
     <value>tiger</value>
   </parameter>
   <parameter>
     <name>maxActive</name>
     <value>30</value>
   </parameter>
   <parameter>
     <name>maxIdle</name>
     <value>10</value>
   </parameter>
   <parameter>
     <name>maxWait</name>
     <value>1000</value>
   </parameter>
</ResourceParams>

在web.xml里加入以下

<resource-ref>
      <res-ref-name>jdbc/myoracle</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>在测试的时候:    Context initCtx = new InitialContext();
    Context ctx = (Context) initCtx.lookup("java:comp/env");
    Object obj = (Object) ctx.lookup("jdbc/myoracle");
    javax.sql.DataSource ds = (javax.sql.DataSource)obj;
    
    Connection conn=ds.getConnection();运行提示:
Exception in JSP...绿色的部分出错了。请问是什么原因呢?不使用连接池,一般连接可以访问到oracle的。

解决方案 »

  1.   


    <?xml version="1.0" encoding="UTF-8"?>
    <Context>
      <Resource
        name="jdbc/mybookshop"
        type="javax.sql.DataSource"
        maxActive="4"
        maxIdle="2"
        username="sa"
        maxWait="5000"
        validationQuery="select 1"
        driverClassName="oracle.jdbc.driver.OracleDriver" 
        password=""
        url="jdbc:oracle:thin:@localhost:1521:SHORTME"/>
    </Context>web.xml 里面不需要配置吧
      

  2.   

    http://blog.csdn.net/mir2ming/archive/2007/09/27/1803833.aspx看下我这个文章吧,假如还不可以,再说吧
      

  3.   


    错误提示
    org.apache.jasper.JasperException: Exception in JSP: /index.jsp:1411:     Object obj = (Object) ctx.lookup("jdbc/myoracle");
    12:     javax.sql.DataSource ds = (javax.sql.DataSource)obj;
    13:     
    14:     Connection conn=ds.getConnection();
    15:     
    16:     //创建可滚动的结果集
    17:     Statement stmt=conn.createStatement(
    Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:451)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:355)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.zyy.cho2.servlet.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:38)root causejavax.servlet.ServletException: Cannot create JDBC driver of class '' for connect URL 'null'
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:841)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:774)
    org.apache.jsp.index_jsp._jspService(index_jsp.java:194)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.zyy.cho2.servlet.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:38)root causeorg.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.index_jsp._jspService(index_jsp.java:58)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.zyy.cho2.servlet.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:38)root causejava.sql.SQLException: No suitable driver
    java.sql.DriverManager.getDriver(DriverManager.java:243)
    org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1143)
    org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
    org.apache.jsp.index_jsp._jspService(index_jsp.java:58)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.zyy.cho2.servlet.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:38)
      

  4.   


    是额。这个url设置和普通连接数据库时的值一样吗?我设置的是一样的、
      

  5.   

    No suitable driver 
      如果URL没错,还个驱动包试试。!
      

  6.   

    http://blog.csdn.net/mir2ming/archive/2007/09/27/1803833.aspx
    自己按步骤弄下,有问题再发
      

  7.   

    是tomcat5.0吗?5.5以上的不这么配了tomcat连接池的配置是非常简单的,5.5以上的配置,在不改变tomcat的任何配置的情况下建立连接池:1 在项目的WebRoot下建立META-INF文件夹2 在META-INF下建立context.xml文件3 在context.xml中加入如下样例代码XML code    <Context path="/appName" docBase="appName"
        debug="5" crossContext="true" reloadable="false"
        cachingAllowed="true" cacheMaxSize="20480"
        cacheTTL="10000">
        <Resource name="jdbc/mysql" auth="Container" removeAbandoned="true"
        removeAbandonedTimeout="60" logAbandoned="true"
        type="javax.sql.DataSource" maxActive="50" maxIdle="10"
        maxWait="10000" username="root" password="root"
        driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://localhost:3306/dbname?autoReconnect=true" />
        </Context>在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>
    以上配置文件,参数自己在重新设置设置,别忘了把驱动放到你的项目的classpath下
      

  8.   


    不行现在在tomcat的命令窗口看到“LifecycleException:No userdatabase component found under key userDatabase.是说我的数据库名设置错了吗?
      

  9.   

    web.xml里不配 你平时怎么用的哦
      

  10.   

    ResourceParams 是不是应该配置在Resource 里?
    因为第一行已经把Resource 结束了  />我以前配置JNDI的时候都是这样配置的:<Resource
                  name="jdbc/web"
                  auth="Container"
                  type="javax.sql.DataSource"
                  factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
                  maxActive="100"
                  maxIdle="30"
                  maxwait="5000"
                  username="数据库de用户名"
                  password="数据库de密码"
                  driverClassName="oracle.jdbc.driver.OracleDriver"
                  url="jdbc:oracle:thin:@localhost:1521:SHORTME"
           />如果说错了见谅~~~参考下这个:
    http://blog.csdn.net/xiaobaitu7788/archive/2008/02/26/2120429.aspx
      

  11.   

    测试代码怎么写?学习学习我用的是tomcat5.5可以吗?
      

  12.   

    测试代码:Context context = new InitialContext();   
    //获得数据源   
    DataSource ds = context.lookup("java:comp/env/jdbc/mysql");   
    //获取连接   
    Connection conn = ds.getConnection();  
      

  13.   

    url 改下试试   用户名/密码@127.0.01
      

  14.   

        21楼的就可以。。网上也有很多啊!!!
    try{
                         
              Context initCtx = new InitialContext();
              Context ctx = (Context) initCtx.lookup("java:comp/env");
            testDB是你自己是设置的
              Object obj = (Object) ctx.lookup("jdbc/testDB");   
              javax.sql.DataSource ds = (javax.sql.DataSource)obj;
              Connection conn = ds.getConnection();    }
     catch(Exception e)
     {  
       System.out.print(e.toString());
     }
      

  15.   


    我看这个提示是因为server.xml的这句话:<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
                 resourceName="UserDatabase"/>
    这里还要配置吗?我的用户名和密码都对的
      

  16.   

    javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initialnull这是怎么回事啊?
      

  17.   

    我的问题解决了。我用的是tomcat5.5.26。。配置连接池如下:在server.xml里的<host></host>,加入:<Context path="/zyy/SlProject/WebRoot" docBase="D:/apache-tomcat-5.5.26/webapps/zyy/SlProject/WebRoot" reloadable="true" >
    <Resource name="jdbc/shortme" auth="Container"
                type="javax.sql.DataSource" username="scott" password="tiger"
                driverClassName="oracle.jdbc.driver.OracleDriver"
                url="jdbc:oracle:thin:@localhost:1521:shortme"
                maxActive="8" maxIdle="4" />
    </Context>其中 path、docBase是不一样的。你的web目录放在那里,这两个值就指向那个目录。
    其中Resource里的name属性shortme也是不一样的,可以自己取值。
    其中另一处的修改就是让我想不通的地方
    realm元素的配置。。之前我的错误提示
     LifecycleException:No userdatabase component found under key userDatabase
    在server.xml里就看到这里有个
    <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
                 resourceName="UserDatabase"/>这里有个userDatabase。
    于是我把这句话下面一段被注释的地方去掉注释被改为:
    <Realm  className="org.apache.catalina.realm.JDBCRealm"
                 driverName="oracle.jdbc.driver.OracleDriver"
              connectionURL="jdbc:oracle:thin:@localhost:1521:SHORTME"
             connectionName="scott" connectionPassword="tiger"
            />  我看下面还有mysql的一段。由于我用的是oracle。所以如此。。好了。至此server.xml里的配置完毕了。
    web.xml里配置:<resource-ref>
            <description>
                Resource reference to a factory for java.sql.Connection
                instances that may be used for talking to a particular
                database that is configured in the server.xml file.
            </description>
            <res-ref-name>jdbc/shortme</res-ref-name>
            <res-type>javax.sql.DataSource</res-type>
            <res-auth>Container</res-auth>
    </resource-ref>记得要跟你的server.xml里的一致哦!!我搜索了很多,大致都是这样子的。可是没人说要去掉<Realm>那一段的。虽然我的问题解决了,可是我还是不明白<Realm>那里怎么回事。高人请指教!!!
      

  18.   


    可能你的driverclassname配置错了吧。。你检查一下,应该是你的url,driverclassname==参数设置错了。
      

  19.   

    你把你的数据源不放在server.xml,把用到的jar放在common\lib
    在这里conf\Catalina\localhost建一个跟你项目名字一样的文件,以.xml结尾,把数据源也放在这里。