1.JNDI(Java Naming and Directory Interface,Java命名和目录接口)
是一组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来,使得我们可以用名称访问对象。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性。可以理解为一个容器,可以在其中存放任意内容,在容器中为内容提供一个字符串名称,名称命名方式采用是目录结构方式,在其他地方引用该名称就可以得到该内容.
2.实现
注意:还是需要导入JDBC的驱动jar包!!!
思想:将数据库连接池作为服务器端的资源存放在JNDI容器中,使用时从容器中取出资源,即数据库连接池.
a)将对象存在在JNDI容器
在Web工程的WebRoot\META-INF\目录下创建Context.xml文件,将对象作为资源存放入容器中,也可以被其他Web项目所访问.
<? xml version="1.0" encoding="UTF-8" ?> < Context > <!-- #1 给tomcat 配置对象,将内容添加jndi容器 --> < Resource name ="jdbc/pool" auth ="Container" type ="javax.sql.DataSource" maxActive ="100" maxIdle ="30" maxWait ="10000" username ="root" password ="fujianyi" driverClassName ="com.mysql.jdbc.Driver" url ="jdbc:mysql://localhost:3306/day17" /> </ Context >
b)当前web项目从tomcat jndi容器将需要对象进行引用。
在当前项目\WebRoot\WEB-INF路径下的web.xml文件中添加如下代码
<!-- #2 从jndi容器引用已经存在对象 --> < resource-ref > < res-ref-name > jdbc/pool </ res-ref-name > < res-type > javax.sql.DataSource </ res-type > < res-auth > Container </ res-auth > </ resource-ref >
c)jsp 或 java代码 使用
<% @page import = " java.sql.Connection " %> <% @page import = " javax.sql.DataSource " %> <% @page import = " javax.naming.InitialContext " %> <% @page import = " javax.naming.Context " %> <% @ page language = " java " contentType = " text/html; charset=UTF-8 " pageEncoding = " UTF-8 " %> <% @ taglib uri = " http://java.sun.com/jsp/jstl/sql " prefix = " sql " %> <% @ taglib uri = " http://java.sun.com/jsp/jstl/core " prefix = " c " %> <! DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" > < html > < head > < meta http-equiv ="Content-Type" content ="text/html; charset=UTF-8" > < title > Insert title here </ title >
<%--JSP代码实现 查询实现--%> <% -- 查询数据 -- %> < sql:query var ="rs" dataSource ="jdbc/pool" > select * from t_user </ sql:query > </ head > < body > < c:forEach items ="${rs.rows}" var ="row" > ${row.id} ${row.username} ${row.password} </ c:forEach >
<%--Java代码实现 获取连接--%> <% // 1初始化jndi容器,包:javax.naming Context initContext = new InitialContext(); // 2初始java环境 Context envContext = (Context)initContext.lookup( " java:/comp/env " ); // 3获得自定义内容 DataSource ds = (DataSource)envContext.lookup( " jdbc/pool " ); Connection conn = ds.getConnection(); out.print(conn); %> </ body > </ html >