Ръководство за URL адреса на Java

1. Общ преглед

В тази статия ще изследваме операции на ниско ниво с Java мрежово програмиране. Ще разгледаме по-задълбочено URL адресите.

URL адресът е препратка или адрес към ресурс в мрежата. И просто казано, Java кодът, комуникиращ през мрежата, може да използва класа java.net.URL за представяне на адресите на ресурси.

Платформата Java се доставя с вградена мрежова поддръжка, включена в пакета java.net :

import java.net.*;

2. Създаване на URL адрес

Нека първо създадем обект java.net.URL, като използваме неговия конструктор и предадем String, представляващ човешки четлив адрес на ресурса:

URL url = new URL("/a-guide-to-java-sockets");

Току-що създадохме обект на абсолютен URL адрес . Адресът има всички части, необходими за достигане до желания ресурс.

Можем също да създадем относителен URL ; ако приемем, че имаме обекта URL, представляващ началната страница на Baeldung:

URL home = new URL("//baeldung.com");

След това нека създадем нов URL адрес, който сочи към ресурс, който вече познаваме; ще използваме друг конструктор, който взема както съществуващ URL, така и име на ресурс спрямо този URL:

URL url = new URL(home, "a-guide-to-java-sockets");

Сега създадохме нов URL адрес на обект на URL спрямо дома ; така че относителният URL адрес е валиден само в контекста на основния URL адрес.

Можем да видим това в тест:

@Test public void givenBaseUrl_whenCreatesRelativeUrl_thenCorrect() { URL baseUrl = new URL("//baeldung.com"); URL relativeUrl = new URL(baseUrl, "a-guide-to-java-sockets"); assertEquals("//baeldung.com/a-guide-to-java-sockets", relativeUrl.toString()); }

Ако обаче се установи, че относителният URL адрес е абсолютен в съставните му части, тогава baseURL се игнорира:

@Test public void givenAbsoluteUrl_whenIgnoresBaseUrl_thenCorrect() { URL baseUrl = new URL("//baeldung.com"); URL relativeUrl = new URL( baseUrl, "/a-guide-to-java-sockets"); assertEquals("//baeldung.com/a-guide-to-java-sockets", relativeUrl.toString()); }

И накрая, можем да създадем URL, като извикаме друг конструктор, който приема компонентите на низа на URL. Ще разгледаме това в следващия раздел, след като обхванем URL компонентите.

3. URL компоненти

URL адресът се състои от няколко компонента - които ще разгледаме в този раздел.

Нека първо разгледаме разделянето между идентификатора на протокола и ресурса - тези два компонента са разделени с двоеточие, последвано от две наклонени черти, т.е .: //.

Ако имаме URL адрес като //baeldung.com, тогава частта преди разделителя, http, е идентификаторът на протокола, докато този, който следва, е името на ресурса, baeldung.com .

Нека да разгледаме API, който URL обектът излага.

3.1. Протоколът

За да извлечем протокола - използваме метода getProtocol () :

@Test public void givenUrl_whenCanIdentifyProtocol_thenCorrect(){ URL url = new URL("//baeldung.com"); assertEquals("http", url.getProtocol()); }

3.2. Пристанището

За да получим порта - използваме метода getPort () :

@Test public void givenUrl_whenGetsDefaultPort_thenCorrect(){ URL url = new URL("//baeldung.com"); assertEquals(-1, url.getPort()); assertEquals(80, url.getDefaultPort()); }

Имайте предвид, че този метод извлича изрично дефинирания порт. Ако нито един порт не е дефиниран изрично, той ще върне -1.

И тъй като HTTP комуникацията използва порт 80 по подразбиране - не е дефиниран порт.

Ето пример, в който имаме изрично дефиниран порт:

@Test public void givenUrl_whenGetsPort_thenCorrect(){ URL url = new URL("//baeldung.com:8090"); assertEquals(8090, url.getPort()); }

3.3. Домакинът

Хостът е частта от името на ресурса, която започва веднага след разделителя : // и завършва с разширението на името на домейна, в нашия случай .com .

Ние наричаме getHost () метод за извличане на името на хоста:

@Test public void givenUrl_whenCanGetHost_thenCorrect(){ URL url = new URL("//baeldung.com"); assertEquals("baeldung.com", url.getHost()); }

3.4. Името на файла

Каквото следва след името на хоста в URL, се нарича името на файла на ресурса . Той може да включва както параметри на пътя, така и заявка или просто име на файл:

@Test public void givenUrl_whenCanGetFileName_thenCorrect1() { URL url = new URL("//baeldung.com/guidelines.txt"); assertEquals("/guidelines.txt", url.getFile()); }

Ако приемем, че Baeldung има java 8 статии под URL / статии? Topic = java & version = 8 . Всичко след името на хоста е името на файла:

@Test public void givenUrl_whenCanGetFileName_thenCorrect2() { URL url = new URL("//baeldung.com/articles?topic=java&version=8"); assertEquals("/articles?topic=java&version=8", url.getFile()); }

3.5. Параметри на пътя

Също така можем да инспектираме само параметрите на пътя , които в нашия случай са / articles :

@Test public void givenUrl_whenCanGetPathParams_thenCorrect() { URL url = new URL("//baeldung.com/articles?topic=java&version=8"); assertEquals("/articles", url.getPath()); }

3.6. Параметри на заявката

По същия начин можем да проверим параметрите на заявката, която е topic = java & version = 8 :

@Test public void givenUrl_whenCanGetQueryParams_thenCorrect() { URL url = new URL("//baeldung.com/articles?topic=java&version=8"); assertEquals("topic=java&version=8", url.getQuery()); }

4. Създаване на URL адрес с компоненти

Тъй като сега разгледахме различните URL компоненти и тяхното място при формирането на пълния адрес на ресурса, можем да разгледаме друг метод за създаване на URL обект чрез предаване на частите на компонентите.

Първият конструктор взема протокола, името на хоста и името на файла съответно:

@Test public void givenUrlComponents_whenConstructsCompleteUrl_thenCorrect() { String protocol = "http"; String host = "baeldung.com"; String file = "/guidelines.txt"; URL url = new URL(protocol, host, file); assertEquals("//baeldung.com/guidelines.txt", url.toString()); }

Имайте предвид значението на името на файла в този контекст, следният тест трябва да го направи по-ясен:

@Test public void givenUrlComponents_whenConstructsCompleteUrl_thenCorrect2() { String protocol = "http"; String host = "baeldung.com"; String file = "/articles?topic=java&version=8"; URL url = new URL(protocol, host, file); assertEquals("//baeldung.com/articles?topic=java&version=8", url.toString()); }

Вторият конструктор взема протокола, името на хоста, номера на порта и името на файла съответно:

@Test public void givenUrlComponentsWithPort_whenConstructsCompleteUrl_ thenCorrect() { String protocol = "http"; String host = "baeldung.com"; int port = 9000; String file = "/guidelines.txt"; URL url = new URL(protocol, host, port, file); assertEquals( "//baeldung.com:9000/guidelines.txt", url.toString()); }

5. Заключение

В този урок разгледахме класа на URL и показахме как да го използваме в Java за програмен достъп до мрежовите ресурси.

Както винаги, пълният изходен код за статията и всички кодови фрагменти могат да бъдат намерени в проекта GitHub.