数据库连接池--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>

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。