您的位置:首页 > 运维架构 > Tomcat

Tomcat数据源,Jsp/Java使用JDNI服务来实现数据库连接

2017-06-09 17:51 423 查看
ps.记得将数据库的驱动程序复制到 lib 文件夹中

1.配置server.xml

--此示例的所有注释,只是为了解释作用,实际操作中切勿添加
<Context path="/user" docBase="C:/userdemo" reloadable="true">
<Resource
name="jdbc/user"        --配置一个连接池资源,名称为jdbc/user
auth="Container"        --容器负责资源的连接
type="javax.sql.DataSource"        --此数据源名称对应的类型是DataSource
maxActive="100"         --可以打开的最大连接数
maxIdle="30"            --维持的最小连接数
maxWait="10000"         --用户等待的最大时间

4000
username="root"         --数据库用户名
password="root"         --数据库密码
driverClassName="com.mysql.jdbc.Driver"        --数据库驱动程序
url="jdbc:mysql://localhost:3306/user"          --数据库名称
/>
</Context>


注意,Resource节点的auth选项表示连接数据库的方法,一般有两种形式:

1、Container,容器将代表应用程序登录到资源管理器,一般使用这种形式;

2、Application,应用程序必须程序化地登录到资源管理器;

2.配置web.xml

<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/user</res-ref-name>
<ref-type>javax.sql.DataSource</ref-type>
<res-auth>Container</res-auth>
</resource-ref>


3.通过数据源取得连接(jsp)

<%@ page contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>
<%@page import="javax.naming.*"%>
<%@page import="javax.sql.*"%>
<%@page import="java.sql.*"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>

<%
Connection conn = null;
try{
//初始化名称查找上下文
Context ctx = new InitialContext();
//取得DataSource实例,()中为JNDI名称
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/login");
//取得数据库连接
conn = ds.getConnection();
} catch(Exception e) {
e.printStackTrace();
}
%>
<!-- 若不为空,则已连接 -->
<%=conn %>
<%
try{
//将数据库连接放回池中
conn.close();
} catch(Exception e) {
e.printStackTrace();
}
%>

</body>
</html>


注意,java:comp/env环境属性,

在javaEE规定的一个环境命名上下文,主要为了解决JNDI查找时的冲突

在tomcat中必须设置(其余的服务器不一定需要使用)

4.通过数据源取得连接(java)

在DAO开发中,常用此类,来替代用java来连接数据库

import java.sql.Connection;
import javax.naming.*;
import javax.sql.DataSource;
public class DatabaseConnection {
//定义JNDI的查找名称
private static final String DSNAME="java:comp/env/jdbc/user";
private Connection conn = null;
public DatabaseConnection() throws Exception {      //在构造方法中进行数据库连接
try {
//初始化名称查找上下文
Context ctx = new InitialContext();
//取得DataSource的实例
DataSource ds = (DataSource) ctx.lookup(DSNAME);
//取得数据库连接
this.conn = ds.getConnection();
} catch (Exception e) {
e.printStackTrace();
}
}
public Connection getConnection() {      //取得数据库连接
return this.conn;
}
public void close() throws Exception {      //数据库关闭操作
if(this.conn != null) {
try {
this.conn.close();
} catch(Exception e) {
throw e;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: