我是在MyEclipse中有tomcat中发布的项目:项目自动放在了tomcat的webpapps目录下:
我用的是tomcat5。5,以下是:tomcat,server.xml配置部分:
<Context path="/shop" docBase="D:\Program Files\Tomcat 5.5\webapps"
         debug= "99" reloadable="true" crossContext="true" verbosity="DEBUG">
        <Resource name="jdbc/shop" auth="Container"
                  type="javax.sql.DataSource" password="javajsp"
                  driverClassName="com.mysql.jdbc.Driver"
                  maxIdle="2"
                  maxWait="5000"
                  username="root"
                  url="jdbc:mysql://localhost:3306/shop?autoReconnect=true"
                  maxActive="4"/>
     </Context>
下面的是项目: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/shop
         </res-ref-name>
         <res-type>
           javax.sql.DataSource
         </res-type>
         <res-auth>
           Container
         </res-auth>
    </resource-ref>
下面的是得到connection的方法:
public static Connection getConnectionEx() 
  {
    Connection con = null;
    try
    {
      DataSource ds = null;
      Context initCtx = new InitialContext();
      Context envCtx = (Context)initCtx.lookup("java:comp/env");
      ds = (DataSource)envCtx.lookup("jdbc/shop");
      if (ds != null)
      {
        con = ds.getConnection();
      }
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }
    return con;
  }

解决方案 »

  1.   

    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.initial
    at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
    at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)
    at javax.naming.InitialContext.lookup(Unknown Source)
    at org.cy.dbResource.DBPool.getConnectionEx(DBPool.java:34)
    at org.cy.dbResource.DBPool.main(DBPool.java:101)
      

  2.   

    jdni没取道。
    Context envCtx = (Context)initCtx.lookup("java:comp/env");
          ds = (DataSource)envCtx.lookup("jdbc/shop"); 这两句有问题吧
      

  3.   

    Tomcat的Jndi初始化没成功,你Tomcat的全路径里有没有空格或中文字符?~
      

  4.   

    看下你的环境变量配置tomcat和java的都要正确
    我估计是lookup  comp/env的时候没找到
    因为他报这个么Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
      

  5.   

    你这种配置应该是tomcat5.5以前版本的配置方式,如tomcat5.0,tomcat5.5是不一样的。
    给你个王爷,自己看看试试
    http://mqzsweet.javaeye.com/blog/144738
      

  6.   

    我看不出他们有什么两样。
    ls你从哪里看出这是5.5以前的?
    再说了 5.x都是一样的吧
      

  7.   

    你配置出错了
       报的是(NoInitialContextException)没初始化上下文!
    可能是环境变量配置出错
      

  8.   

    楼上的yami251139说对了,的确  ds = (DataSource)envCtx.lookup("jdbc/shop"); 有问题,我下断点是,发现ds是null,但是不知道怎么解决
      

  9.   


    DataSource ds = context.lookup("java:comp/env/jdbc/shop"); 
    //试试
      

  10.   

    如果用jsp测试报错如下:
    org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:780)
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
    at org.cy.dbResource.DBPool.getConnectionEx(DBPool.java:38)
    at org.apache.jsp.index_jsp._jspService(org.apache.jsp.index_jsp:72)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:667)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
    at java.lang.Thread.run(Unknown Source)
    Caused by: java.sql.SQLException: No suitable driver
    at java.sql.DriverManager.getDriver(Unknown Source)
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:773)
    ... 23 more
      

  11.   

    跟你后面lookup的代码没啥关系,关键是你的jndi都没初始化成功。
    InitialContext得不到它初始化所需要的参数。
      

  12.   

    server.xml  <GlobalNamingResources>    <!-- Test entry for demonstration purposes -->
        <Environment name="simpleValue" type="java.lang.Integer" value="30"/>    <!-- 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" />
      <Resource name="syjTest" 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="syjTest">
          <parameter>
            <name>maxWait</name>
            <value>5000</value>
          </parameter>
          <parameter>
            <name>maxActive</name>
            <value>4</value>
          </parameter>
          <parameter>
            <name>password</name>
            <value>11111111</value>
          </parameter>
          <parameter>
            <name>url</name>
            <value>jdbc:microsoft:sqlserver://localhost:1433;databaseName=pubs</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>
          <name>validationQuery</name>
          <value>select getdate()</value> 
        </ResourceParams>
      </GlobalNamingResources>
      

  13.   

    tomcat-5.5.20\conf\Catalina\localhost
    test.xml(用你的应用名字替换test)
    <?xml version='1.0' encoding='utf-8'?>
    <Context displayName="test" docBase="test" path="/test" workDir="work\Catalina\localhost\cqry">
      <ResourceLink global="syjTest" name="syjTest" type="javax.sql.DataSource"/>
    </Context>
      

  14.   

    jsp demo
    <%
    javax.naming.InitialContext ctx = null;
    javax.sql.DataSource ds = null;
    ctx = new javax.naming.InitialContext();
    ds = (javax.sql.DataSource) ctx.lookup("java:comp/env/syjTest");
    %>
      

  15.   

    专门针对5.5的官方文档
    http://tomcat.apache.org/tomcat-5.5-doc/jndi-datasource-examples-howto.html
      

  16.   

    Context envCtx = (Context)initCtx.lookup("java:comp/env/shop"); 
      

  17.   

     检查你的数据库驱动是不是放在tomcat的lib目录下,可能你放在的程序的lib目录下,我就遇到过这样的问题
      

  18.   

    mysql数据库驱动是不是放在tomcat的lib目录啊,
    还有就是怎么没看到你的数据库密码啊...