| |
break;
// Отображаем принятую строку
System.out.println(str);
}
// Закрываем входной поток
is.close();
}
}
catch(Exception ioe)
{
System.out.println(ioe.toString());
}
try
{
System.out.println(
"Press to terminate application...");
System.in.read(bKbdInput);
}
catch(Exception ioe)
{
System.out.println(ioe.toString());
}
}
}
Описание исходного текста приложения 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
приложение создала обычный входной поток, а затем, на его базе, форматированный
входной поток к
|
|