Клас URL (Uniform Resource Locator) представляє адресу на “ресурс” у Всесвітній Павутині (World Wide Web). Ресурс може бути простим файлом або директорією, або посиланням на більш складний об'єкт, на подобі запиту до бази даних, або до пошукової системи. В загальному URL можна розбити на декілька частин. Розглянемо наступний приклад:
http://www.example.com/docs/resource1.html
Даний URL вказує на використання протоколу HTTP (HyperText Transfer Protocol — Протокол Передачі Гіпертексту) і, що інформація розміщується на машині названій www.example.com. Інформація на даній машині розміщується за шляхом /docs/resource1.html. Буквальне значення цього ім'я на машині розміщення являється залежним від протоколу і від конфігурації машини. Інформація зазвичай розміщується у файлі, але вона може бути згенерованою програмою. Цей компонент URL називається компонентом шляху. Адреса URL необов'язково може містити “порт”, який являється номером пору до якого створюється TCP-з'єднання. Якщо порт не вказано, використовується порт за замовчуванням. Наприклад, порт за замовчуванням для протоколу HTTP являється 80. Альтернативний порт може вказуватись наступним чином:
http://www.example.com:1080/docs/resource1.html
Синтаксис URL визначений в документі RFC 2396 “Uniform Resource Identifiers (URI)”, корегування внесені у документі RFC 2732 для використання адрес протоколу IPv6 у адресах URL. URL може містити у собі посилання на фрагмент. Посилання на фрагмент виділяється знаком решітки “#”, за якими йде ідентифікатор фрагменту. Наприклад:
http://java.sun.com/index.html#chapter1
Даний фрагмент технічно не являється частиною URL. Скоріш, він вказує на те, що після отримання певного ресурсу, програма повинна виділити вказану частину документу, яка позначена як “chapter1”, у нашому випадку. Значення фрагменту являється залежним від типу ресурсу. Програма також може вказувати відносний URL, який містить тільки необхідну інформацію, яка ідентифікує ресурс, який є відносним до іншого URL. Відносні адреси часто використовуються у HTML-сторінках. Наприклад, якщо вміст ресурсу, який міститься за URL-адресою:
http://java.sun.com/index.html
містить наступний URL:
FAQ.html
В такому випадку це буде скороченням до:
http://java.sun.com/FAQ.html
У відносних URL не потрібно вказувати усі частини URL. Якщо протокол, ім'я машини, або номер порту не вказані, дані значення повинні бути скопійованими з наявного повного URL. Компонент імені файлу повинен бути вказаним. Необов'язковий фрагмент не успадковується. Клас URL не декодує чи коду самостійно будь-які компоненти URL у відповідності до механізму визначеного у RFC 2396. Відповідальності кодування чи декодування компонентів URL покладаються на користувача даного класу. Більше того, через те, що URL не “знає” про кодування URL, він не розпізнає еквівалентність між кодованою і декодованою формою однієї адреси URL. Наприклад, дві адреси URL:
http://foo.com/hello world/ i http://foo.com/hello%20world
будуть вважатись не еквівалентними. Зверніть увагу, що клас URL виконує кодування його компонентів при певних умовах. Рекомендований шлях управління кодуванням і декодуванням адрес URL, являється використання класу URI, і конвертування значень між цими двома класами використовуючи toURI() i URI.toURL(). Також можна використовувати класи URLEncoder i URLDecoder, але тільки для кодування значень елементів HTML форм, що буде відрізнятися від схеми кодування визначеною у документі RFC 2396.

Конструктори

URL(String spec)
Створює об'єкт класу URL з вказаного рядкового представлення адреси.
URL(String protocol, String host, int port, String file)
Створює об'єкт класу URL з рядкового представлення протоколу, ім'я машини, номеру порту і файлу.
URL(String protocol, String host, int port, String file, URLStreamHandler handler)
Створює об'єкт класу URL з рядкового представлення протоколу, ім'я машини, номеру порту, файлу і обробника потоку.
URL(String protocol, String host, String file)
Створює об'єкт класу URL з рядкового представлення протоколу, ім'я машини, і файлу.
URL(URL context, String spec)
Створює об'єкт класу URL розпізнаючи параметр з вказаного контексту. Новий URL створюється з даного контексту URL і аргумент spec описаний у документі RFC 2396:
<схему>://<ім'я><шлях>?<запит>#<фрагмент>
Посилання перетворюється у схему, ім'я, шлях, запит і частини фрагментів. Якщо компонент шляху пустий і компоненти схеми, імені і запиту являються невизначеними, тоді новий URL являється посиланням на поточний документ. В іншому випадку, частини фрагменту і запиту представлені у параметрі spec використовуються у новому URL. Якщо компонент схеми являється визначеним у аргументі spec і не співпадає з схемою контексту, тоді новий URL створюється у вигляді абсолютного URL, який базується на аргументі spec. В іншому випадку компонент схеми є успадкованим з контексту URL. Якщо компонент імені присутній у параметрі spec, тоді він інтерпретується як абсолютний, ім'я і шлях з spec замінять ім'я і шлях контексту. Якщо компонент імені являється відсутнім у spec, в такому випадку новий URL буде успадковано з контексту. Якщо компонент шляху spec розпочинається з символу “/”, в такому разі шлях інтерпретується як абсолютний і шлях з параметру spec замінює шлях контексту. В іншому випадку, шлях трактується як відносний шлях і застосовується до шляху контексту як вказано у RFC2396. Також, у цьому випадку, шлях перетворюється до канонічного вигляду, через видалення переміщень по директоріям через послідовності “..” і “.” (поточний і батьківський каталог). Для більш детального опису розпізнавання компонентів URL, перегляньте документ RFC2396.
String getAuthority()
Створює URL, розпізнаючи вказаний параметр spec з вказаним обробником через контекст.

