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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JSP, сервлеты и шаблонизация, по аналогии с Struts, обойтись без фреймворка 
:(
    Опции темы
ochnev
Дата 3.6.2007, 06:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Хочу сделать то же, что можно сделать в Struts:
Обрабатываю запрос в сервлете (как обрабатывал бы в action'е), кладу в request атрибуты (данные из базы) и вывожу данные с использованием JSP и JSTL.
В Struts всё понятно, куда что прописывается, чтобы всё заработало.
Но как в Struts устроен изнутри тот момент, в котором подключается JSP, - не понятно.

Хочется обойтись без фреймворка, сделать всё на сервлетах и JSP, но не знаю, как сделать связь между сервлетом и JSP аналогичным образом, как сделано в Struts.
Просто сделать редирект из сервлета на JSP-страницу не покатит - так нельзя передать атрибуты request'а.

Подскажите, кто знает, покакому принципу устроена описанная фича в Struts?

PM MAIL   Вверх
ekr
Дата 3.6.2007, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


...и это пройдет...
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 6.5.2007
Где: Moscow, RU

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



Цитата(ochnev @  3.6.2007,  06:55 Найти цитируемый пост)
Просто сделать редирект из сервлета на JSP-страницу не покатит - так нельзя передать атрибуты request'а.

ты прав, надо класть в сессию в этом случае.

альтернативой редиректу служат forwarding и including. в этом случае ты из сервлета "просишь" контейнер запустить другой сервлет или jsp. это происходит полностью на ерверной стороне и клиент об этом никак не узнает.
это делается с помощью объекта RequestDispatcher и в этом слуае вызываемому сервлету передается request и можно в нем передать атрибуты.

Код

RequestDispatcher rd = getServletContext().getRequestDispatcher("/toJSP.jsp");
rd.forward();


это то, что тебе надо? если да, то более подробно про получение диспетчера (есть еще метод getNameDispatcher) и использование (есть forward и include ) можешь спросить здесь же или в API docs.

PS у меня есть курс по struts, может, он тебе поможет, в блоге.


Это сообщение отредактировал(а) ekr - 3.6.2007, 09:41


--------------------
и это пройдет....

http://ekrs.blogspot.com
PM WWW   Вверх
ochnev
Дата 3.6.2007, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Цитата(ochnev @  3.6.2007,  06:55 Найти цитируемый пост)
Просто сделать редирект из сервлета на JSP-страницу не покатит - так нельзя передать атрибуты request'а.

ты прав, надо класть в сессию в этом случае.


В сессию не годится, ведь тогда пользователь не сможет правильно просматривать одновременно несколько страниц сайта в разных окнах, как это иногда делается.

Цитата

альтернативой редиректу служат forwarding и including. в этом случае ты из сервлета "просишь" контейнер запустить другой сервлет или jsp. это происходит полностью на ерверной стороне и клиент об этом никак не узнает.
это делается с помощью объекта RequestDispatcher и в этом слуае вызываемому сервлету передается request и можно в нем передать атрибуты.


Об этом я думал.
Просто не знаю, действительно ли для web-юзера все эти форварды будут невидимыми, будет ли адрес в строке оставаться прежний, будет ли код HTTP-ответа 200, а не 301, и будут ли сохраняться атрибуты request'а.

PM MAIL   Вверх
kkorsakoff
Дата 3.6.2007, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Через диспетчер - невидимые. То есть ответ будет 200
Если через response.sendRedirect(), то будет не помню какой точно, но какой-то из 3xx
PM MAIL WWW ICQ   Вверх
ekr
Дата 4.6.2007, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


...и это пройдет...
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 6.5.2007
Где: Moscow, RU

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



Цитата(ochnev @  3.6.2007,  14:46 Найти цитируемый пост)
В сессию не годится, ведь тогда пользователь не сможет правильно просматривать одновременно несколько страниц сайта в разных окнах, как это иногда делается.

годится ) 
одно окно - одна сессия (если, конечно, не постараться сделать обратное).
сессионный идентификатор передается или с помощью url-rewriting (как параметр запроса), или в cookie.

посмотри в доках метод response.encodeUrl()


Цитата(kkorsakoff @  3.6.2007,  17:38 Найти цитируемый пост)
Через диспетчер - невидимые.

абсолютно верно. 


--------------------
и это пройдет....

http://ekrs.blogspot.com
PM WWW   Вверх
Maksym
Дата 4.6.2007, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

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



Цитата(ochnev @  3.6.2007,  06:55 Найти цитируемый пост)
не знаю, как сделать связь между сервлетом и JSP аналогичным образом, как сделано в Struts.
 То есть написать свой фреймворк.
Цитата(ochnev @  3.6.2007,  06:55 Найти цитируемый пост)
Хочется обойтись без фреймворка, сделать всё на сервлетах и JSP
 Неопонятно зачем smile , но если очень хочется, то имеет смысл посидеть пару дней над исходниками struts или sun-овской реализации jsf, понять как это работает. Там есть ответы на все твои вопросы + ответы на вопросы, которые ты еще не задал, но обязательно задаш.


PM MAIL   Вверх
ochnev
Дата 4.6.2007, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

одно окно - одна сессия (если, конечно, не постараться сделать обратное).


А где в доках можно это прочитать? Хочу развеять большие сомнения.

Цитата

сессионный идентификатор передается или с помощью url-rewriting (как параметр запроса), или в cookie.


Дописывать URL - не вариант. Я с поисковиками дружить хочу.

Цитата

Неопонятно зачем, 


Лень тратить время и изучать новую версию Struts, WebWork или Spring. На фоне того, что мне ещё кое-что из Java-технологий попутно вспоминать приходится после долгого перерыва, - закопаюсь.

Цитата

но если очень хочется, то имеет смысл посидеть пару дней над исходниками struts или sun-овской реализации jsf, понять как это работает.


В исходниках Struts покопался первым делом.
После этого осталось непонятным, как клиентом будут восприниматься редиректы (какой код ответа). Тут уже подсказали, и я ещё раз проверю.

PM MAIL   Вверх
Tony
Дата 4.6.2007, 17:40 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1159
Регистрация: 3.3.2006
Где: Riga

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



Kak ustroen frejmwork. Naprimer struts.
1)Mapping.Sostojashij iz binov i actinov
2)ActionServlet. Katorij lovit vse zaposri naprimer s preffiksom *.do.
Tak vot kogda startuet frejmwork sna4ala parsitsja xml. Sodajutsja spiski binov i actionov.Katorie svazani drug stdrugom.
Glavnaja fi4a frejmworka eto kogda ti zapolnil formu nazhal submit i kakimto volshebnim sposobom dannie peretekli v bean.Vopros kak. Navreno daragoj drug ti zamteil 4to vo mogih frejmworkah ispolzuetsja liba: jakarta bean utils. Eto liba evljaetsja obvjortkoj dlja java reflection. Tak vot tam est' krutoj metod: populate (HahMap, Object). Tak vot dannie polu4enie iz requesta mozhno polu4it' :
HahMap map = request.getParameterMap();
BeanUtiuls.populate(map,object_bean).
I etot metod nasitit tvoj bean 4rez setXXX. Vot abtractnij fejmwork. Esli ne ponjatno pishi.

Это сообщение отредактировал(а) Tony - 4.6.2007, 19:12


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
ekr
Дата 4.6.2007, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


...и это пройдет...
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 6.5.2007
Где: Moscow, RU

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



Цитата(ochnev @  4.6.2007,  17:05 Найти цитируемый пост)
А где в доках можно это прочитать? Хочу развеять большие сомнения.

достаточно просто проверить )

Цитата(ochnev @  4.6.2007,  17:05 Найти цитируемый пост)
Дописывать URL - не вариант. Я с поисковиками дружить хочу.

недооцениваешь современные поисковики ) не волнуйся, они нормально разберуться.
к тому же, метод response.encodeUrl() автоматически использеут cookies, если они поддерживаются, и начинает использовать url-rewriting только в обратном случае.


--------------------
и это пройдет....

http://ekrs.blogspot.com
PM WWW   Вверх
ochnev
Дата 5.6.2007, 03:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Сейчас проверил и убедился, что и форварды работают без перекидывания юзера по другому URL, и атрибуты request'а сохраняются.

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.0556 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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