关于tomcat数据源的配置网上有很多相关的资料,由于之前一直都用weblogic,所以对tomcat的数据源配置不甚了解,刚好自己有个小项目,用到tomcat,所以这两天在网上找了很多有关tomcat配置数据源的资料,但都不行,都报异常:Cannot create JDBC driver of class '' for connect URL 'null'和No suitable driver ,那些贴这些资料的网友我想都是没通过自己的验证就通通转载下来了,有时想想还真有点不负责任。不多说了,现在我把经过验证的配置方法写下来,一是供大家参考,二来可以总结一下。
我这介绍的是针对tomcat5.5的配置,其他版本我还没试过,不过应该差不多吧,有空再试下。
1》 安装tomcat-admin插件。这个插件的作用是可以引导你通过web的方式去配置数据源,就像weblogic配置数据源一样。这个插件网上有的下,解压后会提供一个admin.xml文件和一个admin文件夹,将admin.xml文件放到%Tomcat_HOME%conf\Catalina\localhost目录下,将admin文件夹放到%Tomcat_HOME%\server\webapps目录下,这样这个插件就安装好了。
2》 启动Tomcat,输入http://localhost:8080/admin进入tomcat的admin配置管理页面,进入后看左边的树形菜单(图一),点Data Sources进入数据源的配置,在配置栏中输入相应参数(图二),大家根据自己的数据库赶写相应数据库的驱动类和URL,然后按save--->commit changes保存配置。
图一
图二
这一步完成后在%Tomcat_HOME%conf\server.xml中的 <GlobalNamingResources> </GlobalNamingResources>中,tomcat会自动生成以下一段代码:
view plaincopy to clipboardprint?
<Resource
name="jdbc/ipsdb"
type="javax.sql.DataSource"
password="sa"
driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
maxIdle="2"
maxWait="5000"
username="sa"
url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=IPSNET"
maxActive="4"/>
<Resource
name="jdbc/ipsdb"
type="javax.sql.DataSource"
password="sa"
driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
maxIdle="2"
maxWait="5000"
username="sa"
url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=IPSNET"
maxActive="4"/> 这就是我们刚才配置的数据源。
3》 编辑%Tomcat_HOME%conf\context.xml,在<Context></Context>之间添加以下代码
view plaincopy to clipboardprint?
<Resource
auth="Container"
type="javax.sql.DataSource"
name="jdbc/ipsdb"
description="ipsdb"
username="sa"
password="sa"
maxActive="4"
maxIdle="2"
maxWait="5000"
driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=IPSNET"
/>
<Resource
auth="Container"
type="javax.sql.DataSource"
name="jdbc/ipsdb"
description="ipsdb"
username="sa"
password="sa"
maxActive="4"
maxIdle="2"
maxWait="5000"
driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=IPSNET"
/> 注意,这些参数和上一步配置的数据源参数要一定相同,否则就会出错。网上的资料都忽略了这一步,直接去配置web.xml文件了。
4》 配置应用目录下的web.xml文件。在<web-app></web-app>之间加入以下代码:
view plaincopy to clipboardprint?
<resource-ref>
<description>ipsdb</description>
<res-ref-name>jdbc/ipsdb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<resource-ref>
<description>ipsdb</description>
<res-ref-name>jdbc/ipsdb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>注意,jdbc/ipsdb是jndi名,一定要和上面的一致。到这里我们的配置工作就完成了,现在可以重启你的猫,进行测试了。在测试之前,大家可以进入admin管理页面看看,我们刚配置的数据源是全局的,即所有的应用都可以用的,在树形菜单的Service-->Host(Localhost)下的任意节点,都可以看到我们所配置的数据源(如图三)。
5》测试,测试的jsp代码我是在网上找的,大家也可以通过写一个类来测试,在测试之前,请确保将数据库的驱动jar包放到%Tomcat_HOME%\webapps\你的应用目录\WEB-INF\lib目录下和%Tomcat_HOME%common\lib目录下。
view plaincopy to clipboardprint?
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="javax.naming.*"%>
<html>
<head>
<title>My JSP 'testPool.jsp' starting page</title>
</head>
<body>
This is my JSP page. <br>
<%
Connection c;
Context initCtx=new InitialContext();
Context ctx=(Context)initCtx.lookup("java:comp/env");
javax.sql.DataSource ds=(javax.sql.DataSource)ctx.lookup("jdbc/SQL");
c.getConnection();
Statement stmt=conn.createStatement();
PreparedStatement ps=conn.prepareStatement("select * from USERS");
ResultSet rs=ps.executeQuery();
while(rs.next()){
out.println(rs.getString(1)+"<br>");
}
rs.close();
stmt.close();
out.println("ok");
%>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="javax.naming.*"%>
<html>
<head>
<title>My JSP 'testPool.jsp' starting page</title>
</head>
<body>
This is my JSP page. <br>
<%
Connection c;
Context initCtx=new InitialContext();
Context ctx=(Context)initCtx.lookup("java:comp/env");
javax.sql.DataSource ds=(javax.sql.DataSource)ctx.lookup("jdbc/SQL");
c.getConnection();
Statement stmt=conn.createStatement();
PreparedStatement ps=conn.prepareStatement("select * from USERS");
ResultSet rs=ps.executeQuery();
while(rs.next()){
out.println(rs.getString(1)+"<br>");
}
rs.close();
stmt.close();
out.println("ok");
%>
</body>
</html> 我的测试结果为:
This is my JSP page.
admin
ok
测试成功!