经过3个多小时的努力,配置JNDI数据源(主要是通过DBCP连接池)终于搞定~
还是Tomcat官方的说明好,不过全是英文的,大概还看得懂.
百度上那么花花绿绿的太多了,一个也没成功!...
本例使用的数据库为Ms SQL Server 2000,对于其它数据库只是修改一下相应的参数即可,
服务器是Tomcat5.5, 与之间的版本配置连接池最简便
自己总结了一下,希望起到一个抛砖引玉的作用

总结:
第一步:

将驱动程序(jar包)放到tomcat安装目录下的common\lib文件夹下
第二步:

在Tomcat的webapps目录随便创建一个工程目录,例如myjdbc。在myjdbc目录下创建META-INF目录,在此目录下创建一个context.xml文件,里面的内容如下:

<?xml version="1.0" encoding="UTF-8"?> 
<Context>
 <Resource name="jdbc/test" 
  auth="Container" 
  type="javax.sql.DataSource"
         maxActive="100" 
  maxIdle="30" 
  maxWait="10000"
         username="sa" password="" 
  driverClassName="net.sourceforge.jtds.jdbc.Driver"
         url="jdbc:jtds:sqlserver://localhost/pubs"/>
 </Context>

附注如下:
Tomcat标准数据源资源工厂配置项如下:
* driverClassName - 所使用的JDBC驱动类全称。
* maxActive - 同一时刻可以自数据库连接池中被分配的最大活动实例数。
* maxIdle - 同一时刻数据库连接池中处于非活动状态的最大连接数。
* maxWait - 当连接池中没有可用连接时,连接池在抛出异常前将等待的最大时间,单位毫秒。
* password - 传给JDBC驱动的数据库密码。
* url - 传给JDBC驱动的连接URL。
* user - 传给JDBC驱动的数据库用户名。
* validationQuery - 一个SQL查询语句,用于在连接被返回给应用前的连接池验证。
* 如果指定了该属性,则必为至少返回一行记录的SQL SELECT语句。

jdbc/test是数据源的名称(随意写,要和web.xml文件中 <res-ref-name>jdbc/test</res-ref-name> 一样即可),
其他的参数按照自己的实际情况进行修改,例如数据库的名称、账号、密码。

第三步:

在myjdbc目录下创建WEB-INF目录,创建web.xml文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
version="2.4"> 

    <resource-ref> 
        <description>DB Connection</description> 
        <res-ref-name>jdbc/test</res-ref-name> 
        <res-type>javax.sql.DataSource</res-type> 
        <res-auth>Container</res-auth> 
    </resource-ref> 
</web-app> 

说明:
<resource-ref>
<descrtiption>引用资源说明</descrtiption>
<res-ref-name>引用资源的JNDI名</res-ref-name>
<res-type>引用资源的类名</res-type>
<res-auth>管理者(Container)</res-auth><!--Container-容器管理 Application-Web应用管理-->
</resource-ref>
第四步:

写个jsp,试一下吧!

<%@ page contentType="text/html;charset=utf-8"%>
<%@ page import="java.sql.*,javax.sql.*,javax.naming.*,com.DBConnection" %>
<%
  try
  {
   //初始化查找命名空间
   Context ctx = new InitialContext(); 
   //InitialContext ctx = new InitialContext();亦可 
   //找到DataSource,对名称进行定位java:comp/env是必须加的,后面跟你的DataSource名
   DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/test");
   //取出连接
   Connection conn = ds.getConnection();
System.out.println("connection pool connected !!");   
  } catch (NamingException e) {
   System.out.println(e.getMessage());
  } catch (SQLException e) {
   e.printStackTrace();
  }finally
  {
   //注意不是关闭,是放回连接池.
   conn.close();
  }

}
%>

或写个JSP用标签库测试一下:

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<sql:query var="rs" dataSource="jdbc/test">
select * from authors
</sql:query>

<html>
  <head>
    <title>DB Test</title>
  </head>
  <body>
<c:forEach var="row" items="${rs.rows}">
    ${row.city}<br/>
</c:forEach>
  </body>
</html>

我成功了!Good Luck!
以下是配置JNDI的其他方法,个人不建议使用,因为修改服务器的
server.xml和web.xml,如果有一点错误,你的容器就会崩溃~

注:连接数据源的方法还有很多,在这里我简要说之:
比如说第二步还可以这么做:

在/tomcat/conf/Catalina/localhost(或其它主机名)/中添加以
虚拟目录名称(你的工程名)命名的XML文件来配置context.
比如我的主机下有个目录dbpool其地址为tomcat/webapps/test我可以这样来配置这个上下文:
在tomcat/conf/Catalina/localhost/目录下创建test.xml文件,内容和上面一样.

还可以:
在/tomcat/conf/server.xml中<host></host>标签之间添加

<Context path="/test" docBase="test"
        debug="5" reloadable="true" crossContext="true">
  <Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource"
               maxActive="100" maxIdle="30" maxWait="10000"
               username="javauser" password="javadude" driverClassName="net.sourceforge.jtds.jdbc.Driver"
               url="jdbc:jtds:sqlserver://localhost/pubs"/>
</Context>

