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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема с передачей параметров сервлету 
:(
    Опции темы
Hardworker
Дата 15.4.2006, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте. Я пишу первое своё приложение для работы пользователя с БД через интернет и язык Java начал использовать тоже недавно.

У меня возникли некоторые проблемы.
Приложение которое я хочу разработать соcтоит из html страниц и сервлета.

Работа с приложением начинается с процедуры ввода логина и пароля к БД. Появляется html страница которая имеет поля для ввода логина и пароля . Пользователь вводит их и жмет на кнопку . Эти параметры передаются сервлету(первый сервлет)методом POST он получив их создает соединение с БД (создает Connection), или выводит ошибку. Если все прошло нормально то происходит
Код

response.sendRedirect("http://127.0.0.1:8080/html/index.html");

То есть я переадресую вызов html странички которая обеспечивает пользователя возможностью сформировать запрос к БД и опять же методом POST я посылаю введенные параметры в другой сервлет, который и обеспечит выполнение этого запроса и выдаст результат.

Тут у меня возникают проблемы.
Я не могу передать второму сервлету объект Connection созданный в первом сервлете (или мне нужно проверить произошло ли подключение к БД первым сервлетом затем закрыть его и отослать параметры пароля и логина второму сервлету, а он потом и произведет подключение заново, но это как-то некрасиво по моему).
Или процедуру логина и бизнес логику мне нужно объединить в один сервлет, но тогда как быть с методом doPost в сервлете он получается вызывается несколько раз, а в нем будет происходить каждый раз еще и подключение к БД.

Другая проблема с этим методом.
На index.html будут ссылки на несколько html страниц на которых пользователь сможет организовывать разные типы запросов , и на каждой из этих страниц будут кнопки для посылки параметров в сервлет методом POST как мне разделить эти методы,ведь Я не могу написать несколько методов doPost в одном сервлете. Или как-то можно. Наверное мне надо писать на каждую кнопку по отсылке параметров свой сервлет для работы с этими параметрами, но тогда как все эти сервлеты подключить к одной БД?
Помогите разобраться
PM MAIL   Вверх
batigoal
Дата 15.4.2006, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


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

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



Цитата(Hardworker @ 15.4.2006, 22:55 Найти цитируемый пост)
Я не могу передать второму сервлету объект Connection созданный в первом сервлете

Почему? Сохраняй connection как атрибут сессии/приложения.

Цитата(Hardworker @ 15.4.2006, 22:55 Найти цитируемый пост)
как мне разделить эти методы,

Как вариант - можно ввестий скрытое поле (hidden), и в него записывать тип запроса.

Цитата(Hardworker @ 15.4.2006, 22:55 Найти цитируемый пост)
но тогда как все эти сервлеты подключить к одной БД?

А в чем у тебя трудность? Почему ты не можешь их подключить к одной и той же базе?


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Bulat
Дата 16.4.2006, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

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



1.Объяви глобальную переменную: private Connection con;
И передавай ее как параметр другим классам. В чем проблема?

2.можешь в сервлет передавать вместе с ссылкой еще и id, с определенным значением. Получив его в сервлете, ты можешь сравнить что у тебя пришло и вызвать нужный метод для работы

Код

...action="http://.../MyServlet?id=EntLog"


в сервлете используешь request.getParameter("id") 


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Hardworker
Дата 16.4.2006, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте LAmer George.
Я пытаюсь сохранить объект Connection как атрибут сессии, но почему-то у меня не получается вызватть его из второго сервлета. Хочу привести код, как Я это делаю.
Код

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String userName=request.getParameter("userName");
 String passwd=request.getParameter("password");
 String connect=""; //что бы сохранить как атрибут сессии мне нужно имя , Я его так обьявил
HttpSession session=request.getSession(true);

try {
            Class.forName("com.informix.jdbc.IfxDriver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }

try {


            Connection con = DriverManager.getConnection("jdbc:informix-sqli://127.0.0.1:1526/statistic:informixserver=test_perl5",userName,passwd);
          session.setAttribute("connect",con);

}          catch (SQLException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        
           out.println("Error while working with database:"+e);
        }



response.sendRedirect("http://127.0.0.1:8080/devserv/index.html");//перехожу на html странички позволяющие сформировать запросы
}



После этого пользователь заполняя поля формирует запрос и методом post отправляет их к другому сервлету который его выполняет и отсылает результат
Вот как Я пытаюсь получить обьект Connection  во втором сервлете.
Код

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  HttpSession session=request.getSession();

Connection connect1; 
connect1 = (Connection) session.getAttribute("connect");//эта строчка не срабатывает.
}


Помогите разобраться. как правильно сохранять и вызывать обьекты из дной сессии разными сервлетами???

Цитата

Как вариант можно ввести скрытое поле (hidden), и внего записывать тип запроса.

Можно по подробнее расказать про реализацию такого метода.
Тоесть мне что нужно организовать что то вроде case структуры и в зависимости что пришло запускать тот или иной блок в case соответствующий тому скрытому параметру, который получили.

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


Нелетучий Мыш
****


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

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



Строка
Код

String connect="";

не нужна. Но ты вроде все делаешь правильно. Что именно ты получаешь во втором сервлете - ошибку, null, еще что-нибудь?..

В первом сервлете соединение устанавливается без ошибок?

Цитата

Тоесть мне что нужно организовать что то вроде case структуры и в зависимости что пришло запускать тот или иной блок в case соответствующий тому скрытому параметру, который получили.

Да, именно так. Вместе с остальными полями формы будет передаваться еще одно, не видимое пользователю, а в сервлете - определенные действия в зависимости от значения этого параметра. 


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Hardworker
Дата 16.4.2006, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У меня connect1 содержит null, Я не пойму почему. Причем Я решил передать еще несколько параметров из первого сервлета, это логин и пароль пользователя
Код

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         String userName=request.getParameter("userName");
         String passwd=request.getParameter("password");  
            session.setAttribute("user",userName);
            session.setAttribute("pass",passwd);
 HttpSession session=request.getSession(true);
        try {
            Class.forName("com.informix.jdbc.IfxDriver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace(); 
        }
try {


          Connection con = DriverManager.getConnection("jdbc:informix-sqli://127.0.0.1:1526/statistic:informixserver=test_perl5",userName,passwd);
             session.setAttribute("connect",con);
             session.setAttribute("user",userName);
             session.setAttribute("pass",passwd);
       response.sendRedirect("http://127.0.0.1:8080/new/index.htm");
} catch (SQLException e) {
            e.printStackTrace();  
        
        out.println("Error while working with database:"+e);
        }
}



, но Я не могу получить во втором сервлете даже список параметров сессии.

А получаю Я его так
Код
 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      HttpSession session=request.getSession();
      Enumeration valueNames;
      String name,value;
     valueNames=session.getAttributeNames();
Connection connect1;
while (valueNames.hasMoreElements() ){

         name=valueNames.nextElement().toString();
         out.println(name);
         value=session.getAttribute(name).toString();
     out.println(name+"="+value);
    }
         connect1 = (Connection) session.getAttribute("connect");//это значение равно null почемуто
}

