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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> метод сервлета из аплета 
V
    Опции темы
lihusha
Дата 2.6.2009, 01:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Доброго времени суток , возможно повторюсь и подобная тема уже была. Не нашел...

Вопрос о чтении сервлетом данных из аплета. В аплете создается выходной поток , в методе сервлета - входной. Как теперь  вызвать метод doPost() ( или же doGet()) средствами  аплета ? И возможно ли это ?
Спасибо.
PM MAIL   Вверх
Alex089
Дата 2.6.2009, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



может просто делать HTTP-запрос из апплета в сервлет
PM   Вверх
lihusha
Дата 2.6.2009, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А можно пример ?
Каким методом аплета можно сделать HTTP запрос ?
PM MAIL   Вверх
Alex089
Дата 2.6.2009, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

String host = "localhost";
int port = 80;
String path = "/servlet/";
String data = "передаваемые данные";
// подключаемся к серверу
Socket s = new Socket(host, port);
// создаем HTTP-заголовок
String requestBody = "data="+data;
String request = "POST "+path+" HTTP/1.1\r\n" +
     "Host: "+host+"\r\n" +
     "Content-Type: application/x-www-form-urlencoded\r\n" +
     "Content-Length: "+requestBody.length()+"\r\n\r\n" +
     requestBody;
// запрос к серверу
OutputStream os = s.getOutputStream();
os.write(request.getBytes());
// получаем поток данных от сервера
InputStream is = s.getInputStream();
// читаем ответ сервера
byte[] buf = new byte[64*1024];
int r = is.read(buf);
s.close();
String response = new String (buf,0,r);

В response будет заголовок HTTP-ответа и то, что верное сервлет через response.getWriter().println(someString)

Внутри сервлета параметры (они же передаваемые данные) получают так: 
Код

String data = request.getParameter("data");


Это сообщение отредактировал(а) Alex089 - 2.6.2009, 18:50
PM   Вверх
Alex089
Дата 2.6.2009, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да, чуть  не забыл. Этот запрос будет обрабатываться методом doPost. Для doGet надо изменить заголовок запроса:
Код

String host = "localhost";
int port = 80;
String path = "/servlet/";
String data = "передаваемые данные";
// подключаемся к серверу
Socket s = new Socket(host, port);
// создаем HTTP-заголовок
String request = "GET "+path+"?data="+data+" HTTP/1.1\r\n" +
     "Host: "+host+"\r\n" +
     "Content-Type: application/x-www-form-urlencoded\r\n\r\n";

И по умолчанию в настройках безопасности JVM для апплетов задано, что устанавливать соединение можно только с тем хостом, с которого апплет был загружен.
PM   Вверх
lihusha
Дата 2.6.2009, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



метод аплета
Код

private void sendPostMessage(String message) throws UnknownHostException, IOException {
        String host = "localhost";
        int port = 80;
//веб-приложение "WebTest", сервлет "/Controller"
        String path = "WebTest/Controller";
        String data = "передаваемые данные";

        Socket s = new Socket(host, port);

        String requestBody = "data=" + data;
        String request = "POST " + path + " HTTP/1.1\r\n" +
                "Host: " + host + "\r\n" +
                "Content-Type: application/x-www-form-urlencoded\r\n" +
                "Content-Length: " + requestBody.length() + "\r\n\r\n" +
                requestBody;

        OutputStream os = s.getOutputStream();
        os.write(request.getBytes());

    }



метод doPost() сервлета
Код


protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException 
    {

        System.out.println("Controller : doPost();");
        String data = request.getParameter("data");
        System.out.println(data);

    }



метод doPost() не срабатывает...
 smile

метод sendPostMessage(String message) вызывается нажатием кнопки в окне аплета

Код

public void actionPerformed(ActionEvent e) {

        if (e.getSource() instanceof JButton) {
            JButton b = (JButton) e.getSource();
            if (b.getName().equals("send")) {

                try {


                    sendPostMessage(text.getText());


                } catch (MalformedURLException ex) {
                    Logger.getLogger(Viewer.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IOException ex) {
                    Logger.getLogger(Viewer.class.getName()).log(Level.SEVERE, null, ex);
                }
            }

        }
    }


Это сообщение отредактировал(а) lihusha - 2.6.2009, 21:09
PM MAIL   Вверх
Alex089
Дата 2.6.2009, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(lihusha @  2.6.2009,  20:22 Найти цитируемый пост)
String path = "WebTest/Controller";

Попробуй так 
Код

String path = "/WebTest/Controller/";

Контейнер приложений 80-ый порт слушает? (у тебя похоже NetBeans. Там Tomcat слушает 8084, а GlassFish - 8080) 
При выполнениее код не бросает исключение? 
В методе "sendPostMessage" сокет не закрыт.
PM   Вверх
lihusha
Дата 3.6.2009, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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

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

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


 




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


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

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