Jbuilder2006+MySQL5.0+Tomcat5.5.9数据源配置(原创)
MationChen 2008-4-27
这些天在网上找了不少有关这方面的资料,对于JB自带的猫(5.5.9)+MySQL5.0配置数据源总结了方法如下:
第一步,创建JB工程myApp,其web Module 名为 myWeb,并在其下创建DBConntest.jsp作为测试之用。
第二步,创建MySQL数据库,数据库名为mytest,在数据库中建立数据库表test,并创建测试用字段test1,test2,写入测试用数据
语句如下:
/*
MySQL Data Transfer
Source Host: localhost
Source Database: mytest
Target Host: localhost
Target Database: mytest
Date: 2008-4-27 11:52:21
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for test
-- ----------------------------
CREATE TABLE `test` (
`test1` varchar(255) default '',
`test2` varchar(255) default ''
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
-- ----------------------------
-- Records
-- ----------------------------
第三步,运行JB中的DBConntest.jsp页面,目的是在工程文件夹下生成web.xml和
server8083.xml(如果猫的端口是8080则生成server8080.xml)
其中,server8083.xml文件位置在工程文件夹下面myApp/tomcat/conf目录下,笔者的工程在 D:/work/myApp,则文件位置就应该在D:/work/myApp/Tomcat/conf目录下。
而web.xml则在myApp/myWeb/WEB-INF/目录下,也可以在JB的工程中找到web.xml。
以上三步是基本的准备工作,接下来就要开始进行联接啦!
第四步,是mysql驱动,笔者用的是mysql-connector-java-5.0.8-bin.jar,读者可以在网上自己下载。
驱动应该放在JB安装目录下面的/thirdparty/jakarta-tomcat-5.5.9/common/lib下边,就是说要把驱动给拷到/thirdparty/jakarta-tomcat-5.5.9/common/lib文件夹下。
第五步,修改xml文件,这一步是最为关键的,要不然就够你受的啦!
首先,记住,是首先。也就是说是第一步,网上都说这一步在修改sever.xml之后,我觉得不然,应该是这一步在前!
应该在web.xml文件中的<web-app> </web-app>中间添加:
<resource-ref>
<description>db conn</description>
<res-ref-name>jdbc/myWeb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
解释一下,<res-ref-name>jdbc/myWeb</res-ref-name>
res-ref-name填写的内容是JNDI Name名称,应与server8083.xml以及程序中的lookup("jdbc/myWeb")保持一致。
其他的,description是描述,可以自己写,而res-type,res-auth则按默认即可。
然后,修改之前提到的server8083.xml,文件如下图所示
看到灰色部分了吧?红圈中的那些,记住,一定要删除!
即删除如下文字
<!--This comment marks this file as generated, so it may be deleted and regenerated at any time. To preserve manual changes to this file, delete this comment.-->
这一段的意大概就是说这个文件是JB自己生成的,把这一段注释删除就能防止JB自己修改那个文件!所以一定要删除的
然后便在<Context></Context>中间添加如下内容:
<Resource
name="jdbc/myWeb"
type="javax.sql.DataSource"
password="sa"
driverClassName="com.mysql.jdbc.Driver"
maxIdle="2"
maxWait="5000"
username="root"
url="jdbc:mysql://localhost:3306/mytest"
maxActive="4"/>
<!--
name: JNDI数据源名称应该与web.xml以及程序中的lookup("jdbc/myWeb")相对应
type: 按默认即可
password: mysql的用户密码
driverClassName : 驱动类名
url: 其是的mytest为数据库名,3306是mysql的端口
username:用户名
maxIdle maxWait maxActive 三项按默认即可,我指的是在开发环境下,如果是在服务器中运行请另外参照相关资料
-->
完成之后文件如下
Server8083.xml
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8084" shutdown="SHUTDOWN">
<Service name="Catalina">
<Connector acceptCount="10" connectionTimeout="60000" maxThreads="75" minSpareThreads="5" port="8083"/>
<Engine defaultHost="localhost" name="Catalina">
<Host appBase="D:/work/myApp/Tomcat/webapps" autoDeploy="false" deployXML="false" name="localhost" unpackWARs="false">
<Context docBase="D:/work/myApp/myWeb" path="/myWeb" reloadable="true" workDir="D:/work/myApp/Tomcat/work/myWeb">
<Resource
name="jdbc/myWeb"
type="javax.sql.DataSource"
password="sa"
driverClassName="com.mysql.jdbc.Driver"
maxIdle="2"
maxWait="5000"
username="root"
url="jdbc:mysql://localhost:3306/mytest"
maxActive="4"/>
</Context>
</Host>
</Engine>
</Service>
</Server>
最后,建立测试页面
DBConntest.jsp
<%@ page contentType="text/html; charset=GBK"
import="java.sql.*,javax.sql.*,javax.naming.*" %>
<%request.setCharacterEncoding("GBK"); %>
<html>
<head>
<title>
DBConntest
</title>
</head>
<body bgcolor="#ffffff">
<h1>
mySql联接测试
</h1>
<%
out.print("测试开始!+<br/>");
DataSource ds=null;
try{
InitialContext initCtx=new InitialContext();
Context ctx = (Context) initCtx.lookup("java:comp/env");
ds=(DataSource)ctx.lookup("jdbc/myWeb");
//"jdbc/myWeb"对应web.xml以及server8083.xml文件中的JNDI Name
Connection conn=ds.getConnection();
Statement stmt=conn.createStatement();
String strSql="select * from test";
ResultSet rs=stmt.executeQuery(strSql);
while(rs.next()){
out.print(rs.getString(1));
out.print("<br/>");
out.print(rs.getString(2));
out.print("<br/>");
}
out.print("测试完成!<br/>");
}catch(Exception e){
e.printStackTrace();
}
%>
</body>
</html>
在浏览器中输入:http://localhost:8083/myWeb/DBConntest.jsp
运行页面,可以得到如下结果:
这样,配置就算是大功告成啦!还想再提一下,本文与网上许多文章不同的地方就是强调一定要先配置web.xml,再修改server8083.xml,这是笔者经过好几天实践所得出的结论^_^
调试过程中可能会遇到一些异常
异常一:Cannot create JDBC driver of class '' for connect URL 'null'
解决方法:
<Context ...></Context>中间添加
<ResourceLink global="jdbc/myWeb" name="jdbc/myWeb" type="javax.sql.DataSource"/>
异常二:javax.naming.NameNotFoundException: Name XXX is not bound in this Context
解决方法:
网上对于这个异常的解决方法是在Web.xml中添加
<resource-ref>
<description>db conn</description>
<res-ref-name>jdbc/myWeb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
但是刚形如笔者和许多网友一样按此方法并不能解决此问题,经过几天的摸索,笔者觉得是在配置过程中的web.xml和server808.xml顺序问题,按照笔者的方法配置去配置并没有出现这个异常,大家不妨试试^_^
(PS:网上有一篇对于mysql联接过程中出现在异常进行总结的文章分析得详细,大家也可以参考参考:http://neonlight.bokee.com/5517972.html)