`
jaychang
  • 浏览: 731559 次
  • 性别: Icon_minigender_1
  • 来自: 嘉兴
社区版块
存档分类
最新评论

JNDI与tomcat连接池

阅读更多

 

本章内容

² JNDI与JNDI服务器

² 编码实现JNDI目录服务与命名服务

² 使用Tomcate JNDI服务器

一、JNDI概述

1、什么是JNDI?

英文全称是:Java Naming and Directory Interface

命名服务提供了一种为对象命名的机制,这样你就可以在无需知道对象位置的情况下获取和使用对象。只要该对象在命名服务器上注册过,且你必须知道命名服务器的地址和该对象在命名服务器上注册的JNDI名。就可以找到该对象,获得其引用,从而运用它提供的服务。

       利用JNDI可以寻找在命名服务器上注册过的所有对象。

JNDI就是为JAVA中命名和目录服务定义的JAVA API,是命名服务的抽象机制。我们可以直接通过JNDI来操作命名服务,而不要与底层的命名服务器交互,大大减轻了程序员的压力。

 2、什么是JNDI server?

      能提供目录或命名服务的服务器,相当于数据库。

      常见JNDI服务器:DNS、XNam 、Novell目录服务、

      LDAP(Lightweight Directory Access Protocol 轻型目录访问协议)、 

      CORBA对象服务、

      Tomcat数据源

      EJB容器的Bean对象(通过jdni技术访问)

      文件系统、

      Windows XP/2000/NT/Me/9x的注册表、

      RMI、DSML v1&v2、NIS 

3、为什么要使用JNDI?

解决多个应用程序访问同一个资源的问题。

 

 

 

 

 

 

二、通过编码了解JNDI,完成对文件系统的操作

JNDI包:

javax.naming:命名操作;

javax.naming.directory:目录操作; 

JNDI常用类:

javax.naming.Context;(接口)

javax.naming.NamingEnumeration;(枚举类)

javax.naming.InitialContext;(Context实现类)

1、创建一个目录服务器

需要的包:

fscontext.jar;

providerutil.jar

commons-logging.jar

naming-resources.jar

naming-factory-dbcp.jar

 

         编写JndiFile类,显示结果为此路径下所有的资源名与类型。

     关键代码:

public static void main(String[] arg)throws Exception{

    Hashtable ev=new Hashtable();

    //指定提供命名服务的类名 ev.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.fscontext.RefFSContextFactory");

    //指定提供命名服务的服务器位置信息(远程命名服务器要提供IP和端口号)

    ev.put(Context.PROVIDER_URL,"file:///d:/");

    //初始化命名目录的上下文

   Context ctx=new InitialContext(ev);

    //列举命名服务器根目录下的所有对象

    NamingEnumeration  list=ctx.list("/");

    //显示所有对象的信息

    while(list.hasMore()){

    //NameClassPair表示存在于上下文中的某一绑定的对象名称和类名称对

    NameClassPair nc = (NameClassPair) list.next();

System.out.println(nc);

    }

}

 

 

2、通过JNDI从目录服务器中取出一个文件

从Jndi Context中查找一个文件使用的方法:

 lookUp(String name)

      lookUp(javax.name.Name )

两个方法用来在Context中查找资源。

 

关键代码如下

public static void main(String[] arg)throws Exception{

    Hashtable ev=new Hashtable();

    //指定提供命名服务的类名    ev.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.fscontext.RefFSContextFactory");

    //指定提供命名服务的服务器位置信息(远程命名服务器要提供IP和端口号)

    ev.put(Context.PROVIDER_URL,"file:///d:/");

    //初始化命名目录的上下文

   Context ctx=new InitialContext(ev);

    //列举命名服务器根目录下的所有对象

   File file = (File)ctx.lookup("/wms/readme.txt");

    //缓冲字符流读取对象

   BufferedReader br = new BufferedReader(new FileReader(file));

   //读取文件信息

   String line = br.readLine();

   while(line != null){

      System.out.println(line);

      line = bw.readLine();

     }

}

 

3、编码实现Java命名服务器

利用bind()和unBind()方法绑订和撤消绑订对象。

代码:

public static void main(String[] arg) throws Exception {

Hashtable ev = new Hashtable();

//指定提供命名服务的类名

ev.put(Context.INITIAL_CONTEXT_FACTORY,

"org.apache.naming.java.javaURLContextFactory");

//初始化命名目录的上下文

Context ctx = new InitialContext(ev);

//取得文件对象

File file = new File("E:/bbb.txt");

//在服务器上绑定file,注册名为bbb

ctx.bind("bbb", file);

//在服务器上查找bbb对象

Object o = ctx.lookup("bbb");

//输出对象的类名

System.out.println(o.getClass().getName());

 

ctx.unbind("bbb");

Object o1 = ctx.lookup("bbb");

}

 

三、tomcat连接池

web服务器也是一个jndi服务器

在Tomcate中配置数据源,在项目中利用JNDI去访问

 

1、在Tomcat5.5上配置数据源

 

在server.xml中配置如下节点
<!-- Context节点的path属性就是你的WebApp服务名,与上面同。
 例如:http://localhost:8080/YouWeb/index.jsp 这个是访问你网站的URL,那么你的path就是: /YouWeb
-->

私有数据库连接池Host节点里面)

<Context path="/YouWeb" docBase="F:\workspace\tea_forum\WebRoot">

   <Resource

     name="jdbc/sqlserver"

     type="javax.sql.DataSource"

     driverClassName="sun.jdbc.odbc.JdbcOdbcDriver"

     maxIdle="2"

     maxWait="5000"

     username="sa"

     password="sa"

     url="jdbc:odbc:accp"

     maxActive="4"/>

</Context>

公有数据库连接池

   配置公有数据库连接池GlobalNamingResources节点里面)

    <Resource

     name="jdbc/mssql"

     type="javax.sql.DataSource"

     driverClassName="sun.jdbc.odbc.JdbcOdbcDriver"

     maxIdle="2"

     maxWait="5000"

     username="sa"

     password="sa"

     url="jdbc:odbc:accp"

     maxActive="4"/>

 

   引用公有数据库连接池Host节点里面)

<Context    path="/testjndi1" docBase="F:\workspace\testpool\WebRoot" >  

    <ResourceLink name="jdbc/mssql1" global="jdbc/mssql" type="javax.sql.DataSource"/>

</Context>

<Context    path="/testjndi2" docBase="F:\workspace\testpool2\WebRoot">  

    <ResourceLink name="jdbc/sqlserver2" global="jdbc/mssql" type="javax.sql.DataSource"/>

</Context>

 

解释一下:

 1.path是指定访问该web应用的URL入口;

 2.docBase指定web应用的文件路径,可以是绝对路径,也可以是相对于Host的appBase属性的相对路径;

 3.type是指数据源类型

 4.maxActive是DBCP中处于活动状态的数据库连接的最大数目,取0表示不受限制

 5.maxIdle是DBCP中处于空闲状态的数据库连接的最大数目,取0表示不受限制

 6.maxWait是是DBCP中的数据库连接处于空闲状态的最长时间(以毫秒为单位)取0表示无限期等待

 7.username是数据库登陆名

 8.password是数据库登陆口令

 9.driverClassName是只定数据库的jdbc驱动程序

 10.url是指定连接数据库的URL,testDBCP是我的数据库名。


2、在你的项目工程目录WEB-INf\web.xml中配置如下信息:
<!--注意:res-ref-name节点里的名字要与上面的Resource节点里的name要一致。名字可以任意取,但一定要一致。-->
 <resource-ref>
     <res-ref-name>jdbc/sqlserver</res-ref-name>
     <res-type>javax.sql.DataSource</res-type>
     <res-auth>Container</res-auth>
 </resource-ref>
3、最后,在你和程序中使用如下代码即可取得连接:
     InitialContext ctx = new InitialContext();
     //这里的java:comp/env是前缀,java语言规范,后面跟的是你Web.xml文件中res-ref-name              节点中的名字。

     DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/server");
     Connection conn = ds.getConnection();

 

 **注意:这里不能用java application演示

 

4、JSP测试文件

<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="javax.naming.*"%>
<%@ page contentType="text/html;charset=GB2312"%>
<html>
<head>
   <title>
    tomcat 连接池
   </title>
</head>
<body bgcolor="#ffffff">
   <h3>
    test
    <br>
    连接池:
   </h3>
   <%try {
    
     Context initCtx = new InitialContext();
     Context envCtx = (Context) initCtx.lookup("java:comp/env");
     DataSource ds = (DataSource) envCtx.lookup("jdbc/sqlserver");

    
     Connection conn = ds.getConnection();
     Statement stmt = conn.createStatement();
     ResultSet rs = stmt.executeQuery("select * from test");
     while (rs.next()) {%>

   <br>
   <%=rs.getString(1)%>
   <%}%>
   <%out.print("<br>Successful!成功!!\n");%>
   <%rs.close();
     stmt.close();
     conn.close();
    } catch (Exception e) {
     out.print("出现例外!" + e.getMessage());
     e.printStackTrace();
    }

   %>

</body>
</html>

启动tomcat后 点击http://localhost:8080/testDBCP/index.jsp因该可以看到成功页面.

  • 大小: 11.3 KB
分享到:
评论

相关推荐

    JNDI与Tomcat连接池的例子

    在Java应用服务器中,管理数据库连接的高效方式是使用连接池。Tomcat作为一个流行的轻量级应用服务器,它内建了连接...通过研究这些代码,你可以更深入地了解如何在实际项目中结合JNDI和Tomcat连接池来管理数据库连接。

    jndi连接池帮助文档

    5. **JNDI与Tomcat连接池**: 在Tomcat中,可以通过JNDI注册和查找数据源,使得Web应用可以通过JNDI名来获取数据库连接。配置数据源通常在`conf/server.xml`中进行,定义一个`Resource`元素,设置数据源的相关属性...

    Tomcat连接池配置详解

    Tomcat连接池,也称为数据源(DataSource),允许复用已建立的数据库连接,减少创建和关闭连接的开销。 配置Tomcat连接池的步骤如下: 1. **登录Tomcat管理页面**: 首先,你需要通过浏览器访问Tomcat的管理界面...

    tomcat连接池应用例子

    标题“Tomcat连接池应用例子”指的是在Java Web开发中,使用Tomcat内置的数据源(连接池)来管理与MySQL数据库的连接。Tomcat作为流行的Java应用服务器,提供了高效的连接池服务,帮助开发者优化数据库操作的性能和...

    Tomcat连接池配置

    **标题**: Tomcat连接池配置 **描述**: Tomcat连接池配置涉及到在Apache Tomcat服务器中设置数据源,以便高效地管理和复用数据库连接。这包括对Oracle和MSSQL Server这两种不同类型的数据库进行配置,并在Java应用...

    tomcat连接池配置

    本文将详细探讨Tomcat连接池的配置,包括其原理、配置步骤以及优化策略。 一、连接池原理 连接池是一种资源管理技术,用于存储数据库连接。它预先创建一定数量的数据库连接,当应用程序需要时可以从池中获取,使用...

    tomcat连接池的使用

    总的来说,Tomcat连接池的使用涉及到数据库驱动的引入、`context.xml`和`web.xml`的配置,以及通过JNDI获取和使用连接。理解这一流程对于开发基于Java的Web应用至关重要,因为它优化了数据库访问,提升了系统性能,...

    tomcat 连接池的配置笔记以及测试源码

    本文将深入探讨Tomcat连接池的配置,包括全局与局部配置的区别,以及可能出现的错误类型,并提供相关的测试源码。 一、Tomcat连接池介绍 Tomcat内建了两种连接池实现:Apache Commons DBCP(Database Connection ...

    Tomcat连接池的配置

    本文将深入探讨Tomcat连接池的配置,包括`web.xml`和`context.xml`两个重要配置文件的使用,以实现高效、稳定的数据访问。 首先,连接池是一种管理数据库连接的技术,它可以避免频繁地创建和销毁数据库连接,提高...

    tomcat连接池的配置与性能测试

    `Tomcat连接池`是Java应用服务器中用于管理数据库连接的一种机制,它的目的是提高数据库连接的复用性,减少创建和销毁连接的开销,从而提升应用的性能和响应速度。Tomcat内置了多种连接池实现,如Apache的Commons ...

    Tomcat6配置连接池

    ### Tomcat6配置连接池详解 #### 一、引言 在Java Web开发中,数据库连接池技术的应用极为广泛。合理的数据库连接管理不仅能提高应用程序的性能,还能有效避免因频繁创建销毁连接所导致的资源浪费问题。Apache ...

    mysql+tomcat连接池配置

    本文将详细介绍如何配置MySQL与Tomcat的连接池,以便在Java应用程序中实现优化的数据交互。 首先,我们需要理解连接池的概念。连接池是一种管理数据库连接的机制,它预先创建并维护一定数量的数据库连接,当应用...

    用JNDI建立数据库连接池实例

    JNDI的核心是名称绑定,即将一个名称(比如“jdbc/myDataSource”)与一个对象(如数据库连接池)关联起来。这样,应用程序可以通过这个名字来查找和获取资源,而无需知道其具体实现。这种方式提高了代码的可移植性...

    Tomcat6连接池配置详解(自动重连)

    ### Tomcat6连接池配置详解(自动重连) #### 一、引言 在现代Web应用开发中,数据库连接管理是非常重要的一环。为了提高应用性能并确保资源的有效利用,通常采用连接池技术来管理数据库连接。Apache Tomcat作为一...

    tomcat数据连接池配置

    本篇文章将深入探讨如何在Tomcat中配置数据连接池。 首先,我们要了解数据连接池的工作原理。数据连接池在初始化时会创建一定数量的数据库连接并存储在池中,当应用需要连接数据库时,可以从池中获取已存在的连接,...

    JNDI数据库连接池

    在Tomcat 6.0这个流行的Java Servlet容器中,JNDI被用来配置和管理应用的数据库连接池。Tomcat支持多种数据库连接池实现,如Apache DBCP、C3P0以及HikariCP等。这些连接池通过JNDI服务注册到Tomcat的Context环境中,...

    tomcat8 JNDI数据源加密

    TOMCAT8 JNDI对用户名和密码加密

Global site tag (gtag.js) - Google Analytics