Класс помощника JSP для печати содержимого

У меня вопрос о повторном использовании кода в JSP. У меня есть страница JSP example.jsp которая вызывает вызов в базу данных и получает результаты. У меня есть class Java HelperClass.java который принимает запись и печатает разные поля

 response.getWriter().println 

Теперь на моей странице JSP есть HTML, и проблема заключается в том, что содержимое, распечатанное HelperClass, появляется перед содержимым на странице JSP. Например

  This is the first line 
HelperClass.printdata("second line");

выход

  secondline Это первая строка

Это известная проблема. Каков наилучший способ создания HelperClass для страницы JSP, которая выводит содержимое на страницу. Любые указатели будут очень благодарны.

Просто не используйте «HelperClass для печати данных». Это не имеет никакого смысла. Там у вас есть EL.

 ${bean.property} 

Это все. Используйте сервлет для управления, препроцесса и постпроцессов. Используйте taglib (например, JSTL) и EL для доступа к данным и их отображения.

Ниже приведен пример базового запуска Servlet, который предварительно обрабатывает запрос перед отображением в JSP:

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { List 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 – это только джавабский class, который представляет собой реальный мир.

 public class Person { private Long id; private String name; private String email; private Integer age; // Add/generate getters and setters here. } 

Метод PersonDAO#list() возвращает объекты List of Person из базы данных:

 public List list() throws SQLException { Connection connection = null; Statement statement = null; ResultSet resultSet = null; List persons = new ArrayList(); 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 так что никто не может получить к нему доступ напрямую, не запрашивая сначала сервлет (иначе можно получить пустую таблицу).

Теперь, как выглядит person.jsp , он использует JSTL (просто перетащите jstl-1.2.jar в /WEB-INF/lib ) c:forEach для итерации по List и использует EL для доступа к данным бэкэнд и свойствам компонента. Сервлет поместил атрибут List as request с именами persons чтобы он был доступен в ${persons} в EL. Каждая итерация в c:forEach возвращает экземпляр Person , так что вы можете отображать их proeprties с EL.

 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> ...  
${person.name} ${person.email} ${person.age}

Позвоните по адресу http://example.com/contextname/persons . Это все. Нет необходимости в «HelperClass для печати данных»;) Чтобы узнать больше о JSTL, ознакомьтесь с главой 7 главы 7 учебного курса по Java EE и чтобы узнать больше об EL, ознакомьтесь с главой 5 главы 5 Java EE . Чтобы узнать больше о материалах за PersonDAO, проверьте эту статью .

Interesting Posts
Давайте будем гением компьютера.