4

我现在正在学习如何使用 jsp 和 bean,但无法理解我遇到的问题。

我正在尝试创建一个这样的bean:...

并收到错误消息:

java.lang.InstantiationException:在范围内找不到 bean 保留

我在网上四处查看,大多数人似乎建议使用 class="..." 而不是 type="...",或者使用 import 语句。我已经在做前者并尝试了后者……有什么想法吗?

这是豆子:

package homework10;

public class Reservation {

private int groupSize;
private String status;
private double cost;
private boolean triedAndFailed;

public Reservation(){      
}

public void setGroupSize(int gs)
{
    groupSize = gs;
}

public int getGroupSize()
{
    return groupSize;
}
public void setStatus(String str)
{
    this.status = str;
}

public String getStatus()
{
    return status;
}    

public void setCost(double cost)
{
    this.cost = cost;
}

public double getCost()
{
    return cost;
} 

public void setTriedAndFailed(boolean bool)
{
    this.triedAndFailed = bool;
}

public boolean isTriedAndFailed()
{
    return triedAndFailed;
}    

}

这是jsp页面的开头:

<head>
    <!--<script type="text/javascript" src="functions8.js">
    </script>-->
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>BHC Calculator-HTML-validation + Servlet Version</title>
    <jsp:useBean id = "reservation" class = "homework10.Reservation" scope = "session" />
</head>

提前致谢!

4

1 回答 1

5

java.lang.InstantiationException

这基本上意味着在普通的 Java 术语中,以下构造

import homework10.Reservation;

// ...

Reservation reservation = new Reservation(); 

失败了。

这有很多可能的原因:

  1. 运行时类路径中缺少类。
  2. 找不到类定义。
  3. 课堂不公开。
  4. 类没有公共默认构造函数。
  5. 公共默认构造函数中的代码引发了异常。

根据到目前为止提供的代码,并假设您 100% 确定您正在运行您认为正在运行的代码,那么这只能是原因 #1 或 #2。该类是公共的,并且有一个公共的默认构造函数,它基本上什么都不做。所以#3、#4 和#5 可以被划伤。

要修复可能的原因 #1,请确保类文件存在于 webapp 部署路径中
/WEB-INF/classes/homework10/Reservation.class。要解决可能的原因 #2,您还应该确保以正确的方式编译类,同时保留包结构。因此,当您不使用 Eclipse 之类的 IDE,而是在命令提示符下摆弄低级别时,您应该确保在编译类时包含该包。


至于您找到的可能解决方案,

大多数人似乎建议使用 class="..." 而不是 type="..."

这是正确的。要了解更多信息,请访问以下答案:javax.servlet.ServletException: bean [name] not found within scope但是,这显然不是您的特定情况的原因,因为它显然没有解决问题。

或使用导入语句

这完全没有意义。那些人对scriptlet感到困惑。应该在所有程度上避免它们。实际上,这<jsp:useBean>也是一个不同的故事。另请参阅我们的 Servlets wiki 页面以获取一些提示。

于 2013-07-24T19:24:33.460 回答