Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > опять о сервлетах


Автор: piero 6.10.2002, 23:34
Задача: с помощью сервлета незаметно для пользователя-клиента(т.е чтоб ещё одно окошко не  открывалось) отправить на другую страничку(некую вполне определённую) форму с данными, затем на этой самой страничке эмулировать нажатие Submit. Пример: отправить через пейджинговый сайт сообщение.
Вопрос: КАК?

Автор: Sun 8.10.2002, 02:48
Тут надо скорее не с помощью сервлета а с помощью апплета или JavaScripta. То-есть можно попробовать создать форму со скрытыми полями
<input type="hidden" name="..." value="...">
Дальше указать в action формы URL сервлета (или CGI-скрипта), который будет обрабатывать форму (отсылать сообщение на пейджер) и потом будет возвращать броузеру такую же страницу.
А для того чтобы незаметно отсылалась форма нужно вызывать на какое-то событие метод формы submit(). Можно например на событие onLoad документа или на таймер.
При этом если твой сервлет будет возвращать такую же по внешнему виду страницу что и страница из который он был вызван, то юзер даже ничего не должен заметить. :)

Автор: piero 11.10.2002, 02:44
Это не совсем то, что мне надо. А надо, чтобы весящий где-то на севаке БЕЗ какого либо контроля соединялся с сайтами пейджинговых компаний и САМ через их веб-интерфейс слал мессаги, отправляя этим сайта заплненные формы с сообщением, номером абонента и т.д, т.е вопрос именно в том, как сервлетом послать туда ( а не юзеру) форму... :notify  Заранее спасибо!

Автор: Sun 12.10.2002, 03:36
Если у тебя юзер не принимает никакого участия, то в таком случае тебе достаточно написать класс с методом main(), который будет в бесконечном цикле или на события таймера будет вызывать скрипт пейджинговой компании с нужными параметрами (номер абонента, сообщение...)
Для запуска и остановки твоего класса ты можешь использовать сервлет. В принципе можно объеденить их в один класс. Тo-есть нужно сделать что-то вроде:
Код

public class Server extends Thread {
public static boolean flag = false;
public Server() {
super("Server");
flag = true;
}
public static void main(String [] args) throws Exception {
Server newServer = new Server();
newServer.start();
}
public void run() {
while (flag) {
//здесь ты вставляешь код вызова пейджера
//если надо - ставишь задержку
...
}
}
public static void end() {
flag = false;
}
}


Теперь нужно при помощи сервлета (или другим способом) запустить на сервере этот класс. Фактически тебе надо на сервере выполнить команду
java <path_to_class/class_name>
Остановить можно из сервлета путем вызова статического метода Server.end();

Автор: piero 18.10.2002, 03:46
Sun, sorry, но весь вопрос мой и состоит в том КАК всё-таки
ВЫЗВАТЬ СКРИПТ пейджинговой компании...Его URL известен,
но что делать дальше?  :notify

Автор: Sun 18.10.2002, 20:18
Вызывать скрипт совсем несложно. Есть несколько способов это сделать. Можешь попробовать использовать класс URL
Код

URL url = new URL("<path to script>/<script name>?<parameters>");
InputStream is = url.openStream();
is.read();

Здесь хитрость в том, что ты открываешь входной поток и требуешь от ВЕБ-сервера выдать тебе нужный документ (фактически вызываешь метод GET), только на самом деле ты запускаешь скрипт с параметрами.
Параметры передаются в виде
?subject="Hello, world!"&message="Some message"
Проверь - будет ли такая штука работать (я не проверял). Но теоретически она должна запустить на сервере твой скрипт.

Автор: piero 23.10.2002, 19:01
Наверное, не is.read(); a while(is.available()) is.read; ? или я не прав?

Автор: Sun 24.10.2002, 19:26
На самом деле нужно лишь вызвать скрипт, а read позволяет тебе получить ответ от сервера в виде HTML-документа (в принципе ты можешь считать этот ответ в буфер и дальше его анализировать - скажем писать в лог-файл интересующую тебя информацию, а можешь смело сливать все это в /dev/null) :)

Автор: piero 25.10.2002, 17:46
Поэкспериментировал с несколькими сайтами пейджеров, не смог никак выяснить имя скрипта. Не подскажешь, как это делается? :baaa

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)