Создание соединений с URL Java

Создание соединений с URL JavaКлассы URL и URLConnection инкапсилируют большую часть всех сложных подробностей процесса извлечения информации с удаленного узла. Объект URL создается следующим образом:

Для простого извлечения содержимого заданного ресурса достаточно использовать метод openStream() класса URL. Этот метод возвращает объект InputStream. Поток данного типа можно использовать обычным образом, например создать объект Scanner:

 

Пакет java.net различает унифицированные указатели ресурсов(uniform resource locator — URL) и унифицированные идентификаторы ресурсов(uniform resource identificator — URI).

URI — это лишь синтаксическая конструкция, которая содержит различные части строки, описывающей Web-ресурс. URL — это особый вид URI-идентификатора с информации о расположении ресурса.

Например, URI mailto:admin@pro-java.ru не является указателем, потому что не указывает на какие-либо данные. Такой URI называется унифицированным именем ресурса(uniform resource name — URN).

В библиотеке Java класс URI не имеет методов доступа к указанному им ресурсу, так как предназначен только для синтаксического разбора строки. В отличии от него, класс URL может открыть поток для данного ресурса. Поэтому класс URL может работать только со схемами, которые библиотека Java «умеет» обрабатывать, в частности, http:, https:, ftp:, указателями на позиции локальной файловой системы(file:) и JAR-файлы(jar:).

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

Спецификация URI задает правила построения этиъ идентификаторов. Структура URI выглядит следующим образом:

Здесь квадратные скобки( [] ) обозначают необязательную часть, а двоеточие и символ # являются разделителями. Если схема: присутствует в URI, то он называется абсолютным, а в противном случае — относительным.

Абсолютный URI называется непрозрачным, если специальная_часть не начинается с косой черты( / ), например, имеет вид:

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

Компонент специальная_часть иерархического URI имеет такую структуру:

Здесь квадратные скобки( [] ) тоже обозначают необязательную часть.

В URI серверов компонент полномочия имеет следующую форму:

Элемент порт должен иметь целочисленное значение. В документе RFC 2396, определяющем стандарт URI, также допускается механизм указания этой части в другом формате на основе информации из реестра, но он не получил широкого распространения.

Одна из основных задач класса URI заключается в синтаксическом разборе отдельных компонентов идентификатора и извлечении их с помощью перечисленных ниже методов:

  • getScheme
  • getSchemeSpecificPart
  • getAuthority
  • getUserInfo
  • getHost
  • getPort
  • getPath
  • getQuery
  • getFragment

Другая задача класса URI состоит в обработке абсолютных и относительных идентификаторов. Предположим, например, что в нашем распоряжении есть абсолютный и относительный URL:

На основании этой информации можно определить абсолютный URI, соответствующий относительному идентификатору:

Этот процесс называется преобразованием(resolving) относительного URI.

Обратный процесс называется преобразованием абсолютных адресов в относительные(relativization). Например, имея базовый URI http://docs.mycompany.com/api, можно получить для абсолютного URI http://docs.mycompany.com/api/java/lang/String.html относительный URI java/lang/String.html.

Для выполнения этих операций в классе URI предусмотрено два соответствующих метода: