Обработка URL в Java

URL (Uniform Resource Locator), также известный как веб-адрес, представляет ресурсы в Интернете, такие как веб-страницы или FTP-адреса.

В этом разделе мы расскажем, как Java обрабатывает URL. URL можно разделить на следующие части.

protocol://host:port/path?query#fragment

Протокол может быть HTTP, HTTPS, FTP и File; порт — это номер порта; путь — это путь к файлу и имя файла.

Пример URL с протоколом HTTP выглядит следующим образом:

http://www.example.com/index.html?language=cn#j2se

Разбор URL:

  • Протокол:http
  • Хост (host:port):www.example.com
  • Номер порта:80. В приведённом выше примере URL порт не указан, так как номер порта по умолчанию для протокола HTTP — 80.
  • Путь к файлу (path):/index.html
  • Параметры запроса (query):language=cn
  • Фрагмент (fragment):j2se, указывающий положение HTML-элемента с атрибутом id j2se на веб-странице.

Методы класса URL

Класс URL определён в пакете java.net и используется для работы с содержимым, связанным с URL. Создание и использование класса URL рассматриваются отдельно ниже.

java.net.URL предоставляет различные способы создания URL, а ресурсы можно получать через java.net.URL.

Нет.Описание метода
1public URL(String protocol, String host, int port, String file) throws MalformedURLException.
Создаёт URL, используя заданные параметры (протокол, имя хоста, номер порта, имя файла).
2public URL(String protocol, String host, String file) throws MalformedURLException
Создаёт URL, используя указанный протокол, имя хоста и имя файла, с использованием порта по умолчанию для протокола.
3public URL(String url) throws MalformedURLException
Создаёт URL из заданной строки URL.
4public URL(URL context, String url) throws MalformedURLException
Создаёт с использованием базового адреса и относительного URL.

Класс URL содержит множество методов для доступа к различным частям URL. Конкретные методы и описания приведены ниже:

Нет.Описание метода
1public String getPath()
Возвращает часть URL, представляющую путь.
2public String getQuery()
Возвращает часть URL, представляющую запрос.
3public String getAuthority()
Получает authority-часть данного URL.
4public int getPort()
Возвращает часть URL, представляющую порт.
5public int getDefaultPort()
Возвращает номер порта по умолчанию для протокола.
6public String getProtocol()
Возвращает протокол URL.
7public String getHost()
Возвращает хост URL.
8public String getFile()
Возвращает часть URL, содержащую имя файла.
9public String getRef()
Получает якорь (также называемый "ссылкой") этого URL.
10public URLConnection openConnection() throws IOException
Открывает соединение с URL и запускает клиент для доступа к ресурсу.

Пример

Приведённый выше пример демонстрирует использование класса URL из java.net для получения различных параметров частей URL:

URLDemo.java

import java.net.*; import java.io.*; public class URLDemo { public static void main(String [] args) { try { URL url = new URL("http://www.example.com/index.html?language=cn#j2se"); System.out.println("URL:" + url.toString()); System.out.println("Протокол:" + url.getProtocol()); System.out.println("Authority:" + url.getAuthority()); System.out.println("Имя файла и параметры запроса:" + url.getFile()); System.out.println("Имя хоста:" + url.getHost()); System.out.println("Путь:" + url.getPath()); System.out.println("Порт:" + url.getPort()); System.out.println("Порт по умолчанию:" + url.getDefaultPort()); System.out.println("Параметры запроса:" + url.getQuery()); System.out.println("Фрагмент:" + url.getRef()); }catch(IOException e) { e.printStackTrace(); } } }

Результат компиляции и выполнения приведенного выше примера выглядит следующим образом:

URL 为:http://www.example.com/index.html?language=cn#j2se
协议为:http
验证信息:www.example.com
文件名及请求参数:/index.html?language=cn
主机名:www.example.com
路径:/index.html
端口:-1
默认端口:80
请求参数:language=cn
定位位置:j2se

URLConnections Методы класса

openConnection() возвращает java.net.URLConnection.

Например:

  • Если вы подключаетесь к URL по протоколу HTTP, метод openConnection() возвращает объект HttpURLConnection.

  • Если URL, к которому вы подключаетесь, является JAR-файлом, метод openConnection() вернёт объект JarURLConnection.

  • И так далее...

Список методов URLConnection выглядит следующим образом:

Нет.Описание метода
1Object getContent()
Извлекает содержимое ссылки URL.
2Object getContent(Class[] classes)
Извлекает содержимое ссылки URL.
3String getContentEncoding()
Возвращает значение поля заголовка content-encoding.
4int getContentLength()
Возвращает значение поля заголовка content-length.
5String getContentType()
Возвращает значение поля заголовка content-type.
6int getLastModified()
Возвращает значение последнего
7long getExpiration()
Возвращает значение заголовка expires.
8long getIfModifiedSince()
Возвращает значение поля ifModifiedSince объекта.
9public void setDoInput(boolean input)
Соединение URL можно использовать для ввода и/или вывода. Если вы собираетесь использовать соединение URL для ввода, установите флаг DoInput в true; если не собираетесь его использовать, установите его в false. Значение по умолчанию — true.
10public void setDoOutput(boolean output)
Соединение URL можно использовать для ввода и/или вывода. Если вы собираетесь использовать соединение URL для вывода, установите флаг DoOutput в true; если не собираетесь его использовать, установите его в false. Значение по умолчанию — true.
11public InputStream getInputStream() throws IOException
Возвращает входной поток URL, используемый для чтения ресурсов.
12public OutputStream getOutputStream() throws IOException
Возвращает выходной поток URL, используемый для записи ресурсов.
13public URL getURL()
Возвращает URL, к которому подключён объект URLConnection.

Пример

В следующем примере URL использует протокол HTTP. openConnection возвращает объект HttpURLConnection.

URLConnDemo.java

import java.net.*; import java.io.*; public class URLConnDemo { public static void main(String [] args) { try { URL url = new URL("http://www.example.com"); URLConnection urlConnection = url.openConnection(); HttpURLConnection connection = null; if(urlConnection instanceof HttpURLConnection) { connection = (HttpURLConnection) urlConnection; } else { System.out.println("Пожалуйста, введите URL-адрес."); return; } BufferedReader in = new BufferedReader( new InputStreamReader(connection.getInputStream())); String urlString = ""; String current; while((current = in.readLine()) != null) { urlString += current; } System.out.println(urlString); }catch(IOException e) { e.printStackTrace(); } } }

Результат компиляции и выполнения приведенного выше примера выглядит следующим образом:

$ javac URLConnDemo.java 
$ java URLConnDemo
.....这里会输出Example首页(http://www.example.com)的 HTML 内容.....
Другие расширения