Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка JSP страницы с возвратом в сервлет 
V
    Опции темы
bavar
Дата 18.6.2009, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 4.12.2005

Репутация: нет
Всего: нет



Всем доброго дня. У меня есть довольно занятная проблема, надеюсь вы поможете мне с ней разобраться ))
Есть следующая ситуация: 
1. сервлет контейнер (Tomcat 5.5) получает AJAX запрос от клиента
2. сервлет обрабатывает запрос и формирует необходимые данные
3. Далее необходимо обернуть собранные данные в HTML при помощи JSP
4. Полученный фрагмент HTML кода и вернуть клиенту в виде JSON.

Вся загвоздка состоит в пункте 3 (((
Каким образом запустить обработку jsp страницы так, чтобы в результате управление вернулось обратно в сервлет и я смог получить сгенерированный HTML в виде строки????

Я нашел следующий метод, но мне он кажется какимто "костыльным". Думается что есть более верный вариант.
Мой вариант: создать mock для объекта HttpServletResponse и сделать форвард на требуемую jsp страницу, а потом из mock'a получить HTML.
Вот как это выглядит в коде:

Код

org.springframework.mock.web.MockHttpServletResponse mockResponse = new MockHttpServletResponse();

request.getRequestDispatcher("/default.jsp").forward(request, mockResponse);

String htmlContent = mockResponse.getContentAsString();


PM MAIL   Вверх
garbuz
Дата 18.6.2009, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 677
Регистрация: 22.1.2008

Репутация: 8
Всего: 11



Цитата(bavar @  18.6.2009,  17:12 Найти цитируемый пост)
3. Далее необходимо обернуть собранные данные в HTML при помощи JSP
4. Полученный фрагмент HTML кода и вернуть клиенту в виде JSON.

Вот эти строки надо как-то доступнее описать, а то ничего не понятно.
PM MAIL   Вверх
tux
Дата 18.6.2009, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



bavar, обязательно нужен JSP? Шаблонные движки типа Velocity или Freemarker не подойдут? Я не говорю, что JSP невозможно, но шаблонным движком все было бы проще.
PM MAIL Skype GTalk Jabber YIM   Вверх
bavar
Дата 19.6.2009, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 4.12.2005

Репутация: нет
Всего: нет



garbuz, попробую описать более детально.
Изначально цель стоит такая: в web приложении где используется много AJAX, необходимо по запросу пользователя модифицировать несколько блоков сайта, т.е. к примеру пользователь добавил новую запись и необходимо полностью перестроить облако меток/тегов (это грубый пример, но для понимания сути вполне подойдет )) ). 
Поэтому хочется на сервере получить из базы эти метки/теги и обернуть их в HTML: <ul><li>tag1</li> <li>tag2</li></ul> (Простой пример). 
Для генерации HTML используется JSP. 
Затем, неизвестным мне способом, получить в сервлете это HTML как строку, прибавить к нему еще несколько кусков HTML'я для других частей сайта и еще какиенить данные, обернуть все это дело в JSON и оптравить все это клиенту - и пусть дальше Javascript разбирается со всем этим ))
Надеюсь теперь более понятно объяснил.


tux, к сожалению уже очень много кода написано на JSP и отказать от него не имею возможности, но обяхательно почитаю про эти фреймворки.
PM MAIL   Вверх
MisterCleric
Дата 19.6.2009, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



С вашего позволения я тоже вмешаюсь в вашу дискуссию.

Я в своем проекте использую MVC-framework WebWork.
а также для рисования всяких отчетных табличек с сортировкой и пейджинированием использую DisplayTag.
Так вот была такая задача, что заказчик заказал еще кроме сортировки и пейджинга прикрутить к таким табличкам фильтрацию в виде отдельной строки в самой таблице.

Собственно вставку строки я делаю таким способом:
Код

  private String injectSearchRow(String row) {
        StringBuilder sb = new StringBuilder();
        Writer searchFormIncludeWriter = new StringWriter();
        try {
            Include.include(jspUrl, searchFormIncludeWriter, ServletActionContext.getRequest(), ServletActionContext.getResponse());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return sb.append(searchFormIncludeWriter)
                .append(row != null ? row : "")
                .toString();
    }


В определенном классе-декораторе, который я указал DisplayTag в конкретной таблице. 
Так вот как раз этим кодом я вызываю конкретную jsp и пишу ее в ... Ну эт по коду должно быть видно.
А механизм в общем-то такой:
1. Страница с таблицей и ее строкой фильтрации рисуется после вызова конкретного Action 
2. Этот Action ложит в сессию объект, который представляет фильтр.
3. Страница со строкой фильтрации выбирает из сессионнго объекта-фильтра значения фильтров.
4. Я ее получаю в виде строки и передаю дальше по цепочке тому, кто рисует саму таблицу.

Вся загвоздка в том (как для тебя), как работает вот этот самый Include.include

Ну собственно вот посмотри его исходники
http://kickjava.com/src/com/opensymphony/w...nclude.java.htm
А вось да что-то для себя найдешь...



--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
bavar
Дата 19.6.2009, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 4.12.2005

Репутация: нет
Всего: нет



MisterCleric,  спасибо за ответ.
Посмотрел я исходники этого метода Include.include.... Вообщем идея таже самая что и привел я.
Видимо других решений нету.

Может у кого нить есть другие предложения?

PM MAIL   Вверх
tux
Дата 19.6.2009, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Есть два варианта попроще (как мне кажется). 
  • Использовать URLConnection и просто обращаться к JSP через URL, таким образом получая в поток что сгенерилось.
  • Использовать RequestDispatcher. Тогда можно просто форварднуть на нужную JSP и получить опять-таки сгенеренный HTML в поток.

PM MAIL Skype GTalk Jabber YIM   Вверх
MisterCleric
Дата 19.6.2009, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Цитата

Использовать RequestDispatcher. Тогда можно просто форварднуть на нужную JSP и получить опять-таки сгенеренный HTML в поток.

по-моему я такое решение как раз и привел. Достаточно всего лишь взять кусок кода из фреймворка и юзать...

В моем случае еще такая ситуация, что шарится между основной страницей и той, которую я вставляю, OJNLValueStack и с помощью какстом-тэгов я могу брать от туда свойства, которые положил Action


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
tux
Дата 19.6.2009, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Цитата(MisterCleric @  19.6.2009,  12:31 Найти цитируемый пост)
по-моему я такое решение как раз и привел.

А, ну наверное. Я не смотрел в код WebWork. ;)
PM MAIL Skype GTalk Jabber YIM   Вверх
bavar
Дата 23.6.2009, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 4.12.2005

Репутация: нет
Всего: нет



Всем спасибо за участие. Остановлюсь на том решении которое приводил в самом начале.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0513 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.