Работа в WWW
Выход был найден в системе CGI (Common Gateway Interface), которая вкратце действует следующим образом. При посылке сообщения мы указываем URL исполнимого файла некоторой программы, размещенной на машине-сервере. Получив сообщение, Web-сервер запускает эту программу и передает сообщение на ее стандартный ввод. Вот программа-то и знает, что делать с полученным сообщением. Она обрабатывает сообщение и выводит результат обработки на свой стандартный вывод. Web-сервер подключается к стандартному выводу, принимает результат и отправляет его обратно клиенту.
CGI-программу можно написать на любом языке: С, C++, Pascal, Perl, PHP, лишь бы у нее был стандартный ввод и стандартный вывод. Можно написать ее и на Java, но в технологии Java есть более изящное решение этой задачи с помощью сервлетов (servlets). CGI-программы обычно лежат на сервере в каталоге cgi-bin.
Листинг 19.2. Посылка строки по адресу URL.
import java.net.*; import java.io.*; class PostURL{ public static void main(String[] args){ String req = "This text is posting to URL"; try{ // Указываем URL нужной CGI-программы URL url = new URL(" http://www.bhv.ru/cgi-bin/some.pl "); // Создаем объект uc URLConnection uc = url.openConnection(); // Собираемся отправлять uc.setDoOutput(true); // и получать сообщения uc.setDoInput(true); // без кэширования uc.setUseCaches(false); // Задаем тип uc.setRequestProperty("content-type", "application/octet-stream"); // и длину сообщения uc.setRequestProperty("content-length", "" + req.length()); // Устанавливаем соединение uc.connect(); // Открываем выходной поток DataOutputStream dos = new DataOutputStream(uc.getOutputStreamO); // и выводим в него сообщение, посылая его на адрес URL dos.writeBytes(req); // Закрываем выходной поток dos.close(); // Открываем входной поток для ответа сервера BufferedReader br = new BufferedReader(new InputStreamReader( uc.getlnputStream())); String res = null; // Читаем ответ сервера и выводим его на консоль while ((res = br.readLine())!= null) System.out.println(res); br.close (); }catch(MalformedURLException me){ System.err.println(me); }catch(UnknownHostException he){ System.err.println(he); }catch(UnknownServiceException se){ System.err.println(se); }catch(IOException ioe){ System.err.println(ioe); } } }