先注明一下,我的Tomcat的版本是5.5,以下是我的server.xml中的配置:
<Context path="/ROOT" docBase="D:\Tomcat 5.5\webapps\ROOT" debug="1" reloadable="true" crossContext="true">
<Resource name="jdbc/conn" auth="Container" type="javax.sql.DataSource"/> <ResourceParams name="jdbc/conn">
<parameter>
<name>factory</name>
<value>org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=test</value>
</parameter>
<parameter>
<name>username</name>
<value>1</value>
</parameter>
<parameter>
<name>password</name>
<value>1</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>10</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>1</value>
</parameter>
</ResourceParams>
</Context>
<Context path="/ROOT" docBase="D:\Tomcat 5.5\webapps\ROOT" debug="1" reloadable="true" crossContext="true">
<Resource name="jdbc/conn" auth="Container" type="javax.sql.DataSource"/> <ResourceParams name="jdbc/conn">
<parameter>
<name>factory</name>
<value>org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=test</value>
</parameter>
<parameter>
<name>username</name>
<value>1</value>
</parameter>
<parameter>
<name>password</name>
<value>1</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>10</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>1</value>
</parameter>
</ResourceParams>
</Context>
<resource-ref>
<description>connection</description>
<res-ref-name>jdbc/conn</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
下面是root.xml,我的web文件放在ROOT目录下面:
<Context displayName="Tomcat Test Application" docBase="D:\Tomcat 5.5\webapps\ROOT" path="/ROOT" privileged="true">
<ResourceLink name="jdbc/conn" type="javax.sql.DataSource" global="jdbc/conn"/>
</Context>
<%@ page import="javax.sql.*"%>
<%@ page import="javax.naming.*"%>
<%@ page import="java.sql.*"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>untitled</title>
</head>
<body>
<%
DataSource ds=null;
try{
InitialContext ctx=new InitialContext();
Context con=(Context)ctx.lookup("java:comp/env");
ds=(DataSource)con.lookup("jdbc/conn");
Connection conn1=ds.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=test","1");
/* Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery("select * from db_factory");
while(rs.next())
{
out.print(rs.getString(1));
}
rs.close();
stmt.close();
*/
conn1.close();
}
catch(Exception e)
{ throw new RuntimeException(e.getMessage());}
%>
</body>
</html>
1、下载Microsoft SQL Server 2000 Service Pack 3a并安装,SQL请选用混和安装模式!!!
http://www.microsoft.com/downloads/details.aspx?FamilyId=90DCD52C-0488-4E46-AFBF-ACACE5369FA3&displaylang=zh-cn
2、下载SQL Server 2000 Driver for JDBC Service Pack 3
http://www.microsoft.com/downloads/details.aspx?FamilyId=07287B11-0502-461A-B138-2AA54BFDC03A&displaylang=en
3、运行时关闭防火墙
4.下载jdbc for sql2000
安装后,找到msbase.jar, mssqlserver.jar,msutil.jar 三个文件
拷贝到tomcat\common\lib 下面
5 同时在classpath中也加入%CATALINA%\common\lib\msbase.jar;%CATALINA%\common\lib\msutil.jar;%CATALINA%\common\lib\msslqserver.jar;
import java.sql.*;
import javax.sql.*;
import javax.naming.*;
import java.io.*;
import java.util.*;
public class DBManager1
{
Connection conn = null;
ResultSet rs = null;
Statement stmt=null;
Object obj;
String sql=null;
String strUser;
String strPassword;
public DBManager1()
{
try
{
Context initCtx = new InitialContext();
Context ctx = (Context) initCtx.lookup("java:comp/env");
obj = (Object) ctx.lookup("jdbc/SqlServerDB");
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
//set user and password
public void setUserAndPasswd(String user,String passwd)
{
this.strUser=user;
this.strPassword=passwd;
}
//----connection
public Connection getConnection() throws Exception
{
javax.sql.DataSource ds = (javax.sql.DataSource)obj;
conn = ds.getConnection();
return conn;
}
//checkuser
public boolean UserPass(String username,String password) throws Exception
{
conn=getConnection();
stmt=conn.createStatement();
sql="SELECT * FROM usert where nick='"+username+"' and password='"+password+"'";
rs=stmt.executeQuery(sql);
if(rs.next())
return true;
else
return false;
}
//----query------------------
public ResultSet executeQuery(String sql)throws Exception
{
conn=getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
if(rs==null)
{
stmt.close();
conn.close();
System.exit(1);
}
// stmt.close();
// conn.close();
return rs;
}
//---Update-------------------
public void executeUpdate(String sql) throws Exception
{
try
{
conn=getConnection();
Statement stmt = conn.createStatement();
stmt.executeUpdate(sql);
}
catch(SQLException ex)
{
System.out.println(ex.getMessage());
}
finally
{
if(stmt!=null)
stmt.close();
conn.close();
}
}
}
这儿就出现错误:org.apache.jasper.JasperException: Name jdbc is not bound in this Context,这说明不要ROOT.xml即ResourceLink去掉时,会找到this context,但这样执行到getConnection时,会出现Cannot create JDBC driver of class '' for connect URL 'null',这好像表明他读取的driverClassName和url的参数为空,但我设置的没有错呀?痛苦的笑着!
出现错误后,我就把上面这句修改成:Connection conn1=ds.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=test","1");
参数随便改了,也一样出现错误Cannot create JDBC driver of class '' for connect URL 'null'!
<Context path="/test" docBase="test" debug="0" reloadable="true" crossContext="true">
<Resource name="jdbc/conn" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="1" password="1" driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=test"/>
</Context>,即把参数全部放在一个<Resource/>中。再次感谢楼上各位的鼎力相助。给分!