Методи

String getAuthority()
Порівнює поточний URL на еквівалентність відносно вказаного об'єкту.
String getAuthority()
Повертає частину імені документу.
Object getContent()
Повертає контекст поточного об'єкту URL.
Object getContent(Class[] classes)
Повертає вміст поточного URL.
int getDefaultPort()
Повертає номер порту за замовчуванням протоколу асоційованим з поточним URL.
String getFile()
Повертає ім'я файлу з поточного об'єкту.
String getHost()
Повертає ім'я машини поточного об'єкту URL, якщо такий присутній.
String getPath()
Повертає компоненти шляху поточного URL.
int getPort()
Повертає номер порту з поточного об'єкту.
String getProtocol()
Повертає ім'я протоколу з поточного об'єкту URL.
String getQuery()
Повертає частину запиту з поточного URL.
String getRef()
Повертає елемент ідентифікатора частини вмісту поточного URL.
String getUserInfo()
Повертає частину userInfo поточного URL.
int hashCode()
Створює ціле число, яке придатне для індексування у хеш-таблиці.
URLConnection openConnection()
Повертає примірник URLConnection, який представляє підключення до віддаленого об'єкту, на який вказує поточний URL.
URLConnection openConnection(Proxy proxy)
Метод аналогічний до openConnection(), однак підключення буде здійснюватись через вказаний сервер proxy; обробники протоколів, які не підтримують підключення через проксі будуть ігнорувати аргумент і буде створено звичайне підключення.
InputStream openStream()
Створює підключення до поточного URL і повертає примірник InputStrean для читання з даного підключення.
boolean sameFile(URL other)
Порівнює поточний і вказаний URL не враховуючи компонент фрагменту.
protected void set(String protocol, String host, int port, String file, String ref)
Встановлює поля об'єкту URL.
protected void set(String protocol, String host, int port, String authority, String userInfo, String path, String query, String ref)
Встановлює вказані 8 полів об'єкту URL.
static void setURLStreamHandlerFactory(URLStreamHandlerFactory fac)
Встановлює фабрику URLStreamHandlerFactory програми.
String toExternalForm()
Конструює рядкове представлення поточного URL.
String toString()
Constructs a string representation of this URL. Конструює рядкове представлення поточного URL.
URI toURI()
Повертає URI еквівалентне до поточного URL.

Приклад

Наступний код демонструє використання деяких методів класу URL.
import java.net.* ; /* об'єкт URL і URI */
import java.io.* ;

class MainClass
{
  public static void main (String[] opts)
  {
    URL url1 ;
        
    try
    {
      url1 = new URL ("http://www.kytok.org.ua/?p=сортування") ;
    }
    catch (MalformedURLException ex)
    {
      System.out.println ("Помилка під час створення URL: " + ex) ;
      return ;
    }
    
    System.out.println ("об'єкт URL: " + url1.toString()) ;
    System.out.println ("toExternalForm(): " + url1.toExternalForm()) ;
    System.out.println ("getFile(): " + url1.getFile()) ;
    System.out.println ("getHost(): " + url1.getHost()) ;
    System.out.println ("getPath(): " + url1.getPath()) ;
    System.out.println ("getProtocol(): " + url1.getProtocol()) ;
    System.out.println ("getQuery(): " + url1.getQuery()) ;
    
    try
    {      
      System.out.println ("toURI().toASCIIString(): " + url1.toURI().toASCIIString()) ;
    }
    catch (URISyntaxException ex) 
    {
      System.out.println ("Помилка під час перетворення: " + ex) ;
      return ;
    }
  }
}
Після компілювання і виконання програми в вікні терміналу можна отримати наступний результат (код знаходиться у файлі “MainClass.java”): Java_URL_class_simple_sample Наступний приклад показує, як просто за допомогою Java завантажити вміст, який знаходиться за URL-адресою на поточну машину.
import java.net.* ; /* об'єкт URL і URI */
import java.io.* ;
import java.nio.charset.* ;

class MainClass
{
  public static void main (String[] opts)
  {
    URL gurl ;
    Charset chset = StandardCharsets.UTF_8 ;
        
    try
    {
      gurl = new URL ("http://www.kytok.org.ua/say_hallo.php") ;
    }
    catch (MalformedURLException ex)
    {
      System.out.println ("Помилка під час створення URL: " + ex) ;
      return ;
    }
    
    byte[] buff = new byte [1024] ;
    InputStream stream ;
    String content = new String () ;
    
    try
    {
      stream = gurl.openStream () ;
      
      int bytes = 0 ;
      
      while ((bytes=stream.read (buff))>0)
      {
        content = content + new String(buff, 0, bytes, chset) ;
      }
    }
    catch (IOException ex)
    {
      System.out.println ("Виникла помилка під час читання потоку: " + ex) ;
      return ;
    }
    
    System.out.println ("Контент, який знаходиться за адресою: " + gurl.toString()) ;
    System.out.println ("Наступний: " + content) ;
  }
}
Після компілювання і виконання попередньої програми в вікні терміналу можна отримати наступний результат (код знаходиться у файлі “MainClass.java”): Java_URL_class_url_content_download_sample_output