В результате ничего не выводится в цикле. 
Выводится только вторым сервлетом connect1=null.

Подскажите как решить проблему?? 
PM MAIL   Вверх
batigoal
Дата 16.4.2006, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


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

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



А как ты попадаешь во второй сервлет? Ты не уходишь с сайта между запросами к этим сервлетами? Т.е. не теряется ли сессия? 


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Hardworker
Дата 16.4.2006, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Первый сервлет у меня создает обьект Connection и если подключение удачное то Я перехожу на index.html
Код


response.sendRedirect("http://127.0.0.1:8080/new/index.htm");


на этой странице Я формирую запрос заполняя поля . Там есть кнопка которая посылает эти параметры второму сервлету методом post.

<form name="form1" method="post" action="http://127.0.0.1:8080/devserv/servlet/devserv">
Вот так Я перехожу во второй сервлет. Может быть тут и теряется что то. Но я не понимаю что. Ведь Я так понял что сессия к серверу у пользователя создана или нет, тут две сессии получается? 
PM MAIL   Вверх
Goliath
Дата 16.4.2006, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



HttpSession session=request.getSession(true); эта строка должна быть первой

Код

HttpSession session = request.getSession(true);
Connection con = DriverManager.getConnection("jdbc:informix-sqli://127.0.0.1:1526/statistic:informixserver=test_perl5",userName,passwd);
session.putAttribute("con", cart);


Код

HttpSession session = request.getSession(true);

Connection  con = (Connection )session.getAttribute("con");
 
--------------------
Наша жизнь растрачивается на мелочи… Упрощайте, упрощайте. [Генри Торо] 
PM MAIL   Вверх
Hardworker
Дата 16.4.2006, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте Goliaf.
У меня нет такого метода session.putAttribute(), что это за метод, может тут ошибка. 
PM MAIL   Вверх
Goliath
Дата 17.4.2006, 07:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Я имел ввиду putValue:
Цитата

putValue 
 public abstract void putValue(String name,
                               Object value)

Binds the specified object into the session's application layer data with the given name. Any existing binding with the same name is replaced. New (or existing) values that implement the HttpSessionBindingListener interface will call its valueBound() method. 

Parameters: 
name - the name to which the data object will be bound. This parameter cannot be null. 
value - the data object to be bound. This parameter cannot be null. 
Throws: IllegalStateException 
if an attempt is made to access session data after the session has been invalidated 
 
--------------------
Наша жизнь растрачивается на мелочи… Упрощайте, упрощайте. [Генри Торо] 
PM MAIL   Вверх
batigoal
Дата 17.4.2006, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


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

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



Цитата(Goliath @  17.4.2006,  08:34 Найти цитируемый пост)
Я имел ввиду putValue:

Хм. Я всегда использовал setAttribute, и не понял из доки, в чем вообще между ними разница.  

Это сообщение отредактировал(а) Lamer George - 17.4.2006, 08:37


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
tux
Дата 17.4.2006, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


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

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



Цитата(Lamer George @  17.4.2006,  13:37 Найти цитируемый пост)
Я всегда использовал setAttribute, и не понял из доки, в чем вообще между ними разница.  

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

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

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


 




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


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

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