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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Установка Context'а перед вызовом jsp, как задать правильный контекст? 
:(
    Опции темы
Maksym
  Дата 28.8.2005, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


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

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



Есть Web Pages\dynamic_content\registration.jsp
Из нее по submit'у формы вызывается сервлет userRegistration с передачей всех необходимых параметров.
Из сервлета снова вызываем registration.jsp с помощью кода:
Код

RequestDispatcher dispatcher = servletContext.getRequestDispatcher("\dynamic_content\registration.jsp");
dispatcher.forward(request, response);

Полученная страница загружается с неправильным контекстом (естественно smile ведь конеткст взят из сервлета) и само собой картинки и css, лежашие в той же папке что и jsp и прописанные относительно, - не подгружаются.
Как же перед вызвом страницы из сервлета задать правильный контекст для этой страницы? smile
smile сам не нашел smile

Это сообщение отредактировал(а) Maksym - 28.8.2005, 15:28
PM MAIL   Вверх
Stampede
Дата 29.8.2005, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

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



Дело не в контексте, дело том, как браузер разрешает относительные ссылки. В твоем случае можно предложить два простых решения: прописывать ссылки на все внутренние ресурсы (стили, картинки и т. д.) как абсолютные, от корня. Это, кстати, очень неплохое решение, которое впоследствии может избавить тебя от разных непредвиденных граблей.

Второе - использовать Response.sendRedirect() вместе RequstDispatcher.forward(). Разница между ними в том, что в случае форварда перенаправление происходит внутри контейнера. При этом браузер так и думает, что данные поступают с адреса твоего сервлета, скажем, /servlet/RegistrationFormHandlingServlet. Это не всегда желательное поведение. Часто хочется, чтобы если содержимое страницы идет из JSP, то чтоб и браузер знал об этом. Такой эффкт достигается использованием метода Response.sendRedirect(). Физически при этом происходит следующее: браузеру возвращается HTTP код ответа 302 (ресурс перемещен), а в поле Location указывается адрес для перенаправления (в твоем случае /dynamic_content/registration.jsp). Получив такой ответ, браузер повторным запросом идет уже по вновь указанному адресу. Параметры запроса при этом не сохраняются, поэтому их в этом случае надо хранить на стороне сервера, например, в сессии.

Вот так вот в общих чертах.



--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
Maksym
Дата 31.8.2005, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


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

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



Stampede
smile
Прописывать абсолютные ссылки мне рано, части проекта могут еще премещаться друг относительно друга и относительно корня в процессе работы.
Response.sendRedirect() заработало сразу. Кажется, это удачное решение.
Большое спасибо smile
PM MAIL   Вверх
Maksym
Дата 5.3.2006, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


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

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



Поднимаю тему. Описаный Stampede метод /sendRedirect()/ прекрасно работал, до тех пор пока к системе не обратились из IE 5.0 - парадоксальным образом на сервере умирает сессия после перехода по sendRedirect(), т.е. ни один из вложеных в неё до перехода параметров не обнаруживается (при использовании forward() этой проблемы нет, но forward() не подходит по описанным выше причинам).
Сталкивался ли кто с этой проблемой? smile
Добавлено @ 13:16
ЗЫ. Перечитал тему. Как мудр был Stampede:
Цитата
В твоем случае можно предложить два простых решения: прописывать ссылки на все внутренние ресурсы (стили, картинки и т. д.) как абсолютные, от корня. Это, кстати, очень неплохое решение, которое впоследствии может избавить тебя от разных непредвиденных граблей.

Респект!
Но мне уже поздно - все везде сделано в относительных ссылках... smile
PM MAIL   Вверх
AngerOgAnAngel
Дата 5.3.2006, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



<base href="<%=basePath%>">
вообще контекстом можно управлять с помощью этого тега. basePath - полный путь, можно получить его например так:
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
он у тебя на страничках случайно ни где не проставлен? Если да, то у тебя будут проблемы с Context. О проблеме с сессиями в sendRedirect я не слышал.
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.0477 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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