Servlet 查詢資料庫後 forward 至 displayinform.jsp,但 JSP 使用 <jsp:getProperty> 取值時發生錯誤,或頁面顯示空白。
ProductBean product = productdao.searchinfom(username);
// 缺少 request.setAttribute("product", product);
RequestDispatcher view = request.getRequestDispatcher("/displayinform.jsp");
view.forward(request, response);
<jsp:getProperty> 會找不到 Bean。searchinfom 回傳 null,JSP 取值拋出 NullPointerException。public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("username");
ProductDao dao = new ProductDao();
ProductBean product = dao.searchinfom(username);
if (product != null) {
request.setAttribute("product", product); // 關鍵:放入 request 作用域
request.getRequestDispatcher("/displayinform.jsp").forward(request, response);
} else {
request.setAttribute("errorMsg", "查無此用戶訂單");
request.getRequestDispatcher("/error.jsp").forward(request, response);
}
}
<%@ page contentType="text/html; charset=gb2312" %>
<jsp:useBean id="product" class="com.bean.ProductBean" scope="request"/>
<!DOCTYPE html>
<html>
<body>
書號:<jsp:getProperty name="product" property="product_id"/><br>
書名:<jsp:getProperty name="product" property="product_name"/><br>
價格:<jsp:getProperty name="product" property="price"/>
</body>
</html>
try (Connection conn = dataSource.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rst = pstmt.executeQuery()) {
// 查詢邏輯
} catch (SQLException e) {
throw new RuntimeException("資料庫查詢失敗", e); // 拋出運行時異常讓 Servlet 捕獲
}
<% System.out.println("product=" + request.getAttribute("product")); %> 確認屬性是否存在。<c:out> 替代 jsp:getProperty,更靈活且支援 EL 運算式。