Rozdiel medzi URL a URI

1. Prehľad

V tomto krátkom článku sa pozrieme na hlavné rozdiely medzi URI a URL a implementujeme príklady na zvýraznenie týchto rozdielov.

2. URI a URL

Rozdiel medzi nimi je priamy po poznaní ich definícií:

  • Jednotný identifikátor zdroja (URI) - postupnosť znakov, ktorá umožňuje úplnú identifikáciu akéhokoľvek abstraktného alebo fyzického zdroja
  • Uniform Resource Locator (URL) - podmnožina URI, ktorá okrem identifikácie miesta, kde je zdroj k dispozícii, popisuje primárny mechanizmus prístupu k nemu

Teraz môžeme dospieť k záveru, že každá adresa URL je URI, ale opak nie je pravdou, ako uvidíme neskôr.

2.1. Syntax

Každý URI, bez ohľadu na to, či je to URL, alebo nie, sleduje určitú formu:

schéma: [// autorita] [/ cesta] [? dopyt] [# fragment]

Kde je každá časť opísaná takto:

  • schéma - v prípade adries URL je názov protokolu použitého na prístup k prostriedku, v prípade iných identifikátorov URI je to názov, ktorý odkazuje na špecifikáciu priraďovania identifikátorov v rámci tejto schémy.
  • orgánu- voliteľná časť pozostávajúca z overovacích informácií používateľa, hostiteľa a voliteľného portu
  • cesta - slúži na identifikáciu zdroja v rozsahu jeho rozsahu schéma a orgánu
  • dopyt - ďalšie údaje, ktoré spolu s cesta, slúži na identifikáciu zdroja. Pre adresy URL je to reťazec dopytu
  • fragment - voliteľný identifikátor konkrétnej časti zdroja

Aby sme ľahko zistili, či je konkrétny URI tiež URL, môžeme skontrolovať jeho schému. Každá adresa URL musí začínať niektorou z týchto schém: ftp, http, https,gopher, mailto, novinky, nntp, telnet, wais, spisalebo prospero. Ak to nezačína, nejde o adresu URL.

Teraz, keď poznáme syntax, sa pozrime na niekoľko príkladov. Tu je zoznam URI, kde iba prvé tri sú adresy URL:

ftp://ftp.is.co.za/rfc/rfc1808.txt //tools.ietf.org/html/rfc3986 mailto: [chránený e-mailom] tel: + 1-816-555-1212 urna: oáza: mená: docbook: dtd: xml: 4.1 urn: isbn: 1234567890

3. Rozdiely URI a URL Java API

V tejto časti ukážeme na príkladoch hlavné rozdiely medzi URI a URL triedy poskytované jazykom Java.

3.1. Instancia

Tvorenie URI a URL inštancie sú veľmi podobné, obe triedy poskytujú niekoľko konštruktorov, ktoré akceptujú väčšinu jej častí, avšak iba URI trieda má konštruktor na určenie všetkých častí syntaxe:

@ Test public void whenCreatingURIs_thenSameInfo () vyvolá výnimku {URI firstURI = nový URI ("somescheme: // theuser: [email protected]: 80" + "/ some / path? Thequery # somefragment"); URI secondURI = nový URI ("somescheme", "theuser: thepassword", "someuthority", 80, "/ some / path", "thequery", "somefragment"); assertEquals (firstURI.getScheme (), secondURI.getScheme ()); assertEquals (firstURI.getPath (), secondURI.getPath ()); } @Test public void whenCreatingURLs_thenSameInfo () throws Exception {URL firstURL = new URL ("// theuser: [email protected]: 80" + "/ path / to / file? Thequery # somefragment"); URL secondURL = nová URL ("http", "somehost", 80, "/ cesta / k / súboru"); assertEquals (firstURL.getHost (), secondURL.getHost ()); assertEquals (firstURL.getPath (), secondURL.getPath ()); }

The URI trieda tiež poskytuje nástrojovú metódu na vytvorenie novej inštancie, ktorá nevyvolá kontrolovanú výnimku:

@Test public void whenCreatingURI_thenCorrect () {URI uri = URI.create ("urn: isbn: 1234567890"); assertNotNull (uri); }

The URL triedy takúto metódu neposkytuje.

Pretože adresa URL musí začínať jednou z vyššie uvedených schém, pokus o vytvorenie objektu s inou bude mať za následok výnimku:

@ Test (očakáva sa = MalformedURLException.class) public void whenCreatingURLs_thenException () vyvolá výnimku {URL theURL = nová URL ("otherprotocol: // somehost / path / to / file"); assertNotNull (theURL); }

V oboch triedach sú aj iné konštruktory. Ak ich chcete nájsť všetky, prečítajte si dokumentáciu URI a URL.

3.2. Konverzia medzi inštanciami URI a URL

Konverzia medzi URI a URL je dosť jednoduchá:

@ Test public void givenObjects_whenConverting_thenCorrect () vyvolá MalformedURLException, URISyntaxException {String aURIString = "// somehost: 80 / path? Thequery"; URI uri = nový URI (aURIString); URL URL = nová URL (aURIString); URL toURL = uri.toURL (); URI toURI = url.toURI (); assertNotNull (url); assertNotNull (uri); assertEquals (toURL.toString (), toURI.toString ()); }

Pokus o prevod URI, ktorý nie je adresou URL, však spôsobí výnimku:

@Test (očakáva sa = MalformedURLException.class) public void givenURI_whenConvertingToURL_thenException () vyvolá MalformedURLException, URISyntaxException {URI uri = nový URI ("somescheme: // someauthority / path? Thequery"); URL url = uri.toURL (); assertNotNull (url); }

3.3. Otvorenie vzdialeného pripojenia

Pretože URL je platný odkaz na vzdialený prostriedok, Java poskytuje spôsoby otvorenia spojenia s týmto prostriedkom a získania jeho obsahu:

@ Test public void givenURL_whenGettingContents_thenCorrect () vyvolá MalformedURLException, IOException {URL url = nová URL ("// courses.baeldung.com"); Obsah reťazca = IOUtils.toString (url.openStream ()); assertTrue (contents.contains ("")); }

4. Záver

V tomto rýchlom článku sme predstavili niekoľko príkladov na demonštráciu rozdielov medzi nimi URI a URL v Jave.

Rozdiely sme zvýraznili pri vytváraní inštancií oboch objektov a pri prevode jedného objektu na druhý. Ukázali sme tiež, že a URL má metódy na otvorenie vzdialeného pripojenia k zaostrenému prostriedku.

Kompletný zdrojový kód tohto článku nájdete ako vždy na serveri Github.


$config[zx-auto] not found$config[zx-overlay] not found