Класс 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_id). Синтаксис и использование идентификаторов области действия описаны здесь.
К 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
Конструкторы java.net.URL объявлены устаревшими. Разработчикам рекомендуется использовать java.net.URI для разбора или создания URL. Если для открытия соединения необходим экземпляр
java.net.URL, строку URL можно создать или разобрать с помощью URI, при необходимости вызвав URI.parseServerAuthority(), чтобы проверить, можно ли разобрать компонент полномочий как полномочия на основе сервера, а затем вызвав URI.toURL() для создания экземпляра URL. Согласно спецификации конструкторы URL должны выбрасывать исключение MalformedURLException, однако фактически выполняемый разбор и проверка зависят от реализации. Некоторые этапы разбора и проверки могут быть отложены до вызова реализации обработчика потока. Возможность создать экземпляр 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приложениям следует, в зависимости от используемого протокола, проверить, можно ли разобрать полномочия URI как полномочия на основе сервера.Некоторые компоненты URL или URI, например userinfo, могут использоваться для создания вводящих в заблуждение URL или URI. Приложениям, работающим с URL или URI, следует учитывать рекомендации, приведённые в документе RFC 3986, раздел 7, «Вопросы безопасности».
Все конструкторы
URLмогут выбрасывать исключениеMalformedURLException. В частности, исключениеMalformedURLExceptionможет быть выброшено, если базовая реализацияURLStreamHandlerотклоняет или заведомо отклонит любой из параметров. Обычно конструктор, вызывающий метод parseURL обработчика потока, может выброситьMalformedURLException, если базовая реализация этого метода в обработчике потока выбрасываетIllegalArgumentException. Однако проверки, выполняемые обработчиками потока или не выполняемые ими, зависят от реализации, и вызывающим сторонам не следует полагаться на такие проверки для полной валидации URL. - Начиная с:
- 1.0
- Внешние спецификации
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
URL |
Устарел. |
URL |
Устарел. Используйте URI.toURL() для создания экземпляра URL. |
URL |
Устарел. Используйте of(URI, URLStreamHandler) для создания экземпляра URL, связанного с пользовательским обработчиком протокола. |
URL |
Устарел. Используйте URI.toURL() для создания экземпляра URL. |
URL |
Устарел. Используйте URI.toURL() для создания экземпляра URL. |
URL |
Устарел. Используйте of(URI, URLStreamHandler) для создания экземпляра URL, связанного с пользовательским обработчиком протокола. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
equals |
Сравнивает этот URL на равенство с другим объектом. |
String |
getAuthority() |
Возвращает часть authority этого URL. |
final Object |
getContent() |
Возвращает содержимое этого URL. |
final Object |
getContent |
Возвращает содержимое этого URL. |
int |
getDefaultPort() |
Возвращает номер порта по умолчанию для протокола, связанного с этим URL. |
String |
getFile() |
Возвращает имя файла этого URL. |
String |
getHost() |
Возвращает имя хоста этого URL, если применимо. |
String |
getPath() |
Возвращает часть path этого URL. |
int |
getPort() |
Возвращает номер порта этого URL. |
String |
getProtocol() |
Возвращает имя протокола этого URL. |
String |
getQuery() |
Возвращает часть query этого URL. |
String |
getRef() |
Возвращает якорь (также известный как «ссылка») этого URL. |
String |
getUserInfo() |
Возвращает часть userInfo этого URL. |
int |
hashCode() |
Создает целое число, подходящее для индексации в хеш-таблице. |
static URL |
of |
Создает URL из URI, как если бы был вызван uri.toURL(), и связывает его с указанным URLStreamHandler, если это разрешено. |
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
@Deprecated(since="20") public URL(String protocol, String host, int port, String file) throws MalformedURLException
URI.toURL(). Подробнее см. примечание об устаревании конструкторов.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, для поиска реализаций URLStreamHandlerProvider используется механизм ServiceLoader с загрузчиком системных классов. Порядок поиска поставщиков зависит от реализации; реализация может кэшировать найденных поставщиков. Если при вызовеcreateURLStreamHandlerвозникает ошибка ServiceConfigurationError,ErrorилиRuntimeException, она передается вызывающему потоку. МетодcreateURLStreamHandlerкаждого поставщика, если он создан, вызывается с передачей строки протокола до тех пор, пока поставщик не вернет ненулевое значение или не будут проверены все поставщики. - Если на предыдущем шаге обработчик протокола не найден, конструктор считывает значение системного свойства:
Если значение этого системного свойства не равноjava.protocol.handler.pkgsnull, оно интерпретируется как список пакетов, разделенных символом вертикальной черты '|'. Конструктор пытается загрузить класс с именем:
где<package>.<protocol>.Handler<package>заменяется именем пакета, а<protocol>— именем протокола. Если такого класса нет или класс существует, но не является подклассомURLStreamHandler, выполняется поиск в следующем пакете списка. - Если на предыдущем шаге обработчик протокола не найден, конструктор пытается загрузить встроенный обработчик протокола. Если такого класса нет или класс существует, но не является подклассом
URLStreamHandler, выбрасываетсяMalformedURLException.
Гарантируется наличие в пути поиска обработчиков протоколов для следующих протоколов:
httphttpsfilejar
Этот конструктор не выполняет проверку входных данных.
- Параметры:
-
protocol— имя используемого протокола. -
host— имя хоста. -
port— номер порта на хосте. -
file— файл на хосте - Исключения:
-
MalformedURLException— если указан неизвестный протокол, номер порта является отрицательным числом, отличным от -1, либо реализация базового обработчика потоков отклоняет или заведомо отклонитURL - Внешние спецификации
- См. также:
URL
@Deprecated(since="20") public URL(String protocol, String host, String file) throws MalformedURLException
URI.toURL(). Подробнее см. примечание об устаревании конструкторов.protocol, имени host и имени file. Используется порт по умолчанию для указанного протокола. Этот конструктор эквивалентен четырехаргументному конструктору, за исключением того, что для указанного протокола используется порт по умолчанию. Этот конструктор не выполняет проверку входных данных.
- Параметры:
-
protocol— имя используемого протокола. -
host— имя хоста. -
file— файл на хосте. - Исключения:
-
MalformedURLException— если указан неизвестный протокол либо реализация базового обработчика потоков отклоняет или заведомо отклонитURL - См. также:
URL
@Deprecated(since="20") public URL(String protocol, String host, int port, String file, URLStreamHandler handler) throws MalformedURLException
of(URI, URLStreamHandler). Подробнее см. примечание об устаревании конструкторов.URL из указанного protocol, host, номера port, file и handler. Указание номера port, равного -1, означает, что для URL следует использовать порт протокола по умолчанию. Указание handler, равного null, означает, что для URL следует использовать обработчик потоков протокола по умолчанию, как описано для: URL(java.lang.String, java.lang.String, int, java.lang.String). Этот конструктор не выполняет проверку входных данных.- Параметры:
-
protocol— имя используемого протокола. -
host— имя хоста. -
port— номер порта на хосте. -
file— файл на хосте -
handler— обработчик потоков для URL. - Исключения:
-
MalformedURLException— если указан неизвестный протокол, номер порта является отрицательным числом, отличным от -1, либо реализация базового обработчика потоков отклоняет или заведомо отклонитURL - См. также:
URL
@Deprecated(since="20") public URL(String spec) throws MalformedURLException
URI.toURL(). Подробнее см. примечание об устаревании конструкторов.URL из представления String. Этот конструктор эквивалентен вызову двухаргументного конструктора с null в качестве первого аргумента.
- Параметры:
-
spec—Stringдля разбора как URL. - Исключения:
-
MalformedURLException— если протокол не указан или найден неизвестный протокол, либоspecравенnull, либо разобранный URL не соответствует синтаксису соответствующего протокола, либо метод parseURL базового обработчика потоков выбрасываетIllegalArgumentException - См. также:
URL
@Deprecated(since="20") public URL(URL context, String spec) throws MalformedURLException
URI.toURL(). Подробнее см. примечание об устаревании конструкторов.
<scheme>://<authority><path>?<query>#<fragment>
Ссылка разбирается на компоненты схемы, полномочий, пути, запроса и фрагмента. Если компонент пути пуст, а компоненты схемы, полномочий и запроса не определены, новый URL является ссылкой на текущий документ. В противном случае в новом URL используются присутствующие в спецификации компоненты фрагмента и запроса. Если компонент схемы задан в спецификации и не совпадает со схемой контекста, новый URL создается как абсолютный URL только на основе спецификации. В противном случае компонент схемы наследуется от контекстного URL.
Если в спецификации присутствует компонент полномочий, она рассматривается как абсолютная, а компоненты полномочий и пути спецификации заменяют компоненты полномочий и пути контекста. Если компонент полномочий в спецификации отсутствует, полномочия нового URL наследуются из контекста.
Если компонент пути спецификации начинается с косой черты «/», путь считается абсолютным, а путь спецификации заменяет путь контекста.
В противном случае путь считается относительным и добавляется к пути контекста, как описано в RFC2396. Кроме того, в этом случае путь канонизируется путем удаления изменений каталога, вызванных вхождениями «..» и «.».
Более подробное описание разбора URL см. в RFC2396.
- Требования к реализации:
- Разбор URL включает вызов метода
parseURLвыбранного обработчика. - Параметры:
-
context— контекст, в котором разбирается спецификация. -
spec—Stringдля разбора как URL. - Исключения:
-
MalformedURLException— если протокол не указан или найден неизвестный протокол, либоspecравенnull, либо разобранный URL не соответствует синтаксису соответствующего протокола, либо метод parseURL базового обработчика потоков выбрасываетIllegalArgumentException - См. также:
URL
@Deprecated(since="20") public URL(URL context, String spec, URLStreamHandler handler) throws MalformedURLException
of(URI, URLStreamHandler), чтобы создать экземпляр URL, связанный с обработчиком пользовательского протокола. Дополнительные сведения см. в примечании об устаревании конструкторов.- Требования к реализации:
- Разбор URL включает вызов метода
parseURLвыбранного обработчика. - Параметры:
-
context— контекст, в котором разбирается спецификация. -
spec—Stringдля разбора в качестве URL. -
handler— обработчик потока для URL. - Исключения:
-
MalformedURLException— если протокол не указан, обнаружен неизвестный протокол,specравенnull, разобранный URL не соответствует специальному синтаксису связанного протокола или метод parseURL базового обработчика потока выбрасываетIllegalArgumentException - См. также:
Подробное описание методов
of
public static URL of(URI uri, URLStreamHandler handler) throws MalformedURLException
uri.toURL(), но связывает его с заданным URLStreamHandler, если это разрешено.- Примечание API:
- Приложениям следует рассмотреть возможность выполнения дополнительных проверок целостности перед созданием
URLи открытием соединения. См. примечание API в документации API на уровне класса. - Требования к реализации:
- Реализация этого метода включает вызов метода
parseURLвыбранного обработчика. - Параметры:
-
uri—URI, на основе которого следует создать возвращаемый объектURL -
handler— пользовательский обработчик потока протокола для возвращаемого объектаURL. Может быть равенnull; в этом случае будет использован обработчик потока по умолчанию для протокола, если он существует. - Возвращает:
- новый экземпляр
URL, созданный на основе заданногоURIи связанный с заданнымURLStreamHandler, если он указан - Исключения:
-
NullPointerException— еслиuriравенnull -
IllegalArgumentException— если протокол не указан (схема URI равнаnull) либо еслиURLStreamHandlerне равенnullи не может быть установлен для заданного протокола -
MalformedURLException— если обнаружен неизвестный протокол, заданный URI не соответствует специальному синтаксису связанного протокола или метод parseURL базового обработчика потока выбрасываетIllegalArgumentException - Начиная с:
- 20
- См. также:
getQuery
public String getQuery()
URL.- Возвращает:
- часть запроса этого
URLилиnull, если она отсутствует - Начиная с:
- 1.3
getPath
public String getPath()
URL.- Возвращает:
- часть пути этого
URLили пустую строку, если она отсутствует - Начиная с:
- 1.3
getUserInfo
public String getUserInfo()
URL.- Возвращает:
- часть userInfo этого
URLилиnull, если она отсутствует - Начиная с:
- 1.3
getAuthority
public String getAuthority()
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, этот метод немедленно возвращает false.
Два объекта URL равны, если у них одинаковый протокол, эквивалентные хосты, одинаковый номер порта на хосте, а также одинаковые файл и фрагмент файла.
Два хоста считаются эквивалентными, если оба имени хоста разрешаются в одни и те же IP-адреса; если же одно из имен хоста не удается разрешить, имена хостов должны совпадать без учета регистра; либо оба имени хоста должны быть равны null.
Поскольку сравнение хостов требует разрешения имен, эта операция блокирующая.
Примечание. Известно, что определенное поведение equals не согласуется с виртуальным хостингом в HTTP.
hashCode
sameFile
public boolean sameFile(URL other)
Возвращает true, если этот URL и аргумент other равны без учета компонента фрагмента.
- Параметры:
-
other—URLдля сравнения. - Возвращает:
-
true, если они ссылаются на один и тот же удаленный объект; в противном случае —false.
toString
toExternalForm
public String toExternalForm()
URL. Строка создается вызовом метода 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.
- Возвращает:
URLConnection, связанный с URL.- Исключения:
-
IOException— если возникает исключение ввода-вывода. - См. также:
openConnection
public URLConnection openConnection(Proxy proxy) throws IOException
openConnection(), за исключением того, что соединение будет установлено через указанный прокси; обработчики протоколов, не поддерживающие прокси, проигнорируют параметр прокси и установят обычное соединение. Вызов этого метода имеет приоритет над настройками ProxySelector по умолчанию в системе.- Параметры:
-
proxy— прокси, через который будет установлено это соединение. Если требуется прямое соединение, следует указать Proxy.NO_PROXY. - Возвращает:
URLConnectionк URL.- Выбрасывает:
-
IOException— если возникает исключение ввода-вывода. -
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 приложения. Этот метод можно вызвать не более одного раза в данной виртуальной машине Java. Экземпляр URLStreamHandlerFactory используется для создания обработчика потокового протокола на основе имени протокола.
- Параметры:
-
fac— требуемая фабрика. - Выбрасывает:
-
Error— если приложение уже задало фабрику. - См. также:
© 1993, 2025, 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/25/docs/api/java.base/java/net/URL.html
URI.toURL()для создания экземпляра URL.