jsp调用javabean,javabean封装数据库的问题

大家好!我做了一个简单的jsp调用javabean,用javabean封装数据库的程序。可是出现了以下错误,由于我是一个java初学者,因此对这类问题百思不得其解。请各位好心人帮我,看一下,到底是哪里错了,谢谢大家!

(数据库用mysql,服务器用weblogic)

1。在c:\myjsp\beandb\下建立一个welcome.jsp文件和一个beandb.java文件。(beandb.java文件中package myconnect;)

2。编译java文件:C:\myjsp\beandb>javac -d WEB-INF\classes beandb.java

至此,我的目录结构如下:
c:\myjsp\beandb\welcome.jsp
\beandb.java
\META-INF\MANIFEST.MF
\WEB-INF\web.xml
\classes\myconnect\beandb.class

3。打包应用:C:\myjsp\beandb>jar cvf c:\bea\wlserver6.1\config\mydomain\applications\mybeandb.war *


4。打开weblogic server,在控制台中安装好mybeandb.war
(我的weblogic server启动总是production mode,请问如何使它处于deployment mode?)

5。打开mysql

6。打开浏览器,键入http://localhost:7001/mybeandb/welcome.jsp

出现错误如下:
Error 500--Internal Server Error
From RFC 2068 Hypertext Transfer Protocol -- HTTP/1.1:
10.5.1 500 Internal Server Error
The server encountered an unexpected condition which prevented it from fulfilling the request.

附:welcome.jsp程序如下:
<%@page language="java" import="java.sql.*"%>
<jsp:useBean id="mydb" scope="page" class="myconnect.beandb"/>
<%
String sql="select NAME from PhoneBook where ID='3'";
ResultSet rs=mydb.executeQuery(sql);
String name;
name=rs.getString("NAME");
out.println(name);
%>

beandb.java程序如下:
package myconnect;
import java.sql.*;
public class beandb
{ String driver="org.gjt.mm.mysql.Driver";
String url="jdbc:mysql://localhost:3306/mydb";
String user="root";
String password="java123";
ResultSet rs=null;

public beandb(){
try{Class.forName(driver);}
catch(Exception e){System.out.println("无法加载驱动程序:"+driver);
e.printStackTrace();}
}

public ResultSet executeQuery(String sql){
rs=null;
try{Connection con=DriverManager.getConnection(url,user,password);
if(!con.isClosed())
System.out.println("打开数据库连接成功!");
Statement smt=con.createStatement();
rs=smt.executeQuery(sql);
}
catch(SQLException SE){System.out.println("打开数据库连接失败!");
SE.printStackTrace();}
return rs;
}
}


我知道我的问题档次很低,可我是一个java新手,希望大家帮帮我吧,谢谢!

页面出错的时候,Weblogic的DOS窗口会输出错误堆栈信息,或者也可以在Weblogic的访问日志里面找到。

没有错误堆栈信息,神仙也不知道你究竟出了什么问题。

你的Bean看不出什么问题,问题可能出在jsp文件或weblogic的配置方面.我的建议:初学阶段选用apache tomcat做servlet容器兼web server 较好点,再有你可以在jdk环境调通dbbean,先保证bean没有任何问题,然后再调jsp.

如果你必需在weblogic下开发,connection请使用连接池管理吧!你可在console中配置好你的JDBC连接池.

你的JSP代码中:ResultSet rs=mydb.executeQuery(sql);,这里的mydb是怎么来的,应该是beandb类的实例吧,好像没有看到声明哦,把完整的JSP贴出来看看呢

我在weblogic的DOS窗口中看了,出错信息如下:

无法加载驱动程序:org.gjt.mm.mysql.Driver
java.lang.ClassNotFoundException: org.gjt.mm.mysql.Driver
at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClass
Loader.java:178)
at weblogic.utils.classloaders.ChangeAwareClassLoader.findClass(ChangeAw
areClassLoader.java:45)
at java.lang.ClassLoader.loadClass(ClassLoader.java:297)
at java.lang.ClassLoader.loadClass(ClassLoader.java:253)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:313)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:120)
at beandb.beandb.<init>(beandb.java:11)
at jsp_servlet._welcomedb._jspService(_welcomedb.java:94)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:27)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm
pl.java:263)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm
pl.java:200)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppSe
rvletContext.java:2390)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestIm
pl.java:1959)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:137)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120)
打开数据库连接失败!
java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getConnection(DriverManager.java:537)
at java.sql.DriverManager.getConnection(DriverManager.java:177)
at beandb.beandb.executeQuery(beandb.java:18)
at jsp_servlet._welcomedb._jspService(_welcomedb.java:102)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:27)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm
pl.java:263)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm
pl.java:200)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppSe
rvletContext.java:2390)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestIm
pl.java:1959)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:137)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120)
<2003-7-16 下午01时18分11秒> <Error> <HTTP> <[WebAppServletContext(7861910,beand
b,/beandb)] Servlet failed with Exception
java.lang.NullPointerException
at jsp_servlet._welcomedb._jspService(_welcomedb.java:107)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:27)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm
pl.java:263)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm
pl.java:200)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppSe
rvletContext.java:2390)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestIm
pl.java:1959)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:137)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120)
>

但我使用单独的java程序连接数据库,同样这些代码却没有问题。
不知到底是怎么回事阿?

附:welcome.jsp程序如下:
<%@page language="java" import="java.sql.*"%>
<jsp:useBean id="mydb" scope="page" class="myconnect.beandb"/>
<%
String sql="select NAME from PhoneBook where ID='3'";
ResultSet rs=mydb.executeQuery(sql);
String name;
name=rs.getString("NAME");
out.println(name);
%>

附:welcome.jsp程序如下:
<%@page language="java" import="java.sql.*"%>
<jsp:useBean id="mydb" scope="page" class="myconnect.beandb"/>
<%
String sql="select NAME from PhoneBook where ID='3'";
ResultSet rs=mydb.executeQuery(sql);
String name;
name=rs.getString("NAME");
out.println(name);
%>

我的jsp文件内容应该没错的。因为从weblogic的错误信息中可以看出,错误好像就在没有找到数据库驱动程序。
可是我同样的程序在单独的java程序中,运行得很好啊。
所以我百思不得其解。
谢谢大家帮我指点:)

把mysql驱动放到\WEB-INF\lib目录下,或者在startWeblogic.cmd脚本的CLASSPATH里面加上mysql驱动的路径。

谢谢robbin大哥再度为我解开难题,您真是我在java学习道路上的启蒙良师!
我真的是感激不尽!

>>我的weblogic server启动总是production mode,请问如何使它处于deployment mode

修改startWeblogic.cmd启动脚本,找到其中一行

production mode

改为:

production mode = false

记错了,应该是:

production = false

其实写JAVA时,大部分问题都出在classpath上,大家以后可以引起注意。错了先看它。对了,多看错误提示。分布式程序哪部分都有可能出错。千万不要不理会错误提示或是被它吓住了。

这里的论坛是我去过的最好的论坛,热心人多,而且对我的问题总能一针见血的指出,我真喜欢!
还有,谢谢robbin的指点,谢谢bruce的建议!