注册 登录
编程论坛 J2EE论坛

高手帮帮我,关于jsp+bean的问题

zhangkangl 发布于 2007-11-30 23:14, 2267 次点击
高手帮帮我,关于jsp+bean的问题
我在做一个jsp+bean连接数据查询时,出现以下错误,我是初学者,高手帮我看看
HTTP Status 500 -
--------------------------------------------------------------------------------
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: /copylogin.jsp(3,0) The value for the useBean class attribute moon.mybean.mybean is invalid.
 org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510)
 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause
org.apache.jasper.JasperException: /copylogin.jsp(3,0) The value for the useBean class attribute moon.mybean.mybean is invalid.
 org.apache.(DefaultErrorHandler.java:39)
 org.apache.(ErrorDispatcher.java:405)
 org.apache.(ErrorDispatcher.java:146)
 org.apache.(Generator.java:1174)
 org.apache.(Node.java:1116)
 org.apache.(Node.java:2163)
 org.apache.(Node.java:2213)
 org.apache.(Node.java:2219)
 org.apache.(Node.java:456)
 org.apache.(Node.java:2163)
 org.apache.(Generator.java:3305)
 org.apache.(Compiler.java:198)
 org.apache.(Compiler.java:295)
 org.apache.(Compiler.java:276)
 org.apache.(Compiler.java:264)
 org.apache.jasper.(JspCompilationContext.java:563)
 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:303)
 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
我猜想应该是bean无效的原因,可我不知道为什么bean无效,我的目录结构如下:
  E:\J2ee\Tomcat 5.5\webapps\link{copylogin.jsp                                                   
 E:\J2ee\Tomcat 5.5\webapps\link\WEB-INF\classes\moon\mybean\Mybean.class}
我的copylogin.jsp代码如下:
<%@ page c language="java" pageEncoding="GB18030"%>
<%@ page import="moon.mybean.Mybean" %>
<jsp:useBean id="login" class="moon.mybean.Mybean" scope="session"/>
<html>
  <head>
     <title>学生管理系统</title>
  </head>
   <body style="text-align:center">
       <br/>    <br/>     <br/>    <br/>     <br/>    <br/>
        <jsp:setProperty name="login" property="*"/>
       <form action="" method="post">
      
        <table border="1">
        <tr>
          <th>用户登录</th>
       </tr>
       <tr>
          <td>用户名 <input type=text name="loginname"></td>
       </tr>
       <tr>
          <td>密 码 <input type=password name="password"></td>
       </tr>
       </table>
       <input type=submit name="submit" value="确定">
       </form>
       <jsp:getProperty name="login" property="news"/>
   </body>
</html>
 Mybean.java代码如下:
package moon.mybean;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Mybean {
 String loginname;
 StringBuffer news=new StringBuffer();
  String password;
    public void setLoginname(String loginname){
      this.loginname=loginname;   
    }
    public String getLoginname(){
      return loginname;
    }
     
    public void setPassword(String password){
       this.password=password;
    }
    public StringBuffer getNews(){
     try{Class.forName("com.microsort.jdbc.sqlserver.SQLServerDriver");
    }
    catch(Exception ee){}
     Connection con;
   PreparedStatement sql;
         try{String uri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=studentmanagement";
            con=DriverManager.getConnection(uri,"sa","sa");
            sql=con.prepareStatement("select * from usertable where 用户名=? and 密码=?");
            sql.setString(1,loginname);
            sql.setString(2, password);
            ResultSet rs=sql.executeQuery();
            con.close();
            news.append("<table bord=1>");
            
            while(rs.next()){
             news.append("<tr>");   
             news.append("<td>"+rs.getString(1)+"</td>");
             news.append("<td>"+rs.getString(2)+"</td>");
             news.append("<td>"+rs.getString(3)+"</td>");
             news.append("<td>"+rs.getString(4)+"</td>");
             news.append("<td>"+rs.getString(5)+"</td>");
             news.append("</tr>");
            }
            news.append("</table>");
           }
         catch(SQLException exp){}      
     return news;   
        }
     }
10 回复
#2
a2762024602007-12-01 05:21
就是找不到bean 是路径的问题 你在向上反一级就是bean的class中加点 应该能找到 没咋写过usebean
#3
无缘今生2007-12-03 14:48
你的代码没有问题。
类的位置也没有问题。
你重启服务器试试。
#4
zhangkangl2007-12-03 23:05
非常感谢2楼与3楼的帮助,我按照你们方法试过了,可问题依然存在,求大家帮帮我,帮我看看问题到底出在哪里呀
#5
netstriker2007-12-04 00:30
帮你改了一下,你的jsp文件好像多了一个字符 c
  
    <%@ page    C     language="java" pageEncoding="GB18030"%>
<%@ page import="moon.mybean.Mybean" %>
<jsp:useBean id="login" class="moon.mybean.Mybean" scope="session"/>
<html>
  <head>
     <title>学生管理系统</title>
  </head>
   <body style="text-align:center">
       <br/>    <br/>     <br/>    <br/>     <br/>    <br/>
        <jsp:setProperty name="login" property="*"/>
       <form action="" method="post">
      
        <table border="1">
        <tr>
          <th>用户登录</th>
       </tr>
       <tr>
          <td>用户名 <input type=text name="loginname"></td>
       </tr>
       <tr>
          <td>密 码 <input type=password name="password"></td>
       </tr>
       </table>
       <input type=submit name="submit" value="确定">
       </form>
       <jsp:getProperty name="login" property="news"/>
   </body>
</html>

    在java文件里
  package moon.mybean;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Mybean {
    String loginname;
    StringBuffer news=new StringBuffer();
  String password;
    public void setLoginname(String loginname){
      this.loginname=loginname;   
    }
    public String getLoginname(){
      return loginname;
    }
     
    public void setPassword(String password){
       this.password=password;
    }
    public StringBuffer getNews(){
     try{Class.forName("com.microsort.jdbc.sqlserver.SQLServerDriver");
    }
    catch(Exception ee){}
  /*   Connection con;
   PreparedStatement sql;
         try{String uri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=studentmanagement";
            con=DriverManager.getConnection(uri,"sa","sa");
            sql=con.prepareStatement("select * from usertable where 用户名=? and 密码=?");
            sql.setString(1,loginname);
            sql.setString(2, password);
            ResultSet rs=sql.executeQuery();
            con.close();
            news.append("<table bord=1>");
            
            while(rs.next()){
             news.append("<tr>");   
             news.append("<td>"+rs.getString(1)+"</td>");
             news.append("<td>"+rs.getString(2)+"</td>");
             news.append("<td>"+rs.getString(3)+"</td>");
             news.append("<td>"+rs.getString(4)+"</td>");
             news.append("<td>"+rs.getString(5)+"</td>");
             news.append("</tr>");
            }
            news.append("</table>");
           }
         catch(SQLException exp){}
         */                  //因为我这里是调试没有数据库,所以暂时用这样的方法代替.
        news.append("www.);
        news.append("www.);
     return news;   
        }
     }

     经过上面修改,已经可以运行了,不会出现异常,但是在news变量中,我禁用了上数据库的代码,其他的没有改,估计是在数据库执行的时候出现了问题,所以令bean无效.
#6
千里冰封2007-12-04 10:19
The value for the useBean class attribute moon.mybean.mybean is invalid.
#7
风月_无边2007-12-04 14:46
也許是配置的有問題﹗
#8
zhangkangl2007-12-05 03:57
非常感谢5楼的兄弟那么仔细的帮助,我按照5楼[url=http://bbs.bc-cn.net/space-uid-134420.html]netstriker[/url] 的做法试了一下,这时在copylogin.jsp中的确能够显示出Mybean中的数据了,不过还是有些疑问不太明白
我是用MyEclipse开发工具来做的,当我在修改Mybean之前(即没有屏蔽数据库操作代码段),用myeclipse打开copylogin.jsp时其中有两行代码会显示如下信息
   
只有本站会员才能查看附件,请 登录
<%@ page import="moon.mybean.Mybean" %>
   
只有本站会员才能查看附件,请 登录
<jsp:useBean id="login" class="moon.mybean.Mybean" scope="session"/>
这时点击
只有本站会员才能查看附件,请 登录
这个黄色的错误提示按钮后出现了以下提示The import moon.mybean.MyBean is never used
这时如果执行copylogin.jsp文件,就出现了当初发帖时的错误。
我按照5楼兄弟的做法修改了Mybean(即屏蔽数据库操作代码段),这时执行copylogin.jsp文件,能够显示出Mybean中的数据,且没有错误提示。
不过我用myeclipse打开copylogin.jsp时其中两行代码依然显示如下信息
   
只有本站会员才能查看附件,请 登录
<%@ page import="moon.mybean.Mybean" %>
   
只有本站会员才能查看附件,请 登录
<jsp:useBean id="login" class="moon.mybean.Mybean" scope="session"/>
点击
只有本站会员才能查看附件,请 登录
这个黄色的错误提示按钮后出现了以下提示The import moon.mybean.MyBean is never used
我想这个意思依然是bean不能启用吧,只不过这时执行copylogin.jsp文件能够显示出Mybean中的数据了,这到底是什么原因,请大家告诉我一下原因。

[[italic] 本帖最后由 zhangkangl 于 2007-12-5 04:18 编辑 [/italic]]
#9
scdmike2007-12-05 17:37
我把你的代码复制下来,我放到tomcat下应用。证明访问数据库的代码,存在错误。第一个问题是:con.close();关闭的太早了。
我这里只是修改了这一个地方,就可以运行。并且,在没有修改前也没有出现你描述的那种情况。应该是楼上的大哥说的那样,是这个Bean存在问题的缘故。
#10
zhangkangl2007-12-06 02:52
郁闷呀,为什么同样一个问题,楼上的兄弟做了修改就能够运行,一到我这里运行就达不到同样的效果呢,既然楼上的兄弟用我的代码,得到了正确的结果,
那就证明不是代码的问题,是配置的问题了,我用的是xp系统,myeclipse开发工具,tomcat服务器,安装的是sql2000个人版,打了sp4补丁,下载了jdbc补丁,并且其中的的msbase.jar,mssqlserver.jar;msutil.jar三个驱动文件复制到了E:\J2ee\jdk1.5.0_08\jre\lib\ext\目录之下,还有一点就是我的jdk在安装完成以后,直接用javac编译文件就出错,但安装了myeclipse开发工具以后,在工具中可以正常编译文件。不知道这有没有影响,最后还请大家帮忙,帮我找找原因,我实在是被这个问题弄的焦头烂额了,谢谢!

[[italic] 本帖最后由 zhangkangl 于 2007-12-6 07:55 编辑 [/italic]]
#11
scdmike2007-12-06 08:38
我建议你上网看看介绍,比如“jsp连接数据库”,重新设置一下开发环境。还有在关键代码不忙加入输出语句,定位错误。可以试一试。
1