首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JSP Bean 實例化失敗:解決 "bean product not found within scope" 錯誤

     編輯:程式設計綜合問答

錯誤現象

在訪問 /displayinform.jsp 時,Tomcat 拋出 org.apache.jasper.JasperException,根因為 java.lang.InstantiationException: bean product not found within scope。堆疊追蹤顯示異常發生在 JSP 第 2 行,但該行僅為空白行,實際問題在於 <jsp:useBean> 或對應的 Servlet 未正確將 ProductBean 放入指定作用域。

常見原因

  • Bean 未實例化:Servlet 中未 new ProductBean() 或未調用 setAttribute。
  • 作用域不匹配:JSP 使用 scope="session",但 Servlet 存入 request。
  • 類名/包名錯誤:class="com.bean.ProductBean" 與實際類不符。

排查步驟

  1. 檢查 QueryInformServlet.doPost() 第 27 行,確認是否已 request.setAttribute("product", product)。
  2. 在 JSP 中使用 <jsp:useBean id="product" class="com.bean.ProductBean" scope="request"/>,作用域與 Servlet 一致。
  3. 若 Bean 需從資料庫查詢,確保 DAO 方法 searchinfom 正確返回物件,而非 null。

修正範例

// Servlet
ProductBean product = productdao.searchinfom(username);
if (product != null) {
    request.setAttribute("product", product); // 放入 request 作用域
    request.getRequestDispatcher("/displayinform.jsp").forward(request, response);
} else {
    response.sendRedirect("error.jsp");
}
<!-- displayinform.jsp -->
<%@ page contentType="text/html;charset=gb2312"%>
<jsp:useBean id="product" class="com.bean.ProductBean" scope="request"/>
書號:<jsp:getProperty name="product" property="product_id"/><br>
書名:<jsp:getProperty name="product" property="product_name"/>

若問題仍存,請檢查 Tomcat 日誌 catalina.out 完整堆疊,確認類載入路徑無衝突。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved