背景
我编写了一个以前的servlet,它创建了动态网页,可以读取和写入MySQL数据库。当我从中读取时,我将结果存储在ResultSet中,然后显示此信息。一切正常,我被告知我应该使用JSP和JSTL重新编写它。为此,在我的servlet中,我创建了一个ResultSet并将每个列的结果存储在一个单独的ArrayList中。在我的JSP中,我试图遍历ArrayLists,但是,网页是空白的。由于我使用的是NetBeans,它通常会指示任何错误,但似乎没有错误,所以我猜测存在逻辑错误或运行时错误(这并没有完全缩小它)。我已经尝试过简单地打印ArrayList的大小,但即使这样也没有显示!我的猜测是从未填充ArrayList或者没有正确地将其发送到JSP。
要注意,我的数据库已填充,我可以写入。我已经浏览了各种网站,看看是否有任何帮助,但到目前为止还没有任何帮助。我也经历了我的讲义,我的语法似乎是正确的。
作为赋值的一部分,我们需要在processRequest(request,response)中编写所有servlet代码。 doPost和doGet都调用此方法。
我的Servlet:
protected void processRequest(HttpServletRequest request, HttpServletResponse response) {
response.setContentType("text/html;charset=UTF-8");
ResultSet res = null;
ArrayList<String> bookIDs, bookTitles, bookAuthors;
DBUtil util = new DBUtil();
try {
res = BookDB.showBooks();
bookIDs = new ArrayList<String>();
bookTitles = new ArrayList<String>();
bookAuthors = new ArrayList<String>();
while(res.next()) {
bookIDs.add(res.getString("bookID"));
bookTitles.add(res.getString("title"));
bookAuthors.add(res.getString("author"));
}
request.setAttribute("IDHolder", bookIDs);
request.setAttribute("titlesHolder", bookTitles);
request.setAttribute("authorHolder", bookAuthors);
RequestDispatcher booksDispatcher = request.getRequestDispatcher("jspShowAll.jsp");
booksDispatcher.forward(request, response);
} catch (SQLException sqle) {
Logger.getLogger(ShowAllBooks.class.getName()).log(Level.SEVERE, null, sqle);
} catch (IOException iox) {
Logger.getLogger(ShowAllBooks.class.getName()).log(Level.SEVERE, null, iox);
} catch (ServletException ex) {
Logger.getLogger(ShowAllBooks.class.getName()).log(Level.SEVERE, null, ex);
}
}
创建ResultSet(在单独的包中):
public static ResultSet showBooks() throws SQLException {
ConnControl myConnPool=new ConnControl();
Statement s=null;
ResultSet res=null;
Connection myConn=myConnPool.connect();
String queryStm= "SELECT * FROM books;";
s=myConn.createStatement();
res = s.executeQuery(queryStm);
return res;
}
此方法是从我之前的网络应用程序中复制并粘贴的,该方法非常有效。表和数据库是相同的。
我的JSP:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
</head>
<body>
<c:forEach var="ids" items="${IDHolder}">
<p>${ids}</p>
</c:forEach>
<c:forEach var="titles" items="${titlesHolder}">
<p>${titles}</p>
</c:forEach>
<c:forEach var="authors" items="${authorHolder}">
<p>${authors}</p>
</c:forEach>
</body>
</html>
我的Java Bean:
public class Book {
private int id;
private String title;
private String author;
public Book() {
}
public Book(int id, String title, String author) {
this.id = id;
this.title = title;
this.author = author;
}
public int getId() {
return id;
}
public String getTitle() {
return title;
}
public String getAuthor() {
return author;
}
public void setId(int id) {
this.id = id;
}
public void setTitle(String title) {
this.title = title;
}
public void setAuthor(String author) {
this.author = author;
}
}
答案 0 :(得分:0)
在查看日志并为抛出的每个异常调用printStackTrace()之后,我发现我忽略了最简单的事情。我忘了包含JSTL库!现在我做了,我再次运行我的JSP并正确显示。