Microsoft Visual J++. Создание приложений и аплетов на языке Java

Описание исходного текста приложения CallCGI


Внутри метода main мы определили несколько переменных.

Массив bKbdInput предназначен для хранения строки, введенной с помощью клавиатуры. В переменную length записывается длина этой строки.

Строка str класса String используется в качестве рабочей.

Переменная u класса URL предназначена для хранения ссылки на объект URL, созданный для загрузочного файла программы CGI.

Ссылка на канал связи с программой CGI хранится в переменной с  именем c класса URLConnection.

Переменные ps класса PrintStream и is класса DataInputStream хранят ссылки, соответственно, на выходной и входной потоки, через которые наше приложение обменивается данными с программой CGI.

После вывода приглашения на консоль наша программа вводит строку, которая будет передана программе CGI:

length = System.in.read(bKbdInput);

Далее массив bKbdInput преобразуется в строку str и перекодируется в кодировку URL. Эта кодировка была описана нами в 29 томе “Библиотеки системного программиста”. Она выполняется с помощью статического метода encode, определенного в классе URLEncoder:

String StrEncoded = URLEncoder.encode(str);

Перекодированная строка отображается на консоли:

System.out.println("Encoded string: >" + StrEncoded + "<");

На следующем этапе наше приложение создает объект класса URL для загрузочного файла программы CGI:



u = new URL("http://frolov/frolov-cgi/controls.exe");

Здесь предполагается, что программа CGI находится в файле controls.exe, который записан в виртуальный каталог frolov-cgi на сервере Web с адресом http://frolov). Про создание и настройку виртуальных каталогов для размещения расширений сервера Web мы рассказали в  29 томе “Библиотеки системного программиста”.

После создания объекта класса URL мы создаем канал с программой CGI как объект класса URLConnection:

c = u.openConnection();

Пользуясь этим каналом, мы вначале получаем выходной поток методом getOutputStream, а затем на его базе создаем форматированный выходной поток класса PrintStream, удобный для записи в него текстовых строк:


ps = new PrintStream(c.getOutputStream());
Через канал ps наше приложение передает программе CGI строку StrEncoded, а затем закрывает выходной поток, как это показано ниже:
ps.println(StrEncoded);
ps.close();
В этот момент на сервере Web уже запущена программа CGI, и она приняла переданные ей данные. Обработав эти данные, программа CGI записала в стандартный выходной поток динамически созданный ей документ HTML.
Для получения документа наше приложение CallCGI создала входной форматированный поток данных:
is = new DataInputStream(c.getInputStream());
Входной поток создан в два приема. Вначале с помощью метода getInputStream приложение создала обычный входной поток, а затем, на его базе, форматированный входной поток класса DataInputStream.
Получение от программы CGI динамически сформированного ей документа HTML наше приложение выполняет в цикле по строкам.
Строка документа HTML читается из входного форматированного потока методом readLine и записывается в переменную str:
str = is.readLine();
Если в процессе чтения был достигнут конец потока, цикл прерывается:
if(str == null)
  break;
Строка, полученная методом readLine, отображается на консоли пиложения:
System.out.println(str);
После завершения цикла входной поток закрывается методом close:
is.close();

Содержание раздела