配置tomcat数据源的误区

本文介绍了如何配置Tomcat数据源,包括将数据库驱动放入lib目录、修改server.xml和web.xml文件,以及通过代码获取数据源和连接。同时,文章指出了一种常见误区,即在main方法中直接测试数据源会导致`javax.naming.NoInitialContextException`,因为这是由于测试环境与服务器环境不一致造成的。正确的测试方式应使用JSP或Servlet进行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何配置:

1.将数据库驱动程序拷贝到tomcat/common/lib目录下面,不同数据库的驱动不一样,有服务商提供。
2.修改congif/server.xml文件,在<host>配置节点下面加上资源节点,如下:

<Context path="/HibernateTest" docBase="HibernateTest">
   <Resource name="jdbc/testds"
    auth="Container"
    type="javax.sql.DataSource"
    username="hicss"
    password="hicss"
    driverClassName="oracle.jdbc.driver.OracleDriver"
    url="jdbc:oracle:thin:@localhost:1521:icss"
    maxActive="8"
    maxIdle="4"/>
  </Context>

3.修改Web应用WEB-INF/web.xml文件,加上Resource-Def,如下://其实这个不要也可以的
  <resource-ref>
      <description>DBConnection</description>
      <res-ref-name>jdbc/testds</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>
4.重新启动Web应用,在Web应用中可以通过下面的代码来获取数据源和数据库连接:
javax.naming.InitialContext context = new javax.naming.InitialContext();
DataSource ds = (DataSource) cxt.lookup( "java:/comp/env/jdbc/TestDB" );
connection = (Connection)ds.getConnection();

 

误区:

这样配置完成了,但往往总有些朋友习惯性地写一个main方法去测试这个数据源,从而引起

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 ccnu.cs.jcoder.dbsrc.TestDS.<init>(TestDS.java:15)
 at ccnu.cs.jcoder.dbsrc.TestDS.main(TestDS.java:35)

异常.

原因是:

java单元的环境是jdk,用MAIN方法执行的程序属于普通应用程序,使用的是我们的JDK环境;而我们的数据连接池是在tomcat服务器中配置的,他的环境是TOMCAT服务器,所以大家测试的时候直接用JSP页面或SERVLET就可以了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值