Класс URL
- java.lang.Object
-
- java.net.URL
- Все реализованные интерфейсы:
- Serializable
public final class URL extends Object implements Serializable
Класс URL представляет собой универсальный локатор ресурса, указатель на «ресурс» в сети Интернет. Ресурсом может быть что угодно, от простого файла или каталога до ссылки на более сложный объект, например, запрос к базе данных или поисковой системе. Дополнительную информацию о типах URL-адресов и их форматах можно найти по ссылке: Типы URL
В общем случае URL-адрес можно разбить на несколько частей. Рассмотрим следующий пример:
http://www.example.com/docs/resource1.html
Приведенный выше URL указывает на то, что используемый протокол — это http (Протокол передачи гипертекста), и что информация находится на хост-машине с именем www.example.com. Информация на этой хост-машине называется /docs/resource1.html. Точное значение этого имени на хост-машине зависит как от протокола, так и от самой хост-машины. Обычно информация хранится в файле, но она может генерироваться в режиме реального времени. Эта часть URL называется путем.
URL-адрес может необязательно содержать «порт», который представляет собой номер порта, к которому устанавливается TCP-соединение на удалённой хост-машине. Если порт не указан, используется порт по умолчанию для соответствующего протокола. Например, порт по умолчанию для http — 80. Альтернативный порт можно указать так:
http://www.example.com:1080/docs/resource1.html
Синтаксис URL определён в RFC 2396: Универсальные идентификаторы ресурсов (URI): Общий синтаксис, с изменениями, внесенными в RFC 2732: Формат литеральных IPv6-адресов в URL. Формат литерального IPv6-адреса также поддерживает scope_ids. Синтаксис и использование scope_ids описаны здесь.
К URL-адресу может быть добавлен фрагмент, также известный как «ссылка». Фрагмент обозначается знаком «#» (решётка), за которым следуют другие символы. Например,
http://java.sun.com/index.html#chapter1
Этот фрагмент не является технически частью URL-адреса. Скорее, он указывает, что после получения указанного ресурса приложение конкретно заинтересовано в той части документа, к которой прикреплен тег chapter1. Значение тега зависит от конкретного ресурса.
Приложение также может указать «относительный URL», который содержит только необходимую информацию для доступа к ресурсу относительно другого URL-адреса. Относительные URL-адреса часто используются внутри HTML-страниц. Например, если содержимое URL-адреса:
http://java.sun.com/index.htmlсодержало в себе относительный URL:
FAQ.htmlэто было бы сокращенной записью для:
http://java.sun.com/FAQ.html
Относительный URL-адрес не обязательно должен содержать все компоненты URL-адреса. Если протокол, имя хоста или номер порта отсутствуют, значение наследуется из полностью указанного URL-адреса. Необходимо указать компонент файла. Необязательный фрагмент не наследуется.
Сам класс URL не кодирует и не декодирует какие-либо компоненты URL в соответствии с механизмом экранирования, определённым в RFC2396. Ответственность за кодирование любых полей, которые требуют экранирования, перед вызовом URL, и декодирование экранированных полей, возвращаемых URL, лежит на вызывающей стороне. Кроме того, поскольку класс URL не знает о экранировании URL, он не распознаёт эквивалентность кодированной или декодированной формы одного и того же URL. Например, два URL-адреса:
http://foo.com/hello world/ and http://foo.com/hello%20worldсчитались бы неравными друг другу.
Обратите внимание, что класс URI выполняет экранирование своих компонент в определённых случаях. Рекомендуемый способ управления кодированием и декодированием URL-адресов заключается в использовании URI и преобразовании между этими двумя классами с помощью toURI() и URI.toURL().
Классы URLEncoder и URLDecoder также можно использовать, но только для кодирования HTML-форм, что не совпадает со схемой кодирования, определённой в RFC2396.
- С:
- JDK1.0
- См. также:
- Сериализованная форма
Конструкторы
| Конструктор и описание |
|---|
URL(String spec) Создаёт объект |
URL(String protocol,
String host,
int port,
String file) Создаёт объект |
URL(String protocol,
String host,
int port,
String file,
URLStreamHandler handler) Создаёт объект |
URL(String protocol,
String host,
String file) Создаёт URL из указанных имен |
URL(URL context,
String spec) Создаёт URL, обработав указанный спецификатор в заданном контексте. |
URL(URL context,
String spec,
URLStreamHandler handler) Создаёт URL, обработав указанный спецификатор с указанным обработчиком в заданном контексте. |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
boolean |
equals(Object obj) Сравнивает этот URL на равенство с другим объектом. |
String |
getAuthority() Возвращает часть авторизации этого |
Object |
getContent() Возвращает содержимое этого URL-адреса. |
Object |
getContent(Class[] classes) Возвращает содержимое этого URL-адреса. |
int |
getDefaultPort() Возвращает номер порта по умолчанию для протокола, связанного с этим |
String |
getFile() Возвращает имя файла этого |
String |
getHost() Возвращает имя хоста этого |
String |
getPath() Возвращает часть пути этого |
int |
getPort() Возвращает номер порта этого |
String |
getProtocol() Возвращает имя протокола этого |
String |
getQuery() Возвращает часть запроса этого |
String |
getRef() Возвращает якорь (также известный как «ссылка») этого |
String |
getUserInfo() Возвращает часть userInfo этого |
int |
hashCode() Создаёт целое число, подходящее для индексации в хеш-таблице. |
URLConnection |
openConnection() Возвращает экземпляр |
URLConnection |
openConnection(Proxy proxy) Аналогично |
InputStream |
openStream() Устанавливает подключение к этому |
boolean |
sameFile(URL other) Сравнивает два URL-адреса, исключая компонент фрагмента. |
static void |
setURLStreamHandlerFactory(URLStreamHandlerFactory fac) Устанавливает |
String |
toExternalForm() Строит строковое представление этого |
String |
toString() Строит строковое представление этого |
URI |
toURI() Возвращает эквивалент URI этого URL-адреса. |
Методы, унаследованные от класса java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait Конструкторы
URL
public URL(String protocol,
String host,
int port,
String file)
throws MalformedURLException Создаёт объект URL из указанного protocol, host, port номера и file.
host может быть выражен как имя хоста или литерльный IP-адрес. Если используется литерльный IPv6-адрес, он должен быть заключён в квадратные скобки ('[' и ']'), как указано в RFC 2732; однако, также принимается литерльный формат IPv6-адреса, определённый в RFC 2373: Архитектура адресации IP версии 6.
Указание номера port -1 означает, что URL должен использовать порт по умолчанию для протокола.
Если это первый объект URL, созданный с указанным протоколом, для этого протокола создаётся объект обработчика протокола потока, экземпляр класса URLStreamHandler.
- Если приложение ранее настроило экземпляр
URLStreamHandlerFactoryв качестве фабрики обработчиков потоков, то вызывается методcreateURLStreamHandlerэтого экземпляра со строкой протокола в качестве аргумента для создания обработчика протокола потока. - Если фабрика
URLStreamHandlerFactoryещё не настроена, или метод фабрикиcreateURLStreamHandlerвозвращаетnull, тогда конструктор находит значение системной переменной:java.protocol.handler.pkgs
. Если значение этой системной переменной не являетсяnull, оно интерпретируется как список пакетов, разделенных вертикальной чертой '|'. Конструктор пытается загрузить класс с именем:<package>.<protocol>.Handler
, где <пакет> заменяется именем пакета, а <протокол> - именем протокола. Если этот класс не существует, или если класс существует, но не является подклассомURLStreamHandler, то пробуется следующий пакет в списке. - Если на предыдущем шаге не удаётся найти обработчик протокола, конструктор пытается загрузить обработчик из системного пакета по умолчанию.
<system default package>.<protocol>.Handler
Если этот класс не существует, или если класс существует, но не является подклассомURLStreamHandler, выбрасываетсяMalformedURLException.
Обработчики протоколов для следующих протоколов гарантированно существуют в пути поиска :-
http, https, file, and jarОбработчики протоколов для дополнительных протоколов также могут быть доступны.
В этом конструкторе валидация входных данных не выполняется.
- Параметры:
-
protocol- имя используемого протокола. -
host- имя хоста. -
port- номер порта на хосте. -
file- файл на хосте - Исключения:
-
MalformedURLException- если указан неизвестный протокол. - См. также:
-
System.getProperty(java.lang.String),setURLStreamHandlerFactory( java.net.URLStreamHandlerFactory),URLStreamHandler,URLStreamHandlerFactory.createURLStreamHandler( java.lang.String)
URL
public URL(String protocol,
String host,
String file)
throws MalformedURLException Создаёт URL по указанному имени protocol, имени host и имени file. Используется порт по умолчанию для указанного протокола.
Этот метод эквивалентен вызову четырёхаргументного конструктора с аргументами protocol, host, -1, и file. В этом конструкторе валидация входных данных не выполняется.
- Параметры:
-
protocol- имя используемого протокола. -
host- имя хоста. -
file- файл на хосте. - Исключения:
-
MalformedURLException- если указан неизвестный протокол. - См. также:
URL(java.lang.String, java.lang.String, int, java.lang.String)
URL
public URL(String protocol,
String host,
int port,
String file,
URLStreamHandler handler)
throws MalformedURLException Создаёт объект URL из указанного protocol, host, port номера, file, и handler. Указание номера port -1 означает, что URL должен использовать порт по умолчанию для протокола. Указание handler null означает, что URL должен использовать обработчик потоков по умолчанию для протокола, как описано в: java.net.URL#URL(java.lang.String, java.lang.String, int, java.lang.String).
Если обработчик не равен null и существует менеджер безопасности, вызывается метод checkPermission менеджера безопасности с разрешением NetPermission("specifyStreamHandler"). Это может привести к исключению SecurityException. В этом конструкторе валидация входных данных не выполняется.
- Параметры:
-
protocol- имя используемого протокола. -
host- имя хоста. -
port- номер порта на хосте. -
file- файл на хосте -
handler- обработчик потоков для URL. - Исключения:
-
MalformedURLException- если указан неизвестный протокол. -
SecurityException- если менеджер безопасности существует и его методcheckPermissionне разрешает явно указать обработчик потоков. - См. также:
-
System.getProperty(java.lang.String),setURLStreamHandlerFactory( java.net.URLStreamHandlerFactory),URLStreamHandler,URLStreamHandlerFactory.createURLStreamHandler( java.lang.String),SecurityManager.checkPermission(java.security.Permission),NetPermission
URL
public URL(String spec)
throws MalformedURLException Создаёт объект URL из представления String.
Этот конструктор эквивалентен вызову двухаргументного конструктора с null первым аргументом.
- Параметры:
-
spec- строка для разбора в качестве URL. - Исключения:
-
MalformedURLException- если не указан протокол, или найден неизвестный протокол, илиspecимеетnullзначение. - См. также:
URL(java.net.URL, java.lang.String)
URL
public URL(URL context,
String spec)
throws MalformedURLException Создаёт URL, разбор данного спецификации в заданном контексте. Новый URL создаётся из данного контекстного URL и аргумента spec, как описано в RFC2396 "Uniform Resource Identifiers : Generic * Syntax" :
<scheme>://<authority><path>?<query>#<fragment>Ссылка разбирается в компоненты scheme, authority, path, query и fragment. Если компонент path пуст, а компоненты scheme, authority и query не определены, то новый URL является ссылкой на текущий документ. В противном случае, части fragment и query, присутствующие в spec, используются в новом URL.
Если компонент scheme определён в заданной спецификации и не совпадает со схемой контекста, новый URL создаётся как абсолютный URL, основанный только на спецификации. В противном случае компонент scheme наследуется от контекстного URL.
Если компонент authority присутствует в spec, то spec рассматривается как абсолютный, а authority и path spec заменяют контекстные authority и path. Если компонент authority отсутствует в spec, то authority нового URL наследуется от контекста.
Если компонент path spec начинается с символа "/" , path рассматривается как абсолютный и path spec заменяет контекстный path.
В противном случае path рассматривается как относительный и добавляется к контекстному path, как описано в RFC2396. Также в этом случае path канонизируется путём удаления изменений каталога, выполненных occurrences ".." и ".".
Для более подробного описания разбора URL см. RFC2396.
- Параметры:
-
context- контекст для разбора спецификации. -
spec- спецификация для разбора в качестве URL. - Исключения:
-
MalformedURLException- если не указан протокол, или найден неизвестный протокол, илиspecимеетnullзначение. - См. также:
-
URL(java.lang.String, java.lang.String, int, java.lang.String),URLStreamHandler,URLStreamHandler.parseURL(java.net.URL, java.lang.String, int, int)
URL
public URL(URL context,
String spec,
URLStreamHandler handler)
throws MalformedURLException Создаёт URL, разбор данной спецификации с указанным обработчиком в заданном контексте. Если обработчик равен null, разбор выполняется как в случае двухаргументного конструктора.
- Параметры:
-
context- контекст для разбора спецификации. -
spec- спецификация для разбора в качестве URL. -
handler- обработчик потоков для URL. - Исключения:
-
MalformedURLException- если не указан протокол, или найден неизвестный протокол, илиspecимеетnullзначение. -
SecurityException- если менеджер безопасности существует и его методcheckPermissionне разрешает явно указать обработчик потоков. - См. также:
-
URL(java.lang.String, java.lang.String, int, java.lang.String),URLStreamHandler,URLStreamHandler.parseURL(java.net.URL, java.lang.String, int, int)
Методы
getQuery
public String getQuery()
Возвращает часть запроса этого URL.
- Возвращает:
- часть запроса этого
URL, илиnullесли она не существует - С тех пор:
- 1.3
getPath
public String getPath()
Возвращает часть пути этого URL.
- Возвращает:
- часть пути этого
URL, или пустую строку, если она не существует - С тех пор:
- 1.3
getUserInfo
public String getUserInfo()
Возвращает часть userInfo этого URL.
- Возвращает:
- часть userInfo этого
URL, илиnullесли она отсутствует - С:
- 1.3
getAuthority
public String getAuthority()
Возвращает часть authority этого URL.
- Возвращает:
- часть authority этого
URL - С:
- 1.3
getPort
public int getPort()
Возвращает номер порта этого URL.
- Возвращает:
- номер порта, или -1, если порт не задан
getDefaultPort
public int getDefaultPort()
Возвращает номер порта по умолчанию для протокола, связанного с этим URL. Если схема URL или URLStreamHandler для URL не определяют номер порта по умолчанию, возвращается -1.
- Возвращает:
- номер порта
- С:
- 1.4
getProtocol
public String getProtocol()
Возвращает имя протокола этого URL.
- Возвращает:
- протокол этого
URL.
getHost
public String getHost()
Возвращает имя хоста этого URL, если применимо. Формат хоста соответствует RFC 2732, т.е. для литерального IPv6 адреса этот метод вернёт IPv6 адрес в квадратных скобках ('[' и ']').
- Возвращает:
- имя хоста этого
URL.
getFile
public String getFile()
Возвращает имя файла этого URL. Возвращаемая часть файла будет такой же, как getPath(), плюс конкатенация значения getQuery(), если оно есть. Если нет части запроса, этот метод и getPath() вернут одинаковый результат.
- Возвращает:
- имя файла этого
URL, или пустую строку, если файл не существует
getRef
public String getRef()
Возвращает якорь (также известный как "ссылка") этого URL.
- Возвращает:
- якорь (также известный как "ссылка") этого
URL, илиnullесли он отсутствует
equals
public boolean equals(Object obj)
Сравнивает этот URL на равенство с другим объектом.
Если данный объект не является URL, этот метод сразу возвращает false.
Два объекта URL равны, если у них одинаковый протокол, эквивалентные хосты, одинаковый номер порта на хосте, и одинаковые файл и фрагмент файла.
Два хоста считаются эквивалентными, если оба имени хостов могут быть разрешены в одни и те же IP адреса; иначе, если имя хоста не может быть разрешено, имена хостов должны быть равны без учёта регистра; или оба имени хостов равны null.
Поскольку сравнение хостов требует разрешения имён, эта операция является блокирующей операцией.
Примечание: Определённое поведение для equals известно как несовместимое с виртуальным хостингом в HTTP.
- Переопределяет:
-
equalsв классеObject - Параметры:
-
obj- URL для сравнения. - Возвращает:
-
falseесли объекты идентичны;falseв противном случае. - См. также:
-
Object.hashCode(),HashMap
hashCode
public int hashCode()
Создаёт целое число, подходящее для индексации в хеш-таблице.
Хеш-код базируется на всех компонентах URL, релевантных для сравнения URL. Таким образом, эта операция является блокирующей операцией.
- Переопределяет:
-
hashCodeв классеObject - Возвращает:
- хеш-код для этого
URL. - См. также:
-
Object.equals(java.lang.Object),System.identityHashCode(java.lang.Object)
sameFile
public boolean sameFile(URL other)
Сравнивает два URL, исключая компонент фрагмента.
Возвращает true если этот URL и аргумент other равны, не учитывая компонент фрагмента.
- Параметры:
-
other-URLдля сравнения. - Возвращает:
-
trueесли они ссылаются на один и тот же удалённый объект;falseв противном случае.
toString
public String toString()
Строит строковое представление этого URL. Строка создаётся путём вызова метода toExternalForm обработчика протокола потока для этого объекта.
- Переопределяет:
-
toStringв классеObject - Возвращает:
- строковое представление этого объекта.
- См. также:
-
URL(java.lang.String, java.lang.String, int, java.lang.String),URLStreamHandler.toExternalForm(java.net.URL)
toExternalForm
public String toExternalForm()
Строит строковое представление этого URL. Строка создаётся путём вызова метода toExternalForm обработчика протокола потока для этого объекта.
- Возвращает:
- строковое представление этого объекта.
- См. также:
-
URL(java.lang.String, java.lang.String, int, java.lang.String),URLStreamHandler.toExternalForm(java.net.URL)
toURI
public URI toURI()
throws URISyntaxException Возвращает эквивалентный URI для этого URL. Этот метод работает так же, как new URI (this.toString()).
Заметьте, что любой экземпляр URL, который соответствует RFC 2396, может быть преобразован в URI. Однако некоторые URL, которые не строго соответствуют спецификации, не могут быть преобразованы в URI.
- Возвращает:
- экземпляр URI, эквивалентный этому URL.
- Бросает:
-
URISyntaxException- если этот URL не отформатирован строго в соответствии с RFC2396 и не может быть преобразован в URI. - С:
- 1.5
openConnection
public URLConnection openConnection()
throws IOException Возвращает экземпляр URLConnection, представляющий соединение с удалённым объектом, на который ссылается данный URL.
Новый экземпляр URLConnection создаётся каждый раз при вызове метода URLStreamHandler.openConnection(URL) обработчика протокола для этого URL.
Следует отметить, что экземпляр URLConnection не устанавливает фактическое сетевое соединение при создании. Это произойдёт только при вызове URLConnection.connect().
Если для протокола URL (такого как HTTP или JAR) существует общедоступный специализированный подкласс URLConnection, принадлежащий одному из следующих пакетов или одному из их подпакетов: java.lang, java.io, java.util, java.net, возвращаемое соединение будет этого подкласса. Например, для HTTP будет возвращён HttpURLConnection, а для JAR - JarURLConnection.
- Возвращает:
- a
URLConnectionсвязывающий с URL. - Бросает:
-
IOException- если происходит ошибка ввода-вывода. - См. также:
URL(java.lang.String, java.lang.String, int, java.lang.String)
openConnection
public URLConnection openConnection(Proxy proxy)
throws IOException Аналогично openConnection(), за исключением того, что соединение будет выполнено через указанный прокси; обработчики протоколов, которые не поддерживают проксирование, проигнорируют параметр прокси и создадут обычное соединение. Вызов этого метода переопределяет настройки по умолчанию ProxySelector системы.
- Параметры:
-
proxy- прокси, через который будет выполнено соединение. Если необходимо прямое соединение, следует указать Proxy.NO_PROXY. - Возвращает:
- a
URLConnectionк URL. - Бросает:
-
IOException- если происходит ошибка ввода-вывода. -
SecurityException- если присутствует менеджер безопасности и у вызывающего нет разрешения на подключение к прокси. -
IllegalArgumentException- будет брошено, если прокси равно null или имеет неправильный тип -
UnsupportedOperationException- если подкласс, реализующий обработчик протокола, не поддерживает этот метод. - С:
- 1.5
- См. также:
-
URL(java.lang.String, java.lang.String, int, java.lang.String),URLConnection,URLStreamHandler.openConnection(java.net.URL, java.net.Proxy)
openStream
public final InputStream openStream()
throws IOException Открывает соединение с этим URL и возвращает InputStream для чтения из этого соединения. Этот метод является сокращением для:
openConnection().getInputStream()
- Возвращает:
- потоковый ввод для чтения из соединения URL.
- Бросает:
-
IOException- если происходит ошибка ввода-вывода. - См. также:
-
openConnection(),URLConnection.getInputStream()
getContent
public final Object getContent()
throws IOException Получает содержимое этого URL. Этот метод является сокращением для:
openConnection().getContent()
- Возвращает:
- содержимое этого URL.
- Бросает:
-
IOException- если происходит ошибка ввода-вывода. - См. также:
URLConnection.getContent()
getContent
public final Object getContent(Class[] classes)
throws IOException Получает содержимое этого URL. Этот метод является сокращением для:
openConnection().getContent(Class[])
- Параметры:
-
classes- массив типов Java - Возвращает:
- объект содержимого этого URL, который является первым соответствием указанным типам в массиве классов. null, если ни один из запрошенных типов не поддерживается.
- Бросает:
-
IOException- если происходит ошибка ввода-вывода. - С:
- 1.3
- См. также:
URLConnection.getContent(Class[])
setURLStreamHandlerFactory
public static void setURLStreamHandlerFactory(URLStreamHandlerFactory fac)
Устанавливает URLStreamHandlerFactory приложения. Этот метод может быть вызван не более одного раза в данной виртуальной машине Java.
Экземпляр URLStreamHandlerFactory используется для построения обработчика протокола потока из имени протокола.
Если существует менеджер безопасности, этот метод сначала вызывает метод менеджера безопасности checkSetFactory для проверки разрешения операции. Это может привести к исключению SecurityException.
- Параметры:
-
fac- желаемый фабричный объект. - Исключения:
-
Error- если приложение уже установило фабричный объект. -
SecurityException- если менеджер безопасности существует и его методcheckSetFactoryне разрешает операцию. - См. также:
-
URL(java.lang.String, java.lang.String, int, java.lang.String),URLStreamHandlerFactory,SecurityManager.checkSetFactory()
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.