tomcat6 + oracle9i 的数据源配置
很少写技术文章,但网上关于tomcat6.x的数据源配置没有一个让我满意的答案,希望能对别人有所帮助,另外也算是对我忙活这一晚上的纪念。
网上搜出来的文章很多是tomcat5.x及以前的方法,比如更改conf/server.xml。还有,从tomcat6开始,安装包里已经没有admin控制台了,比如输入
http://localhost:8080/admin 显示的网页会提示你需要另外安装admin包。官方网站上能找到的admin只有5.x版本的,我参照一篇文章的做法安装并配置后,仍然是不行,显示的是空白网页,所以没有办法用图形界面的方法配置数据源了。
其实最权威的方法无疑是官方的,我按照官方网页上的指示进行配置,一次就成功了,而且很简单。另外需要说明的是,以下方法对于Oracle8i和10g同样适用。
下面是配置的具体步骤:
1、将ora92\jdbc\lib中的classes12.jar拷贝到Tomcat 6.0\lib中,注意一定要是jar文件而不能是zip
2、将下面这段代码加到Tomcat 6.0\conf\context.xml中
<Resource name="jdbc/myoracle" auth="Container"
type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:mydb"
username="name" password="psw" maxActive="20" maxIdle="10"
maxWait="-1" removeAbandoned="true" removeAbandonedTimeout="60"
logAbandoned="true"/>
其中最后三项是优化用的,可以不写。"jdbc/myoracle"是数据源名称,可变。从9i以后,driverClassName推荐使用"oracle.jdbc.OracleDriver"而不是"oracle.jdbc.driver.OracleDriver",因为后者将会在Oracle以后的版本中淘汰。thin是Oracle提供的两种JDBC驱动程序的一种,另一种是oci。一般来说远程访问数据库用thin,服务器端开发的数据库连接用oci,这里用thin就是了。mydb是数据库名,name和psw是登陆数据库的帐号和密码。
3、在建立的一个web project中,在Tomcat 6.0\webapps\ProjectName\WEB-INF\web.xml中添加
<resource-ref>
<description>Oracle Datasource example</description>
<res-ref-name>jdbc/myoracle</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
4、配置就完成了,下面用一个jsp文件进行测试:
<%@ page contentType="text/html; charset=gb2312" %>
<%@ page import="javax.naming.*" %>
<%@ page import="javax.sql.*" %>
<%@ page import="java.sql.*" %>
<html><head><title>Oracle JDBC Test</title></head>
<body>
<%
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
try{
Context initCtx = new InitialContext();
Context envCtx = (Context)initCtx.lookup("java:comp/env");
DataSource ds=(DataSource)envCtx.lookup("jdbc/myoracle");
if(ds!=null){
out.println("Get DataSource!");
out.println(ds.toString());
conn=ds.getConnection();
if(conn!=null){
out.println("Create connection !");
stmt=conn.createStatement();
out.println("Create Statement !");
rs=stmt.executeQuery("select * from person");
while(rs.next()){
out.println(rs.getString("name"));
}
out.println("</table>");
rs.close();
stmt.close();
conn.close();
}
}
}catch(Exception e){
out.println(e.toString());
System.out.println(e.toString());
}
%>
</body>
</html>
person是一个表,name是一列名。