Главная > Программирование > Программирования сетевых взаимодействий в Java
<< Предыдущий параграф
Следующий параграф >>
<< Предыдущий параграф Следующий параграф >>
Макеты страниц

1.6. Класс URLConnection

URLConnection - это класс общего назначения, предназначенный для доступа к атрибутам удаленного ресурса. Однажды установив соединение с удаленным сервером, вы можете использовать URLConnection для просмотра свойств удаленного объекта, прежде чем транспортировать его локально. Эти атрибуты представлены в спецификации протокола HTTP и, как таковые, имеют смысл только для объектов URL, использующих протокол HTTP.

URLConnection определяет несколько методов. Некоторые из них перечислены ниже.

Обратите внимание, что URLConnection определяет несколько методов, управляющих заголовочной информацией. Заголовок состоит из пар ключей и значений, представленных в виде строк. Используя getHeaderField(), вы можете получить значение, ассоциированное с ключом заголовка. Вызывая getHeaderField(), можно получить карту, содержащую все заголовки. Несколько стандартных заголовочных полей доступны непосредственно через такие методы, как getDate() и getContentType().

Основные методы класса URLConnection

int getContentLength(). Возвращает размер содержимого, ассоциированного с ресурсом. Если длина недоступна, возвращается -1.

String getContentType(). Возвращает тип содержимого, найденного в ресурсе. Это значение поля заголовка content-type. Возвращает null, если тип содержимого недоступен.

long getDate(). Возвращает время и дату ответа, представленное в миллисекундах, прошедших с 1 января 1970 г.

long getExpiration(). Возвращает время и дату устаревания ресурса, представленное в миллисекундах, прошедших с 1 января 1970 г. Если дата устаревания недоступна, возвращается ноль.

String getHeaderField(int idx). Возвращает значение заголовочного поля по индексу idx. (Индексы полей заголовка нумеруются, начиная с 0). Возвращает null, если значение idx превышает количество полей.

String getHeaderField(String fieldName). Возвращает значение заголовочного поля, чье имя указано в fieldName. Возвращает null, если указанное поле не найдено.

String getHeaderFieldKey(int idx). Возвращает ключ заголовочного поля по индексу idx. (Индексы полей заголовка нумеруются, начиная с 0). Возвращает null, если значение idx превышает количество полей.

long getLastModified(). Возвращает время и дату последней модификации ресурса, представленные в миллисекундах, прошедших после 1 января 1970 г. Если эта информация недоступна, возвращается ноль.

InputStream getInputStream() throws IOException. Возвращает InputStream, привязанный к ресурсу. Данный поток может использоваться для получения содержимого ресурса.

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

// Демонстрация применения URLConnection.

import java.net.*;

import java.io.*;

import java.util.Date;

class UCDemo {

public static void main(String args[]) throws Exception {

    int c;

    URL hp = new URL("http://www.ya.ru/");

    URLConnection hpCon = hp.openConnection();

    // получить дату

    long d = hpCon.getDate();

    if(d == 0)

        System.out.println("Нет информации о дате.");

    else

        System.out.println("Дата: " + new Date(d));

    // получить тип содержимого

    System.out.println("Тип содержимого: " + hpCon.getContentType());

    // получить дату устаревания

    d = hpCon.getExpiration();

    if(d==0)

        System.out.println("Нет информации о сроке действия.");

    else

        System.out.println("Устареет: " + new Date(d));

    // получить дату последней модификации

    d = hpCon.getLastModified();

    if(d==0)

        System.out.println("Нет информации о дате последней модификации.");

    else

        System.out.println("Дата последней модификации: " + new Date(d));

    // получить длину содержимого

    int len = hpCon.getContentLength();

    if(len == -1)

        System.out.println(" Длина содержимого недоступна.");

    else

        System.out.println("Длина содержимого: " + len);

    if(len != 0) {

        System.out.println("=== Содержимое ===");

        InputStream input = hpCon.getInputStream();

        int i = len;

        while (((c = input.read()) != -1) && (--i > 0)) {

            System.out.print((char) c);

        }

        input.close();

    }

    else {

        System .out.println(" Содержимое недоступно.");

    }

}

Эта программа устанавливает HTTP-соединение с www.ya.ru через порт 80. Затем она отображает несколько заголовочных значений и извлекает содержимое. Приведем первые строки вывода (точное их содержание будет меняться со временем):

Дата: Sat Sep 25 12:47:40 MSD 2010

Тип содержимого: text/html; charset=UTF-8

Устареет: Sat Sep 25 12:47:40 MSD 2010

Дата последней модификации: Sat Sep 25 12:47:40 MSD 2010

Длина содержимого: 6204

=== Содержимое ===

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional...>

<< Предыдущий параграф Следующий параграф >>