Класс 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
Конструкторы java.net.URL устарели. Разработчикам рекомендуется использовать java.net.URI для разбора или создания URL. В тех случаях, когда требуется экземпляр
java.net.URL для открытия соединения, можно использовать URI для построения или разбора строки URL, возможно, вызвав URI.parseServerAuthority() для проверки того, что компонент authority может быть проанализирован как серверный, а затем вызвав 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, должны учитывать рекомендации, изложенные в RFC3986, раздел 7, Рассмотрение вопросов безопасности.
Все конструкторы
URLмогут выброситьMalformedURLException. В частности, если реализацияURLStreamHandlerподсистемы отклоняет или известно, что отклоняет любой из параметров, может быть выброшеноMalformedURLException. Как правило, конструктор, вызывающий метод 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. См. примечание о устаревании конструктора в разделе устаревание конструктора для получения дополнительных сведений.URL из указанного protocol, host, номера port и file. host может быть представлен именем хоста или прямым IP-адресом. Если используется литеральный IPv6-адрес, он должен быть заключён в квадратные скобки ('[' и ']'), как указано в RFC 2732; однако, также принимается формат литерального IPv6-адреса, определённый в RFC 2373: Архитектура адресации версии 6 протокола IP.
Указание номера port -1 указывает, что URL должен использовать порт по умолчанию для протокола.
Если это первый объект URL, создаваемый с указанным протоколом, для этого протокола создаётся объект обработчика потока, экземпляр класса URLStreamHandler:
- Если приложение ранее настроило экземпляр
URLStreamHandlerFactoryв качестве фабрики обработчиков потоков, то вызывается методcreateURLStreamHandlerэтого экземпляра со строкой протокола в качестве аргумента для создания обработчика потоков протокола. - Если фабрика обработчиков потоков ещё не настроена или метод
createURLStreamHandlerфабрики возвращаетnull, то используется механизм ServiceLoader для поиска реализаций URLStreamHandlerProvider с помощью системного загрузчика классов. Порядок поиска поставщиков определяется конкретной реализацией, и реализация свободна кешировать найденных поставщиков. Возможные ошибки ServiceConfigurationError,ErrorилиRuntimeException, выброшенные методомcreateURLStreamHandler, будут переданы потоку вызова. МетодcreateURLStreamHandlerкаждого поставщика, если он создан, вызывается со строкой протокола, пока поставщик не вернёт не-null или не будут исчерпаны все поставщики. - Если на предыдущем шаге обработчик протокола не найден, конструктор считывает значение системной переменной:
Если значение этой системной переменной не равно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() для создания экземпляра URL. См. примечание о устаревании конструктора в разделе устаревание конструктора для получения дополнительных сведений.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, связанного с пользовательским обработчиком протокола. См. примечание о устаревании конструктора в разделе устаревание конструктора для получения дополнительных сведений.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. См. примечание о устаревании конструктора в разделе устаревание конструктора для получения дополнительных сведений.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() для создания экземпляра URL. См. примечание о устаревании конструктора в устаревании конструктора для получения более подробной информации.
<scheme>://<authority><path>?<query>#<fragment>
Ссылка анализируется на составляющие: схему, авторитет, путь, запрос и фрагмент. Если компонент пути пустой, а компоненты схемы, авторитета и запроса не определены, то новый URL является ссылкой на текущий документ. В противном случае, фрагмент и часть запроса из spec используются в новом 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.- Возвращает:
- часть авторитета этого
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
public int hashCode()
Код хеширования основан на всех компонентах URL, релевантных для сравнения URL. Таким образом, эта операция является блокирующей операцией.
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 используется для построения обработчика протокола потока из имени протокола.
- Parameters:
-
fac- желаемая фабрика. - Throws:
-
Error- если приложение уже установило фабрику. - See Also:
© 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/net/URL.html
URI.toURL()для создания экземпляра URL.