您的位置:首页 > 数据库

Tomcat通过JNDI方式连接SqlServer数据库 开发JSP详解

2008-02-06 01:03 507 查看
经过几天的努力,参考了网上诸多资料,终于可以连接上连接池了,现整理如下:

配置环境:jdk-6u1-windows-i586-p.exe+jakarta-tomcat-5.0.28.exe+SqlServer2000sp3

方式一
一:
启动Tomcat,打开IE在地址栏内输入http://localhost:8080/admin 进入Tomcat的管理界面;点击右边的Data Sources 在右上角的下拉菜单中选择Create New Data Source 在下边的输入框中输入需要的配置信息。输入后单击保存按钮,再点击commit change提交。所填内容的说明如下
JNDI Name:jdbc/mydb(mydb为自己所命的名字)
Data Source URL:jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=databasebname(连接的数据名)
JDBC Driver Class: com.microsoft.jdbc.sqlserver.SQLServerDriver
User Name:连接数据库的用户名
Password: 数据库密码
Max. Active Connections: 最大连接数
Max. Idle Connections: 是最大的空闲连接数
Max. Wait for Connection: 最大等待连接数
validationQuery:用来查询池中空闲的连接。
提交后会发现conf/server.xml的内容发生了改变,经过对比发现以上的操作实际上修改了<GlobalNamingResources>标签中的<Resource>标签,即添加了资源描述,同时还把原有的注释全部删除。

二.创建新的WEB应用程序,我们假设应用程序存放的物理路径为d:/jndi,同时建立其子目录d:/jndi/WEB-INF

在%TOMCAT_HOME%/conf/Catalina/localhost中建立虚拟目录描述文件jndi.xml ,内容如下:
<Context displayName="jndi" docBase="D:/jndi" path="/jndi" workDir="work/Catalina/localhost/jndi">
<ResourceLink global="jdbc/mydb" name="jdbc/mydb" type="javax.sql.DataSource"/>
</Context>
此步操作的目的是建立虚拟站点/jnd并使得jndi应用程序能够引用所配置的JNDI数据源,如果不加会出现错误Cannot create JDBC driver of class '' for connect URL 'null'

三、在d:/jndi/WEB-INF中建立web.xml文件,为应用程序指定JNDI数据源,内容如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/mydb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>

四.测试,先在数据库中建一个有2列元素,名称为jndi的表,之后采用如下JSP页面测试命名为test.jsp,浏览器中输入网址http://127.0.0.1:8080/jndi/test.jsp
<%@ page import="java.io.*,java.util.*,java.sql.*,javax.sql.*,javax.naming.*"%>
<%@ page contentType="text/html;charset=GB2312"%>
<html>
<head><title>DataSourse Connection Test</title></head>
<body>
<%
try{

java.sql.Connection con;
Statement stmt;
ResultSet rs;

Context ctx = new InitialContext();
DataSource ds=(DataSource)ctx.lookup("java:/comp/env/jdbc/mydb");
con=ds.getConnection();

stmt=con.createStatement();
rs=stmt.executeQuery("select * from jndi");
while(rs.next())
{
out.print(rs.getString(1));
out.print(rs.getString(2));
}
rs.close();
stmt.close();
con.close();
}
catch(Exception e)
{
out.print(e.getMessage());
}
%>
</body>
</html>

方式二
一 把方式一步骤1里产生的代码放入tomcat安装目录下/conf/catalina/localhost/项目名.xml中(依前面的约定此名为jndi.xml)
产生代码如下:
<Resource auth="Container" description="User database that can be updated and saved" name="UserDatabase" type="org.apache.catalina.UserDatabase"/>
<Resource name="jdbc/mysql" type="javax.sql.DataSource"/>
<ResourceParams name="UserDatabase">
<parameter>
<name>factory</name>
<value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
</parameter>
<parameter>
<name>pathname</name>
<value>conf/tomcat-users.xml</value>
</parameter>
</ResourceParams>
<ResourceParams name="jdbc/mysql">
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost/test</value>
</parameter>
<parameter>
<name>password</name>
<value></value>
</parameter>
<parameter>
<name>maxActive</name>
<value>4</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>5000</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>org.gjt.mm.mysql.Driver</value>
</parameter>
<parameter>
<name>username</name>
<value>root</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>2</value>
</parameter>
</ResourceParams>
二 同方式一的第三步
两者的区别是作用域不同 具体说来方式一建立了一个全局的数据源,以供WEB应用程序使用。方式一的第一步声明了全局数据源,第二步则说明jndi应和程序要引用一个名为jdbc/mydb的数据源。在方式二中,由一步完成了上述两步,但方式二所建的这个数据源也就仅能供当前所在的应用程序来使用。

三 测试 同方式一第四步

注意:
1.org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory ([Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.)此是一个小问题,因为我的SQLSERVER2K的服务改成手动的,所以每次启动后就要手动的启动SQLSERVER2K,由于一下子不记的启动了,所以报些错误,所以如果你经常要用到SQLSERVER2K的话,最好不要将其改为手动启动
2.sqlserver2k sp3以下版本1433端号是没有打开的,必须进行升级,否则会出现Cannot create PoolableConnectionFactory ([Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