@fresheed

Как передавать объекты с сервера в JSP?

Предположим, сервлет берёт данные из БД через JDBC (пока что не трогаю ORM). Эти данные передаются объектам, которые их как-то обрабатывают. Потом необходимо как-то отобразить результаты на JSP-странице. Насколько я знаю, единственный способ сделать это - request.setAttribute(name, object) и потом на странице использовать их через EL-выражения.
Например, есть класс User, с полями id и nickname. Нужно выдать информацию о 5 пользователях.
а) Прикреплять именно внутренние объекты, которые выполняют логику?
б) Создать специальные классы (типа UserData), которые будут предназначены для передачи в JSP, и прикреплять их?
в) Просто отправить 2 List'a, в одном - все id, а в другом - все имена?
г) Отправить Map(Integer, String)? Встречал утверждение, что в JSP отправлять нужно только List'ы.
  • Вопрос задан
  • 5139 просмотров
Решения вопроса 1
@vQFd4
Если требуется, чтобы жизненным циклом объектов управлял контейнер надо использовать директиву
<jsp:useBean id="bean's name" scope="bean's scope" typeSpec/>

детали тут
Однако, никто не мешает в скриплете внутри jsp страницы создать нужные объекты и вывести значения их атрибутов/методов в поток вывода сервлета(jsp страницы), хотя в общем случае так делать не желательно.

В данном случае я бы рекомендовал создать отдельный класс для доступа к Вашим объектам, скажем UserDAO, который бы получал данные из БД и создавал экземпляры Вашего класса User. В самом тривиальном случае UserDAO будет содержать единственный методо, скажем, list, который возвращает список всех объектов для которых есть соответствующие записи в БД, что-то типа
/**
     * 
     * @return Список объектов User данные для которых имеются в БД
     */
    public List<User> list()
    {
        List<User> result = new ArrayList<User>();

        try  // <-- вообще так делать не очень хорошо, но тут я просто избавил себя от лишней писанины
        {
            /*
             * Структуру Вашей БД я не знаю, поэтому 
             * тупо выбираю значения колонок id и nickname
             * из таблицы tbl_user.
             * Если у Вас все организовано иначе, вставте свой SQL запрос.
             */
            PreparedStatement statement = connection.prepareStatement(
                    "select id, nickname from tbl_user");

            ResultSet r_set = statement.executeQuery();

            /*
             * Бежим по результирующей выборке и инициализируем объекты типа User,
             * попутно добавляя их в список.
             */
            while (r_set.next())
            {
                // предполагается, что у User имеется соответствующий конструктор
                User p = new User(r_set.getString("id"), r_set.getString("nickname"));
                result.add(p);
            }

        } catch (Exception e)
        {
            e.printStackTrace();
        }

        return result;
    }

И дальше использовать UserDAO как бин (смотри директиву jsp:useBean) на нужных страницах, а в скриплете в нужном месте страницы вызвать у бина объявленный выше метод list и на основе его значения, например, в цикле построить табличку или еще что-нибудь полезное сделать.

Хороший пример, как вообще делать приложения на jsp + serlet можно посмотреть здесь
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы