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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> передача данных на сервер... почему-то ничего не происходит?! 
V
    Опции темы
Swatch
Дата 28.1.2008, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Добрый день

столкнулась со следующей проблемой: надо передать данные с клиента сервлету, чтобы он сохранил данные в БД. 
Вот моя реализация. 
клиент:
Код

public static Boolean setCategory(IEntity obj) {
             String data = URLEncoder.encode("SaveCategories", "UTF-8") + "=" + URLEncoder.encode("Category", "UTF-8");
            // Send data
            URL url = new URL("http://localhost:8080/RS_Blog__server_/CategoryServlet?" + data);
            URLConnection conn = url.openConnection();
            conn.setDoOutput(true);
            XMLEncoder e = new XMLEncoder(
                    new BufferedOutputStream(conn.getOutputStream()));
            e.writeObject(obj); //obj - класс таблицы категорий с геттерами и сеттерами
            e.close();
...
}


сервлет:
Код

protected void categoriesSave(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
response.setContentType("text/xml;charset=UTF-8");

        String e = (String) request.getParameter("SaveCategories");
        if (e != null) {
            if (e.equals("Category")) {
                XMLDecoder d = new XMLDecoder(new BufferedInputStream(request.getInputStream()));
                HibernateUtil.Save((IEntity) d.readObject());
                d.close();
            }
        }
}


на клиенте вызываю метод setCategory:
Код

ConnectToServer.setCategory(obj);


сервлету вообще ничего не передается... пыталась через system.out.println() посмотреть, что приходит... но ничего не получаю, видимо, ничего не приходит... smile  где может быть ошибка??? кто-нибудь знает, как данные с клиента сервлету передать???  smile 
PM MAIL   Вверх
LSD
Дата 28.1.2008, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Скорее всего ты просто шлёшь на сервер свой объект сериализованный в XML и все. Без всяких HTTP заголовков, и сервер его просто игнорирует т.к. не понимает подобного запроса.

Используй HttpClient.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Swatch
Дата 28.1.2008, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А можно пример использования HttpClient-а для передачи данных сервлету?

и что, хмл-ками вообще сервлету ничего передать нельзя?
PM MAIL   Вверх
LSD
Дата 28.1.2008, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(Swatch @  28.1.2008,  14:43 Найти цитируемый пост)
А можно пример использования HttpClient-а для передачи данных сервлету?

На оффсайте полно примеров (есть даже PostXML) smile 


Цитата(Swatch @  28.1.2008,  14:43 Найти цитируемый пост)
и что, хмл-ками вообще сервлету ничего передать нельзя? 

Да можно конечно. Я говорил не о том, ты должна передать корректный HTTP запрос, чтобы сервер мог его обработать. А не просто записать XML в поток. Поэтому или формировать HTTP заголовок самостоятельно или использовать утилиты.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
COVD
Дата 28.1.2008, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Swatch, в ваш пример надо добавить conn.getInputStream(); после записи обьекта. Таким образом вы дадите понять клиенту, что закончили писать данные и переходите к чтение ответа сервера. И тогда данные, записанные в буфер операцией writeObject, будут отправлены на сервер. А так они не отправляются. Сделано так потому, что метод post требует указания в хедере размера пересылаемых данных. Пока вы не закончили писать в буфер, размер определить нельзя.  
PM MAIL   Вверх
Swatch
Дата 29.1.2008, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



хммм... поставила conn.getInputStream() после e.writeObject(obj) в клиенте. получила следующую ошибку
лог томКэт-а:
Код

29.01.2008 11:07:51 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet CategoryServlet threw exception
java.util.NoSuchElementException
        at java.util.Vector.lastElement(Vector.java:456)
        at com.sun.beans.ObjectHandler.lastExp(ObjectHandler.java:134)
        at com.sun.beans.ObjectHandler.dequeueResult(ObjectHandler.java:138)
        at java.beans.XMLDecoder.readObject(XMLDecoder.java:201)
        at com.solovatsoft.rs_blog.servlets.CategoryServlet.categoriesSave(CategoryServlet.java:49)
        at com.solovatsoft.rs_blog.servlets.CategoryServlet.doPost(CategoryServlet.java:66)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
        at java.lang.Thread.run(Thread.java:619)


лог-клиента:
Код

java.io.IOException: Server returned HTTP response code: 500 for URL: http://localhost:8080/RS_Blog__server_/CategoryServlet?SaveCategories=Category
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1245)
        at com.company.proj.businessLogic.ConnectToServer.setCategory(ConnectToServer.java:81)
        at com.company.proj.MainForm.fillDatabaseActionPerformed(MainForm.java:447)
        at com.company.proj.MainForm.access$600(MainForm.java:59)
        at com.company.proj.MainForm$6.actionPerformed(MainForm.java:241)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)
        at java.awt.Component.processMouseEvent(Component.java:6038)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3260)
        at java.awt.Component.processEvent(Component.java:5803)
        at java.awt.Container.processEvent(Container.java:2058)
        at java.awt.Component.dispatchEventImpl(Component.java:4410)
        at java.awt.Container.dispatchEventImpl(Container.java:2116)
        at java.awt.Component.dispatchEvent(Component.java:4240)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
        at java.awt.Container.dispatchEventImpl(Container.java:2102)
        at java.awt.Window.dispatchEventImpl(Window.java:2429)
        at java.awt.Component.dispatchEvent(Component.java:4240)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
BUILD SUCCESSFUL (total time: 19 seconds)


что это такое, не подскажете? почему возникает ошибка???
PM MAIL   Вверх
Ulysses4j
Дата 29.1.2008, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Swatch, вам же сказали, нельзя с Томкатом так общаться, с ним надо по http разговаривать. Вы что-нибудь слышали о сетевых протоколах вообще? Использование определенного протокола налагает набор требований на формат пересылаемых сообщений, нельзя просто одни данные (ваш XML-кодированный объект) слать, нужно еще разной метаинформации (информации о пересылаемой информации и ее отправителе)... Если вам хочется просто пересылать информацию, нужно написать свой маленький сервер и использовать его вместо Tomcat: повесить на другой порт и слушать его, если позволяют привилегии на серверной машине. Для Tomcat наиболее распространены тонкие клиенты — на основе браузера. Писать толстый клиент для Tomcat с вашей подготовкой, судя по вему, дело на данный момент малоперспективное — вы уж не обижайтесь: это самый сложный из трех вариантов (тонкий клиент, свой маленький сервер, толстый клиент).


--------------------
Communication is critical to the job of a programmer.
C. Jazdzewski. Fatherly Advice To New Programmers
PM MAIL WWW   Вверх
Swatch
Дата 29.1.2008, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вообще, о сетевых протоколах я много чего слышала... просто раз сказали, что надо вставить conn.getInputStream(), я и попробовала... и ничего страшного нет, если человек пытается начать со сложного...
PM MAIL   Вверх
Ulysses4j
Дата 29.1.2008, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Swatch @  29.1.2008,  12:20 Найти цитируемый пост)
ничего страшного нет, если человек пытается начать со сложного...

Страшного нет ничего — это верно. Просто вряд ли у него что-то получится: учатся обычно от простого к сложному — тут впору не про сетевые протоколы говорить, а про «Рассуждение о методе» Декарта и т. п. Хотя, если не охота с Декартом связываться, надо просто читать книжки: про те же сетевые протоколы и написание сетевых приложений в Java, скажем — ведь есть литература соответсвующая. Форумы все-таки не могут заменить определенный базовый бэкграунд.
Цитата(Swatch @  29.1.2008,  12:20 Найти цитируемый пост)
 сказали, что надо вставить conn.getInputStream(), я и попробовала... 

Вспоминается совет из книжки «Программист-прагматик», кажется: не программируйте в расчете на случай.

Это сообщение отредактировал(а) Ulysses4j - 29.1.2008, 11:34


--------------------
Communication is critical to the job of a programmer.
C. Jazdzewski. Fatherly Advice To New Programmers
PM MAIL WWW   Вверх
Swatch
Дата 29.1.2008, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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

public static void setCategory(IEntity obj) {
        try {
            URL url = new URL("http://localhost:8080/RS_Blog__server_/SaveServlet");
            URLConnection conn = url.openConnection();
            conn.setRequestProperty("Content-Type", "application/x-java-serialized-object");
            conn.setDoOutput(true);
            XMLEncoder e = new XMLEncoder(
                        new BufferedOutputStream(conn.getOutputStream()));
            e.writeObject(obj);            
            e.close();
            conn.getInputStream();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

сервлет:
Код

protected void categoriesSave(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        XMLDecoder d = new XMLDecoder(new BufferedInputStream(request.getInputStream()));
        IEntity entity = (IEntity) d.readObject();
        System.out.println(entity);
        HibernateUtil.Save(entity);
        d.close();
    }


в итоге, все отлично сохраняется в базу... COVD спасибо за помощь... Ваша строчка стала решающей!!! smile

Добавлено через 2 минуты и 29 секунд
ах, да... еще для классика БД я добавила 
Код

implements java.io.Serializable 

PM MAIL   Вверх
LSD
Дата 30.1.2008, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(Swatch @  29.1.2008,  14:18 Найти цитируемый пост)
в итоге, все отлично сохраняется в базу... COVD спасибо за помощь... Ваша строчка стала решающей!!!

Не забывай smile 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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