tomcat5.0 JNDI 配置
我看了好多都配不通 今天终于配通了,又在一些高手的基础上总结了一次,有什么问题可以找我
MSN:cnyqiao@hotmail.com
Tomcat 5.0.25 中配置JNDI
2005-08-29
本文主要介绍Tomcat5.0.25 这个版本下数据库连接池的配置,及程序对连接池的JNDI查找,并提供相应测试代码。本人经历了痛苦的调试过程.现将综合一些高人贴子,以最简单的形式给大家说明,希望大家不要骂我呀^_^
一 准备工作
1 .该文的配置环境:Tomcat5.0.25 + jdk1.4.2+ MySql 4.1 + mysql-connector-java-3.0.16-ga-bin.jar + Win2000 server.
2 .将mysql-connector-java-3.0.16-ga-bin.jar文件COPY到D:\tomcat5\common\lib目录下.可以在这里下载
http://dev.mysql.com/downloads/connector/j/3.0.html(3.0.17)
3.建表
# Host: localhost
# Database: test
# Table: 'test'
#
CREATE TABLE `test` (
`userid` int(11) NOT NULL auto_increment,
`name` varchar(100) NOT NULL default '',
`birthday` datetime NOT NULL default '0000-00-00 00:00:00',
`email` varchar(100) NOT NULL default '',
PRIMARY KEY (`userid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
二 配置工作
1 .在D:\tomcat5\conf\tomcat-users.xml中加入以下内容:
<role rolename="manager"/>
<role rolename="admin"/>
<user username="admin" password="admin" roles="admin,manager"/>
2 .启动Tomcat,打开IE在地址栏内输入http://localhost:8080/admin 输入用户名/密码:admin/admin,进入Tomcat的管理界面;点击右边的Data Sources 在右上角的下拉菜单中选择Create New Data Source 在下边的输入框中输入需要的配置信息。
JNDI Name:jdbc/XXX(XXX为自己所命的名字)
Data Source URL:jdbc:mysql://localhost:3306/test(连接的数据名)
JDBC Driver Class: org.gjt.mm.mysql.Driver
User Name:root连接数据库的用户名
Password: xx 数据库密码
Max. Active Connections: 100 最大连接数
Max. Idle Connections: 30 是最大的空闲连接数
Max. Wait for Connection: 5000 最大等待连接数
3 .修改 web.xml
打开webapps/ROOT/WEB-INF下web.xml,加入如下内容:
<resource-ref>
<description>MySql Datasource example</description>
<res-ref-name>jdbc/XXX</res-ref-name> //注意这里的<res-ref-name>一定要与JNDI NAME相同
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
4 . 我们这里用JSP页面进行测试,以下两段代码放在TOMCAT_HOME/webapps/ROOT/DBTest下边,同时还须修改 TOMCAT_HOME/conf/Catalina/localhost/下的ROOT.xml文件,在
<Resource auth="Container" description="MySql Datasource example" name="jdbc/xxx" type="javax.sql.DataSource"/>下边加入:
<ResourceLink global="jdbc/XXX" name="jdbc/XXX" type="javax.sql.DataSource"/>
来引用所配置的JNDI数据源。同时将<Resource auth="Container" description="MySql Datasource example" name="jdbc/xxx" type="javax.sql.DataSource"/>注释掉
三 测试代码:
1 .UserHanDleDB.jsp
<%@ page language="java"%>
<%@ page import="java.util.*" %>
<%@ page import="java.sql.*" %>
<%@ page import="javax.sql.*" %>
<%@ page import="javax.naming.*" %>
<%
String jndi_name="java:comp/env/jdbc/TestDB";
String select_user_sql="select userid,name,birthday, email from test";
String colnames[][]={{"User ID","Name","Birth day","EMail"}, {"userid","name","birthday","email"}};
Vector userSet=new Vector();
Vector columnSet=new Vector();
for(int i=0;i<colnames[0].length;i++){
columnSet.add(colnames[0][i]);
}
userSet.add(columnSet);
Context ctx = new InitialContext();
if(ctx == null )
throw new Exception("No Context");
DataSource ds = (DataSource)ctx.lookup(jndi_name);
Connection conn = ds.getConnection();
try {
PreparedStatement psPreparedStatement=conn.prepareStatement(select_user_sql);
ResultSet resultSet = psPreparedStatement.executeQuery();
while(resultSet.next()){
columnSet=new Vector();
for(int i=0;i<colnames[1].length;i++){
columnSet.add(resultSet.getString(colnames[1][i]));
}
userSet.add(columnSet);
}
}catch(SQLException e) {
e.printStackTrace();
}finally {
conn.close();
}
%>
2 .ViewTable.jsp
<html>
<head>
<title>Test Database </title>
<body >
<%@ include file="UserHandleDB.jsp" %>
<table border="1" >
<%
for(int i=0;i<userSet.size();i++){
Vector colSet=(Vector)userSet.get(i);
out.print("<tr>");
for(int j=0;j<colSet.size();j++){
String col=(String)colSet.get(j);
out.print("<td>"+col+"</td>");
}
out.print("</tr>");
}
%>
</table>
</body>
</html>
3.我的测试结果
User ID Name Birth day EMail
1 xxxxxx 0000-00-00 00:00:00 xxxxxxxxxxxxxx
2 test 0000-00-00 00:00:00 xxx@aaa.bb
3 test1 0000-00-00 00:00:00 xxx@aaa.bb