Tomcat7配置数据源
今天看书的时候,终于知道tomcat的数据源是什么了意思了,以前在看的时候一直不知道,当我知道的时候,我便马上进行了实验,可是看似配置很简单,但是运行起来的时候,却不是那么容易了。我遇到了几个错误,调试挺长的时间后,就剩下了一个错误,可是这个错误提示的很明白“没有找到类”,这使我百思不得其解,我一直在想办法调试,我一直以为是我的某个属性值写错了,调了很长很长的时间,到了最后的时候,才发现是我的resource这个标签多加了字母,这让我感觉太哭笑不得了,怎么能犯这么低级的错误呢?之后又做了几次,终于没有错误了,这让我对tomcat的数据源有了更近一步的了解。下面我来说说配置吧!
从Tomcat的5.5这个版本开始,就内置的了对数据源的实现,所以可以非常方便的配置Tomcat的数据源,这里我使用的是Tomcat7这个版本的。Tomcat提供了两种配置数据源的方式,唯一的区别就是访问的范围不一样,一个是全局的数据源,一个是局部的数据源,大家听了这个名字就知道它们的访问的范围了。全局的数据源是可以让服务器下的所有Web应用访问的,而局部的数据源只能让服务器下的某一个Web应用访问。不同于微软操作系统上自带的odbc的数据源,Tomcat的数据源是基于jdbc这种连接方式的。它将得到连接的那些代码做了一个数据源,通过该数据源可以很方便获得数据库连接的那个Connection对象,不用每一次都进行加载驱动,得到连接的设置了。既然是jdbc的方式,那么就需要对应的数据库的jdbc驱动程序,这里我要连接的mysql和oracle数据库,驱动程序都放在了Web应用下的lib文件夹下,也有的人将该驱动放入到Tomcat的安装目录下的lib文件夹下,这是一样的,只不过这样做就不用每次都将驱动放入到lib文件夹下了。对于局部数据源的配置只需要修改两处即可,修改该Web应用的Context处,和Web.xml文件。对于Tomcat的应用来说,部署该应用通常有四种方式,对于其中的手动部署的方式通常借助于Context这个标签来进行,如果你的Web应用使用Context进行部署的化,那么在该Context的内部加上如下的语句:
<!—这是针对MySQL数据库的-->
<Resource name="jdbc/mysql"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/longyu"
username="root"
password="longyu"
maxActive="5"
maxIdle="2"
maxWait="10000"/>
<!—这是针对Oracle数据库的-->
<Resource name="jdbc/oracle"
auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:orcl"
username="scott"
password="tiger"
maxActive="5"
maxIdle="2"
maxWait="10000"/>
其中各项的含义是:
name属性指定了数据源在容器中的JNDI(即Java Naming Directory Interface,Java命名和目录接口,就是为Java对象起了一个名字,而用在数据源中便是为数据源起了名字,同过这个名字可以让其他程序来访问该数据源对象)名;
auth属性指定了认证方式为container;
type属性指定了数据源的类型,一般都使用javax.sql.DataSource这个类;
driverClassName属性指定了连接数据库的驱动;
url属性指定了连接数据库服务的URL;
username属性指定了连接数据库的用户名;
password属性指定了连接数据库的密码;
maxActive属性指定了数据源最大的活动连接数;
maxIdle属性指定了数据池中最大的空闲连接数;
maxWait属性指定了数据池中最大等待获取连接的客户端。
接下来要修改Web.xml文件,在其中为相应的数据源添加相应的语句,如下所示:
<!—这是针对MySQL数据库的-->
<resource-ref>
<description>Java JDBC</description>
<res-ref-name>jdbc/mysql</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<!—这是针对Oracle数据库的-->
<resource-ref>
<description>Java JDBC</description>
<res-ref-name>jdbc/oracle</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
其中“<res-ref-name>jdbc/mysql</res-ref-name>”中的值要与Resource的name属性值一样。接下来就是要编写测试文件了。内容如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*,javax.sql.*,javax.naming.*" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>
<head>
<title>My JSP 'tomcatTest.jsp' starting page</title>
</head>
<body>
<%
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/oracle");
Connection con = ds.getConnection();
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("select * from t_student");
while(rs.next())
{
out.println("<h1>"+rs.getString(1)+"</h1>");
}
rs.close();
st.close();
con.close();
%>
</body>
</html>
经过测试上述页面就可以连接到oracle数据库和MySQL数据库了。
注意:在每次进行连接数据库的时候都要写上如下的几句话,这些都是固定的,其中第二句的lookup里参数前面一定要加上“java:comp/env”的字符串,否则会出现错误。而且使用这样的方式一定要导入的包是java.sql包,javax.sql包,和javax.naming包下的文件,要不然也会出现错误。
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/oracle");
Connection con = ds.getConnection();
对于Tomcat的数据源的配置,我也是刚学,有些问题可能不对,希望大家理解,提出我的错误之处。