Класс URL
- Все реализованные интерфейсы:
Serializable
public final class URL extends Object implements Serializable
URL представляет собой унифицированный локатор ресурсов (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 может быть добавлен фрагмент, также известный как «ссылка» или «ref». Фрагмент обозначается символом решетки «#» и другими символами. Например,
http://www.example.com/index.html#chapter1
Этот фрагмент не является технически частью URL. Вместо этого он указывает, что после получения указанного ресурса приложение особенно заинтересовано в той части документа, к которой прикреплена метка chapter1. Значение метки зависит от ресурса.
Приложение также может указать «относительный URL», который содержит только необходимую информацию для доступа к ресурсу относительно другого URL. Относительные URL часто используются внутри HTML-страниц. Например, если содержимое URL:
http://www.example.com/index.html
содержит в себе относительный URL:
FAQ.html
это сокращение для:
http://www.example.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.
- Примечание API:
- Приложения, работающие с путями к файлам и URI файлов, должны очень тщательно использовать соответствующие методы для преобразования между ними. Метод-фабрика
Path.of(URI)и конструкторFile(URI)могут быть использованы для создания объектовPathилиFileиз URI файла.Path.toUri()иFile.toURI()могут быть использованы для созданияURIиз пути к файлу, который может быть преобразован в URL с помощьюURI.toURL(). Приложения никогда не должны пытаться создать или разобратьURLиз непосредственного строкового представленияFileилиPathэкземпляра.Некоторые компоненты URL или URI, такие как userinfo, могут быть злоупотреблены для создания вводящих в заблуждение URL или URI. Приложения, работающие с URL или URI, должны учитывать рекомендации, изложенные в RFC3986, раздел 7, Учет безопасности.
- С тех пор как:
- 1.0
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
URL |
Создаёт объект URL из представления String. |
URL |
Создаёт объект URL из указанного protocol, host, числового значения port и file. |
URL |
Создаёт объект URL из указанного protocol, host, числового значения port, file и handler. |
URL |
Создаёт URL из указанного protocol имени, host имени и file имени. |
URL |
Создаёт URL путём парсинга заданного описания в указанном контексте. |
URL |
Создаёт URL путём парсинга заданного описания с указанным обработчиком в указанном контексте. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
equals |
Сравнивает этот URL на равенство с другим объектом. |
String |
getAuthority() |
Получает часть авторизации этого URL. |
final Object |
getContent() |
Получает содержимое этого URL. |
final Object |
getContent |
Получает содержимое этого URL. |
int |
getDefaultPort() |
Получает номер порта по умолчанию для протокола, связанного с этим URL. |
String |
getFile() |
Получает имя файла этого URL. |
String |
getHost() |
Получает имя хоста этого URL, если применимо. |
String |
getPath() |
Получает часть пути этого URL. |
int |
getPort() |
Получает номер порта этого URL. |
String |
getProtocol() |
Получает имя протокола этого URL. |
String |
getQuery() |
Получает часть запроса этого URL. |
String |
getRef() |
Получает якорь (также известный как «ссылка») этого URL. |
String |
getUserInfo() |
Получает часть userInfo этого URL. |
int |
hashCode() |
Создаёт целое число, подходящее для индексации таблиц хеширования. |
URLConnection |
openConnection() |
Возвращает экземпляр URLConnection, представляющий соединение с удалённым объектом, на который ссылается URL. |
URLConnection |
openConnection |
Аналогично openConnection(), за исключением того, что соединение будет установлено через указанный прокси-сервер; обработчики протоколов, которые не поддерживают проксирование, проигнорируют параметр прокси и установят обычное соединение. |
final InputStream |
openStream() |
Устанавливает соединение с этим URL и возвращает InputStream для чтения из этого соединения. |
boolean |
sameFile |
Сравнивает два URL, исключая компонент фрагмента. |
static void |
setURLStreamHandlerFactory |
Устанавливает URLStreamHandlerFactory приложения. |
String |
toExternalForm() |
Строит строковое представление этого URL. |
String |
toString() |
Строит строковое представление этого URL. |
URI |
toURI() |
Возвращает эквивалент URI этого URL. |
Подробное описание конструкторов
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, то используется механизм ServiceLoader для поиска реализаций URLStreamHandlerProvider с помощью системного загрузчика классов. Порядок поиска поставщиков зависит от реализации, и реализация свободна кешировать найденных поставщиков. Возможная ошибка конфигурации сервиса ServiceConfigurationError,ErrorилиRuntimeException, возникшая при вызовеcreateURLStreamHandler, будет передана потоку вызова. Если экземпляр поставщика существует, вызывается методcreateURLStreamHandlerкаждого поставщика со строкой протокола в качестве аргумента до тех пор, пока поставщик не вернёт значение, отличное от null, или пока все поставщики не будут исчерпаны. - Если на предыдущем шаге не удалось найти обработчик протокола, конструктор читает значение системной переменной:
Если значение этой системной переменной не равноjava.protocol.handler.pkgsnull, оно интерпретируется как список пакетов, разделенных вертикальной слеш-символом '|'. Конструктор пытается загрузить класс с именем:
, где<package>.<protocol>.Handler<package>заменяется именем пакета, а<protocol>— именем протокола. Если такого класса нет, или класс существует, но не является подклассомURLStreamHandler, то пробуется следующий пакет в списке. - Если на предыдущем шаге не удалось найти обработчик протокола, то конструктор пытается загрузить встроенный обработчик протокола. Если такого класса нет, или класс существует, но не является подклассом
URLStreamHandler, то выбрасываетсяMalformedURLException.
Обработчики протоколов для следующих протоколов гарантированно существуют в пути поиска:
httphttpsfilejar
Данный конструктор не выполняет проверку входных данных.
- Parameters:
-
protocol- имя используемого протокола. -
host- имя хоста. -
port- номер порта на хосте. -
file- файл на хосте - Throws:
-
MalformedURLException- если неизвестен протокол или порт является отрицательным числом, отличным от -1 - See Also:
URL
public URL(String protocol, String host, String file) throws MalformedURLException
protocol, имени host и имени file файла. Используется стандартный порт для указанного протокола. Этот конструктор эквивалентен четырёхаргументному конструктору с единственным отличием — использованием стандартного порта для указанного протокола. Данный конструктор не выполняет проверку входных данных.
- Parameters:
-
protocol- имя используемого протокола. -
host- имя хоста. -
file- имя файла на хосте. - Throws:
-
MalformedURLException- если указан неизвестный протокол. - See Also:
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 должен использовать стандартный обработчик потоков для протокола, как описано в: URL(java.lang.String, java.lang.String, int, java.lang.String) Если обработчик не равен null и существует менеджер безопасности, вызывается метод checkPermission менеджера безопасности с разрешением NetPermission("specifyStreamHandler"). Это может привести к исключению SecurityException. Данный конструктор не выполняет проверку входных данных.
- Parameters:
-
protocol- имя используемого протокола. -
host- имя хоста. -
port- номер порта на хосте. -
file- файл на хосте -
handler- обработчик потоков для URL. - Throws:
-
MalformedURLException- если неизвестен протокол или порт является отрицательным числом, отличным от -1 -
SecurityException- если менеджер безопасности существует и его методcheckPermissionне разрешает явное указание обработчика потоков. - See Also:
URL
public URL(String spec) throws MalformedURLException
URL из String представления. Этот конструктор эквивалентен вызову двухаргументного конструктора с null первым аргументом.
- Parameters:
-
spec-Stringдля разбора в качестве URL. - Throws:
-
MalformedURLException- если не указан протокол, или найден неизвестный протокол, илиspecявляетсяnull, или обработанный URL не соответствует синтаксису соответствующего протокола. - See Also:
URL
public URL(URL context, String spec) throws MalformedURLException
<scheme>://<authority><path>?<query>#<fragment>
Ссылка анализируется на составляющие: схему, авторитет, путь, запрос и фрагмент. Если компонент пути пуст, а компоненты схемы, авторитета и запроса не определены, то новый URL является ссылкой на текущий документ. В противном случае, фрагмент и часть запроса, присутствующие в spec, используются в новом URL. Если компонент схемы определён в заданном спецификаторе и не совпадает со схемой контекста, то новый URL создаётся как абсолютный URL, основанный только на спецификаторе. В противном случае компонент схемы наследуется из контекстного URL.
Если компонент авторитета присутствует в спецификаторе, то спецификатор обрабатывается как абсолютный, а авторитет и путь спецификатора заменят контекстный авторитет и путь. Если компонент авторитета отсутствует в спецификаторе, то авторитет нового URL будет унаследован от контекста.
Если компонент пути спецификатора начинается с символа косой черты "/", то путь обрабатывается как абсолютный, и путь спецификатора заменяет контекстный путь.
В противном случае, путь обрабатывается как относительный путь и добавляется к контекстному пути, как описано в RFC2396. Кроме того, в этом случае путь канонизируется путём удаления изменений каталога, вызванных появлениями ".." и ".".
Для более подробного описания анализа URL обратитесь к RFC2396.
- Parameters:
-
context- контекст, в котором анализируется спецификация. -
spec-Stringдля анализа в качестве URL. - Throws:
-
MalformedURLException- если не указан протокол, или найден неизвестный протокол, илиspecявляетсяnull, или проанализированный URL не соответствует конкретной синтаксической структуре соответствующего протокола. - See Also:
URL
public URL(URL context, String spec, URLStreamHandler handler) throws MalformedURLException
- Parameters:
-
context- контекст, в котором анализируется спецификация. -
spec-Stringдля анализа в качестве URL. -
handler- обработчик потока для URL. - Throws:
-
MalformedURLException- если не указан протокол, или найден неизвестный протокол, илиspecявляетсяnull, или проанализированный URL не соответствует конкретной синтаксической структуре соответствующего протокола. -
SecurityException- если существует менеджер безопасности и его методcheckPermissionне позволяет задать обработчик потока. - See Also:
Подробности методов
getQuery
public String getQuery()
URL.- Returns:
- часть запроса этого
URL, илиnullесли она отсутствует - Since:
- 1.3
getPath
public String getPath()
URL.- Returns:
- часть пути этого
URL, или пустую строку, если она отсутствует - Since:
- 1.3
getUserInfo
public String getUserInfo()
URL.- Returns:
- часть userInfo этого
URL, илиnullесли она отсутствует - Since:
- 1.3
getAuthority
public String getAuthority()
URL.- Returns:
- часть авторитета этого
URL - Since:
- 1.3
getPort
public int getPort()
URL.- Returns:
- номер порта, или -1, если порт не задан
getDefaultPort
public int getDefaultPort()
URL. Если схема URL или URLStreamHandler для URL не определяют стандартный номер порта, возвращается -1.- Returns:
- номер порта
- Since:
- 1.4
getProtocol
public String getProtocol()
URL.- Returns:
- протокол этого
URL.
getHost
public String getHost()
URL, если применимо. Формат хоста соответствует RFC 2732, т.е. для литерального IPv6 адреса, этот метод вернёт IPv6 адрес, заключённый в квадратные скобки ('[' и ']').- Returns:
- имя хоста этого
URL.
getFile
public String getFile()
URL. Возвращаемая часть файла будет такой же, как getPath(), плюс конкатенация значения getQuery(), если таковое имеется. Если нет части запроса, этот метод и getPath() возвращают идентичные результаты.- Returns:
- имя файла этого
URL, или пустую строку, если она отсутствует
getRef
public String getRef()
URL.- Returns:
- якорь (также известный как "ссылка") этого
URL, илиnullесли он отсутствует
equals
public boolean equals(Object obj)
Если данный объект не является URL, то этот метод сразу возвращает false.
Два объекта URL равны, если у них одинаковый протокол, ссылки на эквивалентные хосты, одинаковый номер порта на хосте, и одинаковые файл и фрагмент файла.
Два хоста считаются эквивалентными, если оба имени хостов можно разрешить в одни и те же IP-адреса; иначе, если ни одно имя хоста не может быть разрешено, имена хостов должны быть равны без учёта регистра; или оба имени хостов равны null.
Поскольку сравнение хостов требует разрешения имён, эта операция является блокирующей операцией.
Примечание: Определённое поведение для equals известно как несоответствующее виртуальному хостингу в HTTP.
- Overrides:
-
equalsв классеObject - Parameters:
-
obj- URL для сравнения. - Returns:
-
trueесли объекты одинаковые;falseв противном случае. - See Also:
hashCode
public int hashCode()
Хеш-код основан на всех компонентах URL, релевантных для сравнения URL. Таким образом, эта операция является блокирующей операцией.
- Overrides:
-
hashCodeв классеObject - Returns:
- хеш-код для этого
URL. - See Also:
sameFile
public boolean sameFile(URL other)
Возвращает true если этот URL и аргумент other равны без учёта компонента фрагмента.
- Parameters:
-
other-URLдля сравнения. - Returns:
-
trueесли они ссылаются на один и тот же удалённый объект;falseв противном случае.
toString
public String toString()
URL. Строка создаётся путём вызова метода toExternalForm обработчика протокола потока для этого объекта.- Overrides:
-
toStringв классеObject - Returns:
- строковое представление этого объекта.
- See Also:
toExternalForm
public String toExternalForm()
toExternalForm обработчика протокола потока для этого объекта.- Возвращает:
- строковое представление этого объекта.
- См. также:
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. Каждый раз при вызове метода URLStreamHandler.openConnection(URL) обработчика протокола для этого URL создаётся новый экземпляр URLConnection.
Следует отметить, что экземпляр URLConnection не устанавливает фактическое сетевое подключение при создании. Это произойдёт только при вызове URLConnection.connect().
Если для протокола URL (например, HTTP или JAR) существует общедоступный специализированный подкласс URLConnection, принадлежащий одному из следующих пакетов или их подпакетов: java.lang, java.io, java.util, java.net, возвращаемое подключение будет этого подкласса. Например, для HTTP будет возвращён HttpURLConnection, а для JAR — JarURLConnection.
- Возвращает:
- a
URLConnectionподключение к URL. - Исключения:
-
IOException- если произошла ошибка ввода-вывода. - См. также:
openConnection
public URLConnection openConnection(Proxy proxy) throws IOException
openConnection(), за исключением того, что подключение будет выполнено через указанный прокси-сервер; обработчики протоколов, которые не поддерживают проксирование, проигнорируют параметр прокси и выполнят обычное подключение. Вызов этого метода обходит настройки системного по умолчанию ProxySelector.- Параметры:
-
proxy- прокси-сервер, через который будет выполнено это подключение. Если необходимо прямое подключение, следует указать Proxy.NO_PROXY. - Возвращает:
- подключение к URL.
- Исключения:
-
IOException- если произошла ошибка ввода-вывода. -
SecurityException- если присутствует менеджер безопасности и у вызывающего объекта нет разрешения на подключение к прокси-серверу. -
IllegalArgumentException- будет брошен, если прокси равен null или имеет неправильный тип. -
UnsupportedOperationException- если подкласс, реализующий обработчик протокола, не поддерживает этот метод. - С момента:
- 1.5
- См. также:
openStream
public final InputStream openStream() throws IOException
URL и возвращает поток InputStream для чтения из этого соединения. Этот метод является сокращением для:
openConnection().getInputStream()
- Возвращает:
- поток ввода для чтения из соединения URL.
- Исключения:
-
IOException- если произошла ошибка ввода-вывода. - См. также:
getContent
public final Object getContent() throws IOException
openConnection().getContent()
- Возвращает:
- содержимое этого URL.
- Исключения:
-
IOException- если произошла ошибка ввода-вывода. - См. также:
getContent
public final Object getContent(Class<?>[] classes) throws IOException
openConnection().getContent(classes)
- Параметры:
-
classes- массив типов Java - Возвращает:
- объект содержимого этого URL, который является первым совпадением указанных типов в массиве классов. null, если ни один из запрошенных типов не поддерживается.
- Исключения:
-
IOException- если произошла ошибка ввода-вывода. - С момента:
- 1.3
- См. также:
setURLStreamHandlerFactory
public static void setURLStreamHandlerFactory(URLStreamHandlerFactory fac)
Экземпляр URLStreamHandlerFactory используется для создания обработчика протокола потока из имени протокола.
Если присутствует менеджер безопасности, этот метод сначала вызывает метод checkSetFactory менеджера безопасности, чтобы убедиться, что операция разрешена. Это может привести к SecurityException.
- Параметры:
-
fac- требуемая фабрика. - Исключения:
-
Error- если приложение уже установило фабрику. -
SecurityException- если существует менеджер безопасности, и его методcheckSetFactoryне разрешает операцию. - См. также:
© 1993, 2021, 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.
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/net/URL.html