Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых
[Назад]

Библиотека примеров приложений Java

Оглавление
Работа с классом InetAddress
Работа с классом URL
Просмотр файлов сервера Web
Копирование файлов сервера Web
Контрольная сумма аплета
Потоковые сокеты - сервер
Потоковые сокеты - клиент
Общение в реальном времени
Широковещатель-
ные сообщения

Аплет и расширение сервера Web

Назад Вперед

8.2. Работа с классом URL

Пример показывает способы применения класса URL для просмотра компонент адреса URL локального или удаленного узла.

Исходный текст примера

Архив проекта для Java WorkShop 2.0

Немного теории

Для работы с ресурсами, заданными адресами URL, в библиотеке классов Java имеется очень удобный и мощный класс с названием URL.

С помощью определенных в нем конструкторов и методов нетрудно извлечь и проверить отдельные компоненты адреса: протокол, адрес узла, номер порта, имя файла. Вы также можете открыть поток, связанный с ресурсом и прочитать его для отображения, обработки или для копирования в другой поток.

Расскажем кратко о классе URL.

Конструкторы класса URL

В этом классе предусмотрено четыре конструктора.

Первый из них создает объект URL для сетевого ресурса, адрес URL которого передается в виде текстовой строки через единственный параметр spec:

public URL(String spec);

В процессе создания объекта проверяется заданный адрес URL.. Если адрес указан неверно, возникает исключение MalformedURLException. Это же исключение возникает при попытке использовать протокол, с которым данная система не может работать.

Второй вариант конструктора класса URL допускает раздельное указание протокола, адреса узла, номера порта, а также имя файла:

public URL(String protocol,
  String host, int port, String file);

Третий вариант предполагает использование номера порта, принятого по умолчанию:

public URL(String protocol,
  String host, String file);

Для протокола HTTP, например, это порт с номером 80.

И, наконец, четвертый вариант конструктора допускает указание контекста адреса URL и строки адреса URL:

public URL(URL context, String spec);

Строка контекста позволяет указывать компоненты адреса URL, отсутствующие в строке spec, такие как протокол, имя узла, файла или номер порта.

Методы класса URL

Кратко рассмотрим самые интересные методы, определенные в классе URL.

Метод openStream позволяет создать входной поток для чтения файла ресурса, связанного с созданным объектом класса URL:

public final InputStream openStream();

Для выполнения операции чтения из созданного таким образом потока вы можете использовать метод read, определенный в классе InputStream.

С помощью метода getHost вы можете определить имя узла, соответствующего данному объекту URL:

public String getHost();

Метод getFile позволяет получить имя файла, связанного с данным объектом URL:

public String getFile();

Метод getPortt предназначен для определения номера порта, на котором выполняется связь для объекта URL:

public int getPort();

С помощью метода getProtocol вы можете определить протокол, с использованием которого установлено соединение с ресурсом, заданным объектом URL:

public String getProtocol();

Метод getRef возвращает текстовую строку ссылки на ресурс, соответствующий данному объекту URL:

public String getRef();

Метод hashCode возвращает хэш-код объекта URL:

public int hashCode();

Вы можете использовать метод equals для определения идентичности адресов URL, заданных двумя объектами класса URL:

public boolean equals(Object obj);

Если адреса URL идентичны, метод equals возвращает значение true, если нет - значение false.

Метод toExternalForm возвращает текстовую строку внешнего представления адреса URL, определенного данным объектом класса URL:

public String toExternalForm();

Метод toString возвращает текстовую строку, представляющую данный объект класса URL:

public String toString();

Метод openConnection

Метод openConnection предназначен для создания канала между приложением и сетевым ресурсом, представленным объектом класса URL:

public URLConnection openConnection();

Описание примера

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

Вот что получится, например, если ввести адрес http://frolov:80/test/text.txt:

Enter URL-address ('quit' to exit): 
http://frolov:80/test/text.txt

URL Address: http://frolov:80/test/text.txt
Host: frolov
Port: 80
Protocol: http
Filename: /test/text.txt
Reference: null
External Form: http://frolov:80/test/text.txt
Enter URL-address ('quit' to exit):

Этот адрес включает в себя название протокола (HTTP), доменное имя узла (frolov), номер порта (80), путь файлу и его имя (/test/text.txt).

Если ввести адрес документа, содержащий локальную ссылку, наша программа выделит и отобразит ее в поле Reference:

Enter URL-address ('quit' to exit): 
http://frolov/index.htm#main

URL Address: http://frolov/index.htm#main
Host: frolov
Port: -1
Protocol: http
Filename: /index.htm
Reference: main
External Form: http://frolov/index.htm#main
Enter URL-address ('quit' to exit):

Вы можете ввести также адрес с протоколом FTP. Вот что получится, если ввести адрес ftp://frolov/mytexts/text.txt:

Enter URL-address ('quit' to exit):
ftp://frolov/test/mytexts/qq.txt

URL Address: ftp://frolov/test/mytexts/qq.txt
Host: frolov
Port: -1
Protocol: ftp
Filename: /test/mytexts/qq.txt
Reference: null
External Form: ftp://frolov/test/mytexts/qq.txt
Enter URL-address ('quit' to exit):

При попытке ввести адрес с неизвестным протоколом возникнет исключение MalformedURLException:

Enter URL-address ('quit' to exit): 
ttt://test/t.txt
java.net.MalformedURLException: 
  unknown protocol: ttt
Enter URL-address ('quit' to exit):

Рассмотрим исходный текст приложения.

Метод main

Сразу после запуска метод main приступает к выполнению цикла ввода адресов URL:

String s;
URL u;
            
while(true)
{    
  System.out.println(
    "Enter URL-address ('quit' to exit): ");
        
  s = new String(getKbdString());
  if(s.equals("quit"))
    break;
  . . .
}

В цикле метод создает для введенных адресов объекты класса URL и передает их методу printURLAddresssInfo:

try
{
  u = new URL(s);
}
catch(MalformedURLException ex)
{
  System.out.println(ex.toString());
  continue;
}
      
printURLAddresssInfo(u);

Этот метод выводит на консоль информацию о компонентах объекта класса URL.

Метод printURLAddresssInfo

Метод printURLAddresssInfo выводит на консоль текстовое представление объекта URL и его отдельных компонент, извлеченных соответствующими методами класса URL:

System.out.println("URL Address: " + u);
System.out.println("Host: " + u.getHost());
System.out.println("Port: " + u.getPort());
System.out.println(
  "Protocol: " + u.getProtocol());
System.out.println(
  "Filename: " + u.getFile());
System.out.println(
  "Reference: " + u.getRef());
System.out.println(
  "External Form: " + u.toExternalForm());

Назад Вперед

[Назад]