我只是一个练习 Hibernate 与 JSP 和 Servlet 集成的新手。当我尝试从数据库获取数据时出现问题。
像往常一样,我有包含所有 getter 和 setter 的实体类。数据从另一个 JSP 页面输入,通过另一个 servlet 发布并成功存储到数据库中。但是,当通过另一个 servlet 检索另一个 JSP 页面时,我没有得到任何输出。数据将显示在引导程序的通用“卡”块中。这是 JSP 代码,标题和内容现在留空。问题的一部分还在于如何从实体类中获取 getter [getTitle() 和 getContent()] 以从对象中提取数据,我仍在学习,所以我有很多困惑。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>All Notes</title>
<%@include file="all_js_css.jsp" %>
</head>
<body>
<div class="container-fluid">
<%@include file="navbar.jsp" %>
<br>
<h1 class="text-uppercase">All Notes:</h1>
<br>
<c:forEach items="${notes}" var="note">
<div class="card" style="width: 18rem;">
<div class="card-body">
<h5 class="card-title">
<c:out value="${note.??}" />
</h5>
<p class="card-text">
<c:out value="${note.??}" />
</p>
<a href="#" class="btn btn-primary">Go</a>
</div>
</div>
</c:forEach>
</div>
</body>
</html>
我已经尝试过
note.title, note.gettitle, note.getTitle()
。什么都没起作用。它只是在文本应该所在的位置显示空白。 servlet代码是这样的:
package com.servlets;
import java.io.IOException;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.query.Query;
import com.entities.note;
import com.helper.factoryProvider;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@WebServlet(urlPatterns = "/ShowNoteServlet")
public class ShowNoteServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("hello");
try {
Session session = factoryProvider.getFactory().openSession();
Query query = session.createQuery("from notes");
List<note> list = query.list();
System.out.println(list);
req.setAttribute("notes", list);
req.getRequestDispatcher("all_notes.jsp").forward(req, resp);
session.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
我放置了这两个荒谬的
println()
来检查servlet代码是否正在运行,是的,即使tomcat正在运行最新构建的war文件,我也不会在控制台中得到任何输出。
现在卡片看起来像这个。根据表中的多个条目行,应该有多张卡片。作为参考,这是我的实体代码和我的目录结构:
package com.entities;
import java.util.Date;
import java.util.Random;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
@Entity
@Table(name = "notes")
public class note {
@Id
private int id;
private String title;
private String content;
private Date addedDate;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Date getAddedDate() {
return addedDate;
}
public void setAddedDate(Date addedDate) {
this.addedDate = addedDate;
}
public note(String title, String content, Date addedDate) {
super();
this.id = new Random().nextInt(100000);
this.title = title;
this.content = content;
this.addedDate = addedDate;
}
public note() {
super();
}
}
如果您能指出我做错的地方以及如何解决它,我会非常高兴。我看到人们将整个查询内容编写为 scriptlet,但它看起来不整洁且不模块化。这是唯一的方法吗?或者还有其他更好、更干净的方法来做到这一点吗?
您在 Servlet 文件中传递给 JSP 的属性名称是“notes”,但是在 JSP 中调用时您将其写为“note”...