只是不要使用「HelperClass打印數據」。這沒有意義。你有EL。
${bean.property}
就這樣。使用servlet來控制,預處理和後處理請求。使用taglibs(例如JSTL)和EL來訪問和顯示後端數據。
下面是其中預處理在JSP顯示之前的請求一個Servlet的基本開球例如:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Person> persons = personDAO.list(); // Get list of persons from DB.
request.setAttribute("persons", persons); // So it's available as `${persons}` in EL.
request.getRequestDispatcher("/WEB-INF/persons.jsp").forward(request, response); // Forward to JSP for display.
}
這裏,Person
僅僅是一個JavaBean類代表現實世界實體。
public class Person {
private Long id;
private String name;
private String email;
private Integer age;
// Add/generate getters and setters here.
}
的PersonDAO#list()
方法只是從數據庫返回Person
的List
對象:
public List<Person> list() throws SQLException {
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
List<Person> persons = new ArrayList<Person>();
try {
connection = database.getConnection();
statement = connection.createStatement("SELECT id, name, email, age FROM person");
resultSet = statement.executeQuery();
while (resultSet.next()) {
Person person = new Person();
person.setId(resultSet.getLong("id"));
person.setName(resultSet.getString("name"));
person.setEmail(resultSet.getString("email"));
person.setAge(resultSet.getInteger("age"));
persons.add(person);
}
} finally {
if (resultSet != null) try { resultSet.close(); } catch (SQLException logOrIgnore) {}
if (statement != null) try { statement.close(); } catch (SQLException logOrIgnore) {}
if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {}
}
return persons;
}
地圖在web.xml
在servlet上的/persons
的url-pattern
。 JSP隱藏在/WEB-INF
中,這樣沒有人可以直接訪問它,而無需首先請求該servlet(否則會得到一個空表)。
現在,這裏是如何persons.jsp
的樣子,它使用JSTL(剛落,在/WEB-INF/lib
jstl-1.2.jar)c:forEach
遍歷一個List
,它使用EL訪問後端數據和bean屬性。該servlet已將List<Person>
作爲請求屬性與名稱persons
放在一起,以便EL中的${persons}
可用。 c:forEach
中的每次迭代都會返回一個Person
實例,以便您可以使用EL顯示它們的proeprties。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
...
<table>
<c:forEach items="${persons}" var="person">
<tr>
<td>${person.name}</td>
<td>${person.email}</td>
<td>${person.age}</td>
</tr>
</c:forEach>
</table>
打電話給http://example.com/contextname/persons。就這樣。無需「幫助類打印數據」;)要了解有關JSTL的更多信息,請查詢Java EE tutorial part II chapter 7並瞭解有關EL的更多信息,請檢查Java EE tutorial part II chapter 5。要詳細瞭解PersonDAO背後的內容,請檢查this article。
感謝您的指點。我會研究JSTL和EL。 再次感謝。 – user275157 2010-02-17 14:15:30
不客氣。如果你有問題,只需在這裏提問:) – BalusC 2010-02-17 14:21:31