主题:[讨论]JSP tomcat MSSQL 问题(急,先谢谢了)
wysoft
[专家分:130] 发布于 2006-08-05 18:23:00
我准备做一个系统,当我做安装测试时,数据库不能连接.
在之前,我测试了JDK, tomcat都通过了,同时我也安装了MSSQL的驱动,
我的测试程序是在网上找的,当然我不明白用户,密码要怎么设置,同时也不知道在驱动程序下的三个文件为什么要放到tomcat……下,更晕的是,我不知道我要连接上数据库学要做什么准备工作。
请各位高手指点一下,不胜感激。
回复列表 (共9个回复)
沙发
wysoft [专家分:130] 发布于 2006-08-06 12:04:00
另外我的JDK TOMCAT 的配置如下:
第一步:----安装J2SDK:
到SUN官方站点(http://java.sun.com)下载J2SDK的安装文件:j2sdk-1_4_2_04-windows-i586-p.exe,下载之后
安装好J2SDK;
安装完之后,设置环境变量:我的电脑---属性---高级---环境变量;
选择---系统变量(S):
设置JAVA_HOME环境变量:
单击---新建,在变量名中输入:JAVA_HOME
在变量值中输入:D:\Java
(假设J2SDK安装在目录D:\Java下,反正就是J2SDK的安装目录。)
然后---确定,到此已经设置好JAVA_HOME环境变量。
设置CLASSPATH环境变量:
单击---新建,在变量名中输入:CLASSPATH
在变量值中输入:D:\Java\bin;.;D:\Java\lib;D:\Java\lib\dt.jar;D:\Java\lib\tools.jar
(中间的点号“.”和分号“;”必不可少。)
然后---确定,到此已经设置好CLASSPATH环境变量。
设置PATH环境变量:
单击---新建,在变量名中输入:PATH
在变量值中输入:D:\Java;.;D:\Java\bin
(中间的点号“.”和分号“;”必不可少。)
然后---确定,到此已经设置好JAVA_HOME环境变量。
三个环境变量设置好后,写一个简单的java程序来测试J2SDK是否已安装成功:
在D:\下新建一个目录test;然后写如下程序:
public class Test {
public static void main(String args[]) {
System.out.println("This is a test program.");
}
}
将上面的这段程序保存为文件名为Test.java的文件,保存在目录D:\test下。
然后打开命令提示符窗口,cd到你的test目录,然后键入下面的命令
javac Test.java
java Test
此时如果看到打印出来This is a test program.的话说明安装成功了,
如果没有打印出这句话,你需要仔细检查一下你的配置情况。
如果上面的J2SDK安装成功的话,接下来继续安装Tomcat:
第二步:----安装Tomcat:
到tomcat官方站点(http://www.apache.org/dist/jakarta/tomcat-4/)下载tomcat:
jakarta-tomcat-4.1.30.exe,下载之后安装。(比如安装在D:\Tomcat下。)
安装完之后,设置环境变量:我的电脑---属性---高级---环境变量;
选择---系统变量(S):
设置CATALINA_HOME环境变量:
单击---新建,在变量名中输入:CATALINA_HOME
在变量值中输入:D:\Tomcat
然后---确定,到此已经设置好CATALINA_HOME环境变量。
设置CATALINA_BASE环境变量:
单击---新建,在变量名中输入:CATALINA_BASE
在变量值中输入:D:\Tomcat
然后---确定,到此已经设置好CATALINA_BASE环境变量。
然后修改环境变量中的CLASSPATH,把Tomat安装目录下的common\lib下的servlet.jar追加到CLASSPATH中去,
修改后的CLASSPATH如下:
CLASSPATH=D:\Java\bin;.;D:\Java\lib;D:\Java\lib\dt.jar;D:\Java\lib\tools.jar;D:\Tomcat\common\lib\servlet.jar
接着可以启动tomcat,在IE中访问http://localhost:8080,如果看到tomcat的欢迎页面的话说明安装成功了。
如果上面的tomcat安装成功的话,接下来继续安装JSP访问SQL Server 2000的驱动程序:
第三步:----安装JSP访问SQL Server 2000的驱动程序:
从微软的网站上下载驱动程序:SQL Server 2000 For JDBC 驱动程序,在Google中随便搜索就有。
然后将它安装好。(比如安装目录是D:\SQLDriverForJDBC。)
然后必须将安装目录中的lib目录下三个jar文件:
msbase.jar, mssqlserver.jar, msutil.jar拷贝到Tomcat目录下common\lib目录下,之后,
修改环境变量中的CLASSPATH,
把SQL Server 2000 For JDBC 驱动程序安装目录下的
D:\SQLDriverForJDBC\lib\msbase.jar;D:\SQLDriverForJDBC\lib\mssqlserver.jar;D:\SQLDriverForJDBC\msutil.jar
追加到CLASSPATH中去,
修改后的CLASSPATH如下:
CLASSPATH=D:\Java\bin;.;D:\Java\lib;D:\Java\lib\dt.jar;D:\Java\lib\tools.jar;D:\LubeeTomcat\common\lib\servlet.jar;D:\SQLDriverForJDBC\lib\msbase.jar;D:\SQLDriverForJDBC\lib\mssqlserver.jar;D:\SQLDriverForJDBC\msutil.jar
必须重新启动Tomcat!
这样做的目的是,jsp页面在编译过程中不会出现找不到sql server driver类库的问题
板凳
wysoft [专家分:130] 发布于 2006-08-06 12:05:00
我的测试程序是:
<%@ page contentType="text/html;charset=gb2312" language="java"
import="java.sql.*,javax.sql.*,javax.naming.*,javax.naming.*" errorpage="" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=gb2312">
<title>连接池连接MS SQL SERVER 2000</title>
</head>
<body>
<%
out.print("使用连接池连接MS SQL SERVER 2000<br>");
out.println("<br>");
Context ctx=null;
DataSource ds=null;
Statement stmt=null;
ResultSet rs=null;
Connection con=null;
ResultSetMetaData md=null;
try{
ctx=new InitialContext();
ds=(DataSource)ctx.lookup("java:comp/env/jdbc/first");
con=ds.getConnection();
stmt=con.createStatement();
rs=stmt.executeQuery("select * from student");
md=rs.getMetaData();
out.print(md.getColumnLabel(1)+" ");
out.print(md.getColumnLabel(2)+"<br>");
while(rs.next()){
out.print("rs.getString(1)+" ");
out.print("rs.getString(2)+"<br>");
}
}catch(Exception e){
out.print(e);
}finally{
if(rs!=null)rs.close();
if(stmt!=null)stmt.close();
if(con!=null)con.close();
}
%>
</body>
</html>
3 楼
wysoft [专家分:130] 发布于 2006-08-06 12:06:00
运行后报了很多错
错误如下:
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: /sss.jsp(1,1) Page directive has invalid attribute: errorpage
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:39)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:409)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:200)
org.apache.jasper.compiler.JspUtil.checkAttributes(JspUtil.java:304)
org.apache.jasper.compiler.Validator$DirectiveVisitor.visit(Validator.java:100)
org.apache.jasper.compiler.Node$PageDirective.accept(Node.java:549)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2163)
org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2213)
org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2219)
org.apache.jasper.compiler.Node$Root.accept(Node.java:456)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2163)
org.apache.jasper.compiler.Validator.validate(Validator.java:1438)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:214)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:495)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:476)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:464)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:511)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:295)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
note The full stack trace of the root cause is available in the Apache Tomcat/5.0.30 logs.
--------------------------------------------------------------------------------
Apache Tomcat/5.0.30
4 楼
wysoft [专家分:130] 发布于 2006-08-06 12:08:00
而我在JB下运行,运行生成的页面是:
使用连接池连接MS SQL SERVER 2000
javax.naming.NameNotFoundException: Name jdbc is not bound in this Context
哪一位高手知道是怎么一回事的话,请回帖,不胜感激。
5 楼
wysoft [专家分:130] 发布于 2006-08-06 18:08:00
我后来又做了一个运行程序,这个程序可以在JB下运行通过,并得到正确结果。
程序如下:
<%@ page contentType="text/html;charset=gb2312" import="java.sql.*" %>
<html>
<head>
<meta http-equiv="Content_Type" content="text/html;charset=gb2312">
<title>数据库连接</title>
</head>
<body>
<%
String sql="select * from student";
String drivername="sun.jdbc.odbc.JdbcOdbcDriver";
String url="jdbc:odbc:first";
Connection con=null;
Statement state=null;
ResultSet rs=null;
out.print("JDBC_ODBC桥接器连接 MSSQL SERVER 2000<br>");
out.println("<br>");
try{
Class.forName(drivername);
con=DriverManager.getConnection(url);
state=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs=state.executeQuery(sql);
while(rs.next()){
String id=rs.getString(1);
String username=rs.getString(2);
out.print(id+" ");
out.print(username+"<br>");
}
}catch(Exception e){
out.print("Exception>>"+e.getMessage());
}
if(rs!=null)rs.close();
if(state!=null)state.close();
if(con!=null)con.close();
%>
</body>
</html>
但这个程序在我上面配置的环境下运行不了。
报得错问是:
JDBC_ODBC桥接器连接 MSSQL SERVER 2000
Exception>>[Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序
请各位大虾指点一下,急用。
6 楼
wysoft [专家分:130] 发布于 2006-08-08 12:38:00
看贴的人那么多,怎么就没有一个回贴的呢,
请各位大虾指点一下。
先谢了。
7 楼
233238447 [专家分:1350] 发布于 2006-08-13 19:35:00
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: /sss.jsp(1,1) Page directive has invalid attribute: errorpage
这句错误意思是,你的 errorpage 值为空
JDBC_ODBC桥接器连接 MSSQL SERVER 2000
Exception>>[Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序
这个错,不看就知道,你数据源没有配
8 楼
wysoft [专家分:130] 发布于 2006-08-14 10:54:00
很是谢谢你,
可我同一个程序在JB下运行通过了啊,
如果我的数据源有问题的话,
怎么会在JB下运行通过呢???
9 楼
wysoft [专家分:130] 发布于 2006-08-14 10:57:00
我想可能错在JDBC驱动上,我今天看了一本书,书上说,JDK自带JDBC驱动。
我有点头晕了,不知道是真是假,还有你能告诉我怎么配那个**.xml文件啊
我来回复