JNDI绑定数据库

经过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,试一下吧!

<%=text/html;charset=utf-8%>
=java.sql.*,javax.sql.*,javax.naming.*,com.DBConnection 

  try
  {
   初始化查找命名空间
   Context ctx   InitialContext(); 
   InitialContext ctx   InitialContext();亦可 
   找到DataSource,对名称进行定位java:compenv是必须加的,后面跟你的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用标签库测试一下:

<%=java import""=ISO-8859-1%>
=http://java.sun.com/jsp/jstl/sql prefix""%>
=http://java.sun.com/jsp/jstl/core prefix""%>

<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方面的应用上就有了共通的准则.

时间: 2025-01-01 09:41:55

JNDI绑定数据库的相关文章

Asp.net--GridView控件--(1)高亮显示当前所在行,(2)高亮显示单击行,(3)绑定数据库数据,(4)分页,(5)导出到excel表格,(6)首列插入序号

//本页代码中的DB类及方法在http://www.cnblogs.com/Deerjiadelu/p/7252769.html中能查询到 (1)Asp.net--GridView控件--高亮显示当前所在行 protected void gvquery_DataBound(object sender, GridViewRowEventArgs e) { //高亮显示光标所在行 if (e.Row.RowType == DataControlRowType.DataRow)//判断当前行是不是数据

Asp.net--DropDownList控件绑定数据库数据

DropDownList控件绑定数据库数据:DB是公共类,reDt是公共类中的方法 放在Page_Load事件中 if (!IsPostBack) { DB db = new DB(); DataTable dt = db.reDt("select * from provinceInfo order by provinceid asc"); ddlsmprovince.DataSource = dt; ddlsmprovince.DataTextField = ddlsmprovinc

理解asp.net中DropDownList编辑数据源,绑定数据库数据。

一.理解asp.net绑定数据库 终于学习到了连接数据库部分的内容,杨中科老师视频看起来挺轻松的,如果是高清版就更ok了. 我发现我学习新的编程语言会有一个特点,都想要赶紧学习数据库,数据就是一切,有了数据才能操作一切的原因吧.现在能连上数据库特别心安.把过程记录一下,成为学习轨迹的一部分. 环境是VS2013.MSSQLSERVER(2012) (一)我想实现的效果是:一个下拉菜单DropDownList,从数据库那边获取数据过来,显示在下单菜单里. (二)实现的过程 首先,我把数据库跟数据表

Ext.net中Combobox如何绑定数据库中的值

今天在项目中再次碰到了问题,就是Combobox中的值如果是直接绑定很简单.简单添加项就行了.代码如下: <ext:ComboBox ID="ComBox_SecretsLevel" runat="server" FieldLabel="密级" Width="250" EmptyText="请选择密级..." > <Items> <ext:ListItem Text="

使用Gridview绑定数据库中的图片

使用Gridview绑定数据库中的图片 注:此系列记录在我实际开发中遇到的问题和收藏一些技巧文章. 我们都知道,在Gridview中不能直接去绑定数据库中的图片,我们可以利用HttpHandler很容易的完成这个任务,在这里我记录一下这个过程. 1.上传图片存储到数据库中 在数据库中创建一个表,添加一下3个字段: 步骤一:在Web页面中拖一个FileUpload 控件,一个文本框用于输入名称和提交上传按钮 <asp:FileUpload ID="fuImage" runat=&q

Repeater绑定数据库

前台: <table width="650" border="1"> <tr> <td class="tr1"> <asp:Label Text="姓名" runat="server"></asp:Label> </td> </tr> </table> <asp:Repeater ID="Repe

jquery easyUI datagrid 通过一般处理程序绑定数据库

初学easyui,搞了三天,终于将datagrid与后台数据库绑定成功,界面有点不太美观,以后继续努力. 后台一般处理程序取数据代码 1 <%@ WebHandler Language="C#" Class="jsonSms_group" %> 2 3 using System; 4 using System.Web; 5 using System.Configuration; 6 using System.Data; 7 using System.Da

TreeView树形控件递归绑定数据库里的数据

TreeView树形控件递归绑定数据库里的数据. 第一步:数据库中查出来的表,字段名分别为UNAME(显示名称),DID(关联数据),UTYPE(类型) 第二步:前台代码 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="tree.aspx.cs" Inherits="Maticsoft.Web.tree" %> 2 3 <!DOCTYPE

JavaEE(2) - Weblogic 服务器执行JNDI绑定和查找

1. 应用服务器默认添加的系统属性 NetBeans创建java web project(ctxTest) (index.jsp) <%@page import="java.util.Properties"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <