一.JNDI 和JDBC的区别和联系
两者都是API,是连接数据库的标准。并不是什么产品或方法。

二.JDBC

全称:Java Database Connectivity

以一种统一的方式来对各种各样的数据库进行存取
使用JDBC带来的问题:
(1).数据库服务器名称 、用户名和口令都可能需要改变,由此引发JDBC URL需要修改
(2).数据库可能改用别的产品,如改用DB2或者Oracle,引发JDBC驱动程序包和类名需要修改
(3).随着实际使用终端的增加,原配置的连接池参数可能需要调整

使用方法:

(1)加载数据库驱动,填写数据库url,用户名,密码

(2)在程序中进行调用

三.JNDI

Java
Naming and Directory Interface

它提供了一致的模型来存取和操作企业级的资源如DNS和LDAP

JNDI相对与JDBC来说是他的灵活性,程序员不需要关心“具体的数据库后台是什么?JDBC驱动程序是什么?JDBC URL格式是什么?访问数据库的用户名和口令是什么?”等等这些问题,程序员编写的程序应该没有对 JDBC 驱动程序的引用,没有服务器名称,没有用户名称或口令 —— 甚至没有数据库池或连接管理。而是把这些问题交给J2EE容器来配置和管理,程序员只需要对这些配置和管理进行引用即可。

使用方法:

tomcat下jndi的两种配置方式

(一).非全局的JNDI配置:只针对某一个Web项目的数据源的配置

1.导入要链接数据库的jar包文件

例如:

sqlserver导入:sqljdbc4.jar包

oracle导入:ojdbc14.jar包

mySQL导入:mysql-connector-java-5.0.8.jar包

2.在JNDI中配置数据库的连接池

在WEB项目中的META-INF中创建一个context.xml文件。用于设置数据库的连接池信息

例如(mysql):

 <?xml version="1.0" encoding="UTF-8"?>
<Context>
<!--
JNDI数据源配置
J2EE服务器上保存着一个数据库的多个连接(连接池中),
数据源被绑定在了JNDI树上,
每一个DataSource都有一个name,
客户端通过name找到在JNDI树上绑定的DataSource,
再由DataSource找到一个连接
|- name:表示以后要查找的名称。通过此名称可以找到DataSource,此名称任意更换,但是程序中最终要查找的就是此名称,
|- auth:由容器进行授权及管理,指的用户名和密码是否可以在容器上生效,可以使用Container
|- type:此名称所代表的类型,现在为javax.sql.DataSource(不用变)
|- maxActive:表示一个数据库在此服务器上所能打开的最大连接数
|- maxIdle:表示一个数据库在此服务器上维持的最小连接数
|- maxWait:最大等待时间。10000毫秒
|- username:数据库连接的用户名
|- password:数据库连接的密码
|- driverClassName:数据库连接的驱动程序
|- url:数据库连接的地址
-->
<Resource
name="jdbc/mysql"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="root"
password="whr110112119"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mydb?useUnicode=true&amp;characterEncoding=utf-8"/>
</Context>

3.在web.xml文件中进行配置(可配置也可以不配置)

如果要配置的话:

1.    <resource-ref>
2. <description>my DB Connection</description>
3. <res-ref-name><span style="font-family: Arial, Helvetica, sans-serif;">jdbc/sqlserver</span><span style="font-family: Arial, Helvetica, sans-serif;"></res-ref-name>这个名字要与context.xml中的name一样</span>
4. <res-type>javax.sql.DataSource</res-type>
5. <res-auth>Container</res-auth>
6. </resource-ref>

其中res-ref-name值要和context.xml的name值一致

4.如果使用Spring的情况下

在applicationContext.xml或者自己的Spring的配置文件中导入JNDI的配置信息

 //获得content.xml中JNDI配置的数据库的连接池信息。jndi-name必须与JNDI中的name值一样
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/mysql" />
//使用JdbcTemplate操作数据库。
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>

在java文件中使用IOC得到jdbcTemplate对象。最后使用jdbcTemplate操作数据库

jndi测试方法:

1.    public void testJNDI() throws NamingException, SQLException{
2. Context ctx = new InitialContext();
3. DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/mysql ");
4. Connection conn = ds.getConnection();
5. System.out.println(conn.isClosed());
6. }

在jsp中调用加载jndi方式(不可以直接用main方法测试,必须通过启动容器从jsp中调用):

写测试的jsp,例如:jndiTest.jsp

1.    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2. <%@page import="com.apply.test.JNDITest"%>
3. <%
4. // 调用JNDITest类的testJNDI方法进行测试
5. JNDITest test = new JNDITest();
6. test.testJNDI();
7. out.println("connection pool connected !!");
8. %>
9. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
10. <html>
11. <head>
12. <title>jndi配置测试</title>
13. </head>
14. <body>
15. </body>
16. </html>

5.如果不使用Spring的话,可以在java文件中直接使用:

   //JNDI方式
  Context ctx = new InitialContext();
  //获取数据源
  DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/mysql");
  //通过数据源取连接池中的连接
  conn = ds.getConnection();

(二)全局的JNDI配置

1.在tomcat的安装目录下的conf下的server.xml文件中的GlobalNamingResources标签下加入resource配置信息(局部JNDI在context.xml文件中的resource配置信息)

2.在Web项目中的META-INF下的context中配置

 //global中的名字要与server.xml中的名称一样,而这里的name表示当前要使用名称
<ResourceLink name="jdbc/mysql" global="jdbc/mysql" type="javax.sql.DataSource"/>

3.剩下的和配置局部JNDI一样,及第3,第4,第5配置完直接使用就可以了

总结:

如果要配置局部的话,推荐使用第一种方式,这样不依赖tomcat了

但是还是推荐使用第二种方式好,虽然依赖tomat,但是是全局的,而且可以配置多个,对于以后切换使用方便

在项目的web.xml中添加的资源引用可有可无

 

最新文章

  1. SSE指令集学习:Compiler Intrinsic
  2. js学习篇--数组按升序降序排列
  3. 前端项目构建工具---Grunt
  4. JAVA算法
  5. Eclipse 的快捷键以及文档注释、多行注释的快捷键
  6. js中的一个方法怎么将数据主动传给另一个方法
  7. Mongodb源代码阅读笔记:Journal机制
  8. POJ2125 Destroying The Graph(二分图最小点权覆盖集)
  9. axis2 部署webservice
  10. automake使用
  11. scipy安装失败
  12. Vue.js快速入门
  13. asp.net中的绝对路径和相对路径
  14. 【C++ Primer】拷贝控制
  15. eclipse复制到IDEA中文不匹配,编译失败
  16. centos 6.5静态网址简单配置
  17. 使用 Homebrew 安装 Git
  18. 安卓高级6 SnackBar
  19. SHA算法
  20. xddpay.com 个人支付接口接入流程

热门文章

  1. ACM Arabella Collegiate Programming Contest 2015 H. Capital City 边连通分量
  2. libtool: Version mismatch error. 解决方法
  3. background-position设置
  4. 15、SpringBoot------整合swagger2
  5. 搭建大众点评CAT监控平台
  6. 2017年10月26日 git上传文件失败的文件
  7. composer环境安装
  8. MySQL安装在Linux
  9. C指针——简单总结
  10. 数据结构学习-BST二叉查找树 : 插入、删除、中序遍历、前序遍历、后序遍历、广度遍历、绘图