创建它代表了表的每一个项目(行)一个JavaBean类。创建一个使用JDBC返回这些项目列表的DAO类。然后在servlet中,只需使用HttpServletRequest#setAttribute()
将请求范围中的项目列表,使用RequestDispatcher#forward()
将请求转发到JSP文件,并使用JSTL(仅在/WEB-INF/lib
中删除jstl-1.2.jar)c:forEach
标记迭代项目列表。
基本开球例如:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Item> items = itemDAO.list();
request.setAttribute("items", items); // It's now available as ${items} in EL.
request.getRequestDispatcher("/WEB-INF/result.jsp").forward(request, response);
}
其中result.jsp
这个样子的:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
...
<table>
<c:forEach items="${items}" var="item">
<tr>
<td>${item.someProperty}</td>
<td>${item.anotherProperty}</td>
</tr>
</c:forEach>
</table>
更多的提示和例子你可能会发现this article一个很好的起点。
这是一件好事,你问这个。将表示逻辑放在Servlet类中是不好的做法。需要消除Servlet类中的任何out.println()
语句。它属于一个JSP文件。要进一步进行一些操作,您还可以使用MVC框架,以便基本上最终只有一个Javabean类和一个JSP文件(即,该servlet的角色已被MVC框架接管)。
嗨,我已经能够根据你的建议从我的servlets中删除所有out.println。但是,我无法在HTML页面中打印数据库的内容。 我创建了一个Javabean类。这个类有3个属性(标题,作者,专辑)。我能够将数据库表的每一行存储在一个List元素中(我已经使用过:items.get(i).getTitle(),items.get(i).getAuthor()和items.get i).getAlbum()为每一行)。到目前为止,一切看起来都不错。然后我将这个列表放在请求中,并将请求转发给一个jsp文件。 – dedalo 2010-03-04 01:01:25
在jsp文件中一切正常。问题是不打印请求中发送的信息。它打印表格的标题(
你正在使用哪个Tomcat版本? web.xml中声明了哪个Servlet版本?生成的页面源代码如何? (在浏览器中右键单击页面并选择“查看源代码”)。您不应该看到任何Java/JSP标记,但只能看到纯HTML。也可以尝试在JSP中放入'$ {items}'“plain vanilla”,以查看它是否在真正的Java代码中输出与items.toString()相同的值。顺便说一句,与Java中的所有内容一样,taglib也是区分大小写的,它应该是''。 –
BalusC
2010-03-04 01:13:15