数据库连接池--Tomcat内置实现
1.JNDI(Java Naming and Directory Interface,Java命名和目录接口)
是一组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来,使得我们可以用名称访问对象。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性。可以理解为一个容器,可以在其中存放任意内容,在容器中为内容提供一个字符串名称,名称命名方式采用是目录结构方式,在其他地方引用该名称就可以得到该内容.
2.实现
思想:将数据库连接池作为服务器端的资源存放在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="1234" 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> <%--查询数据 --%> <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> <% //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>
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。