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
>