其中path是你的工程路径(相对或绝对亦可),其中docBase="test"说明,此主机已经指向到webapps目录下了,回头
来看test这个上下文,它实际目录是位于webapps的目录下的,所以
在Context中我们可以将docBase直接设置为test了。如果它在webapps/dbpool/test下,则设置为dbpool/test就可以了。

附:JNDI——Java Naming and Directory Interface是一套提供naming和 directory功能的 API,
Java应用程式开发者透过使用 JNDI,在naming和 directory方面的应用上就有了共通的准则.

from :http://www.blogjava.net/supercrsky/articles/174931.html

Tomcat配置JNDI数据源的更多相关文章

  1. 【转】在Tomcat配置JNDI数据源的三种方式

    在我过去工作的过程中,开发用服务器一般都是Tomcat 数据源的配置往往都是在applicationContext.xml中配置一个dataSource的bean 然后在部署时再修改JNDI配置 我猜 ...

  2. Tomcat配置JNDI数据源的三种方式-转-http://blog.51cto.com/xficc/1564691

    第一种,单个应用独享数据源 就一步,找到Tomcat的server.xml找到工程的Context节点,添加一个私有数据源 Xml代码   <Context docBase="WebA ...

  3. 在Tomcat配置JNDI数据源的三种方式

    最近使用到了在tomcat下配置数据源的内容,在这里转载一篇文章记录下 转载自: http://blog.csdn.net/dyllove98/article/details/7706218 在我过去 ...

  4. 【Tomcat】Tomcat 配置JNDI数据源(三)

    数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下:   ①加载数据库驱动程序(Class.forName("数据库驱动类");)   ②连接数据库(Connec ...

  5. JNDI学习总结(三)——Tomcat下使用Druid配置JNDI数据源

    com.alibaba.druid.pool.DruidDataSourceFactory实现了javax.naming.spi.ObjectFactory,可以作为JNDI数据源来配置. 一.下载D ...

  6. JNDI学习总结(二)——Tomcat下使用C3P0配置JNDI数据源

    一.C3P0下载 C3P0下载地址:http://sourceforge.net/projects/c3p0/files/?source=navbar

  7. Tomcat下使用Druid配置JNDI数据源

    com.alibaba.druid.pool.DruidDataSourceFactory实现了javax.naming.spi.ObjectFactory,可以作为JNDI数据源来配置. 一.下载D ...

  8. Tomcat下使用C3P0配置JNDI数据源(在项目的META-INF目录下创建context.xml的文件)

    一.C3P0下载 C3P0下载地址:http://sourceforge.net/projects/c3p0/files/?source=navbar 下载完成之后得到一个压缩包

  9. JNDI学习总结——Tomcat下使用C3P0配置JNDI数据源

    一.C3P0下载 C3P0下载地址:http://sourceforge.net/projects/c3p0/files/?source=navbar

随机推荐

  1. Android中获取应用程序(包)的大小-----PackageManager的使用(二)

    通过第一部分<<Android中获取应用程序(包)的信息-----PackageManager的使用(一)>>的介绍,对PackageManager以及 AndroidMani ...

  2. 如何签名apk,并让baidu地图正常显示

    1.选中项目,右击export Next直到完成,这样就生成了my.keystore文件 将my.keystore拷到C:\Users\Administrator\.android 利用jdk的工具生 ...

  3. SQL 跨服务器数据库增、删、改、查(二)

    --创建链接服务器 exec sp_addlinkedserver 'jx3xxiednr3ucidf', ' ', 'SQLOLEDB', 'jx3xxiednr3ucidf' exec sp_ad ...

  4. 【BZOJ 2038】[2009国家集训队]小Z的袜子(hose)

    Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此, 他的项链变 ...

  5. mybatis foreach标签

    一.批量插入数据 示例:添加订单商品表 1.模型层的相应代码 /** * 添加订单商品表 * @param ordergoods * @return */ public boolean addOrde ...

  6. 读取tiled地图

    原地址:http://www.unity蛮牛.com/thread-20854-1-1.html   Tile是一个非常好用的地图编辑器,一直以来我都在找支持tilemap的unity2D插件,但是找 ...

  7. SetTimer在无窗口和有窗口线程的使用 . .

    今天犯了一个粗心的错误,在无窗口线程中,SetTimer中设置计时器ID,而WM_TIMER消息响应函数中得到的计时器ID却不是之前设置的计时器ID. 对应计时器ID的输出的是一个随机数字. 原来在m ...

  8. Linux资源监控_Nmon

    性能测试中,各个服务器资源占用统计分析是一个很重要的组成部分,通常我们使用nmon这个工具来进行监控以及监控结果输出. 一. 在监控阶段使用类似下面的命令 ./nmon -f write_3s_20v ...

  9. C/C++语言参数传递----函数/方法 参数的指针引用传递

    int m_value = 1; void func(int *p) { p = &m_value; } int main(int argc, char *argv[]) { int n = ...

  10. Java Web开发 之小张老师总结中文乱码解决方案

    中文乱码:在以后学习过程中全部采用UTF-8 1.文件的乱码 1.1.项目文本文件默认编码:        [右击项目]->[Properties]->[Resource]->[Te ...