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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Навигация между JSP, с передачей параметров 
:(
    Опции темы
Hidrag
Дата 14.12.2006, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Хочу сделать навигацию между JSP страницами с передачей параметров методом POST.
Главная страница JSP получает параметры от сервлета, то есть сервлет ее запускает и устанавливает для нее параметры
В полученной JSP я их получаю так:

Код

<% String param1 = (String)request.getAttribute("blabla"); %>


А как теперь мне из этой страницы стартануть другую нажатием на ссылке и передать ей этот же параметр POST методом?

В документации нашел метод:
Код

<%response.sendRedirect("other.jsp?param=value"); %>

Но по моему он не подойдет... передает методом гет, фиг знает как вместо этого value запихнуть значение переменной из директивы...

Это сообщение отредактировал(а) tux - 14.12.2006, 23:52


--------------------
user posted image
PM WWW ICQ   Вверх
Tony
Дата 15.12.2006, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Запехни в сессию. А потом возьми.С лёту не помню. Хотя то 4то ты делаеш - полный изврат(извини).


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


Летатель
***


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

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



Hidrag, Пользуйся кнопочкой "Код".

Вопрос больше в раздел разработки веб-систем. Можно сделать так. Сформировать на странице форму, у которой все атрибуты будут скрытыми (это свои параметры), а ссылка в форме будет показывать на нужную JSP-страницу. Что-то такое:
Код

<form action="page1.jsp" method="post">
    <input type="hidden" name="param1" value="1">
    <input type="hidden" name="param2" value="2">
</form>
<a href="javascript:document.forms[0].submit();">Link</a>


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


Опытный
**


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

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



tux, Спасибо! Кнопкой код пользуюсь обычно, просто поторопился. Завтра попробую!


--------------------
user posted image
PM WWW ICQ   Вверх
Hidrag
Дата 15.12.2006, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



К сожалению не то! Работает, но хоть и метод ПОСТ, но все равно можно поглядеть значение переменных если просмотреть исходник из браузера, а это лишает смысла smile 
Опишу ситуацию подробнее
:
В общем у меня есть несколько JSP страниц, полностью одинаковых (копии) отличающиеся только текстовым содержанием. В каждой странице я в самом начале получаю атрибуты:
Код

<% String login = (String)request.getAttribute("Login"); %>
<% String password = (String)request.getAttribute("Password"); %>
<% String status = (String)request.getAttribute("Status");%>

Потом в зависимости от этих параметров что то меняется на странице.

Вопрос в том, как мне из одной страницы стартануть другую и передать ей эти же атрибуты... Желательно передать методом ПОСТ чтобы эти переменные в адресной строке не светились....
сейчас сделал методом ГЕТ:
Код

<a href="Navigation?Login=<%=login%>&Pass=<%=password%>&Status=<%=status%>&Page=store.jsp">Статьи</a><br>


то есть вызываю сервлет Навигатион и ему передаю параметры а он уже стартует страницу которую указал:
Код

request.getRequestDispatcher(page).forward(request, response);

но по моему это как то коряво... вроде через сессию можно, но еще не разобрался как с ними работать 
что подскажете?


--------------------
user posted image
PM WWW ICQ   Вверх
Stampede
Дата 15.12.2006, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


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

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



Hidrag, ну ясен пень такие вещи нужно делать через сессию. Ну или через кукисы - смотря какая стоит задача. Кто ж логины с паролем гоняет по сети открытым текстом?

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

В зависимости от этого будем делать либо через сессию, либо через кукисы.
PM WWW   Вверх
Hidrag
Дата 15.12.2006, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот вот никакой безопасности... (
Я иду по пути меньшего сопротивления, что проще так и делаю соответственно изучая все новое, цель всей задумки: разобраться с JSP и создать интересный динамический ресурс, хостинг уже нашел - зарегал соответствующий. Думаю сначала сделать чтобы логинился каждый раз при входе, а потом добавть опцию в аккаунт, типа поставил галочку - будут кукисы, нет - не будет. Данные пользователя хранятся в БД то есть юзер ввел пароль и логин на странице, эти данные ушли методом ПОСТ сервлету, тот их передал классу ответственному за БД и получить от туда результат, если он положительные то вывел эту же страницу с параметром ( то есть чтобы юзер видел что он зареган и не было полей для ввода логина и паса).

Честно говоря думал это будут разбираться в теме "JSP  с чего начать" но что то она погасла smile


--------------------
user posted image
PM WWW ICQ   Вверх
Greg
Дата 15.12.2006, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 16.9.2006
Где: Беларусь, г.Минск

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



Тебя наверное очень волнует тот факт,что аутентификационные данные передаются в открытом виде.
Это самый главный недостаток HTTP и ему попдобных FTP,POP3,Telnet.
Не беспокойся,в этом случае единственное,что может как-то усложнить жизнь взломщику - это 
передача хэша пароля и то не сильно.Что касается сессии или кукисов,то тут кажется вопрос немного не правильно поставлен.Кукисы это реализация способа работы с пользователем,описанная в HTTP.Поэтому работать с пользователем нужно через них.Другое дело,что они могут быть долгоживущими,или сбрасываться по итсечении сессии/таймаута.
"Через сессию" - это наверное было бы изобретением велосипеда,хотя красиво жить не запретишь  smile 
--------------------
Страх перед возможностью ошибки не должен отвращать нас от поисков истины.
PM MAIL   Вверх
Stampede
Дата 15.12.2006, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


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

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



Цитата(Hidrag @  15.12.2006,  11:33 Найти цитируемый пост)
Честно говоря думал это будут разбираться в теме "JSP  с чего начать" но что то она погасла smile


Будет обязательно, если энтузиазм изучающего не утухнет.

По поводу аутентификации: мыслишь в принципе правильно, но есть один нюанс: а ты собираешься код доступа к БД на предмет проверки логина на каждой JSP странице прописывать? Наверное нет, правильно?

Сделать на самом деле можно по-разному, но поскольку ты планируешь сделать строго динамический вебсайт, то имеет смысл (пока что, для простоты) вынести эти действия в фильтр аутентификации. Как оформить фильтр - думаю, разберешься. Результатом его работы должно стать создание объекта User (или как он у тебя называется) и помещение его в сессию. Далее на любой странице к этому объекту можно доступиться в одну строчку.







PM WWW   Вверх
Hidrag
Дата 15.12.2006, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



За аутентификацию отвечает сервлет он один для всех, ему передал параметры он по базе "пробил" выдал ответ. 
То есть теоретически он должен запихнуть свой результат в сессию, а потом стартануть страницу, эта страница смотрит результаты в сессии если они гуд то выглядит так, если нет то по другому? Я правильно понимаю? Осталось только с сессией научиться работать... как ее создавать или она сама создается, как к ней обращаться(читать/писать) из JSP/Servlet... если подскажете буду признателен, а то чессно говоря утомляет читать документацию от SUN на инглише... хотя все что умею на Java все из нее...


--------------------
user posted image
PM WWW ICQ   Вверх
Greg
Дата 15.12.2006, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 16.9.2006
Где: Беларусь, г.Минск

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



Сессия создаётся контейнером,а получить её из сервлета можно так:
Код

HttpSession session =  request.getSession();

Теперь о том как она создаётся:
Контейнер проверяет клиента на наличие парметра jsessionid в кукисах или параметре запроса.
Если найдено,то проверяется значение и связывается с объектом HttpSession именно для этого значения.
Если не найден параметр или его значение ни о чём не говорит контейнеру,то создаётся новая сессия и клиенту посылается кукис с новым jsessionid или добавляется в запрос.
--------------------
Страх перед возможностью ошибки не должен отвращать нас от поисков истины.
PM MAIL   Вверх
Stampede
Дата 15.12.2006, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


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

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



Цитата(Hidrag @  15.12.2006,  13:17 Найти цитируемый пост)
За аутентификацию отвечает сервлет он один для всех, ему передал параметры он по базе "пробил" выдал ответ. 


А, то есть есть какой-никакой MVC? Это оч хорошо. Тогда все вообще тривиально. Как с сессией работать - ну, это мне самому надо в доку лезть. Но да ладно, "если ты такой ленивый...":

Код

// внутри doGet() и т. д.
HttpSession session = request.getSession(true);
User user = (User) session.getAttribute("user");


И фсе!

Запихивать объект User в сессию нужно по обработке POST запроса, приходящего по логину:

Код

// внутри doPost()
String login = request.getParameter("login");
String password = request.getParameter("password");
User user = yourUserLoginDAO.login(login, password);
HttpSession session = request.getSession(true);
if (user != null) {
    session.setAttribute("user", user);


Как доступиться к атрибуту сессии из JSP - надеюсь, сам разберешься.
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0537 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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