Просто не используйте «HelperClass для печати данных». Это не имеет никакого смысла. Там у вас есть EL.
${bean.property}
Это все. Используйте сервлет для управления, препроцесса и постпроцессов. Используйте теглибы (например, JSTL) и EL для доступа и отображения данных на бэкэнд.
Вот простой пример стартового сервлета, который предварительно обрабатывает запрос до вывода на дисплей в JSP:
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
просто бина класс, который представляет реальную мировую сущность.
public class Person {
private Long id;
private String name;
private String email;
private Integer age;
// Add/generate getters and setters here.
}
Метод PersonDAO#list()
просто возвращает List
из Person
объектов из БД:
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
на url-pattern
из /persons
. JSP скрыт в /WEB-INF
, так что никто не может получить к нему доступ напрямую, не запрашивая сначала сервлет (иначе можно получить пустую таблицу).
Теперь, вот как persons.jsp
выглядеть, он использует JSTL (только падение jstl-1.2.jar в /WEB-INF/lib
) c:forEach
перебрать List
и использует EL для доступа к данным бэкэнда и свойства компонентов. Сервлет положил List<Person>
в качестве атрибута запроса с именем persons
, чтобы он был доступен ${persons}
в EL. Каждая итерация в c:forEach
возвращает экземпляр Person
, так что вы можете отображать их proeprties с помощью EL.
<%@ 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. Это все. Нет необходимости в «HelperClass для печати данных»;) Чтобы узнать больше о JSTL, отметьте Java EE tutorial part II chapter 7 и, чтобы узнать больше об EL, отметьте Java EE tutorial part II chapter 5. Чтобы узнать больше о материалах за PersonDAO, отметьте this article.
Спасибо за указатели. Я буду изучать JSTL и EL. Еще раз спасибо. – user275157
Добро пожаловать. Если вы когда-нибудь ставите, просто «Задайте вопрос» здесь :) – BalusC