Különbség az URL és az URI között

1. Áttekintés

Ebben a rövid cikkben megvizsgáljuk az URI-k és az URL-ek közötti főbb különbségeket, és példákat mutatunk be e különbségek kiemelésére.

2. URI és URL

A különbség köztük egyértelmű a definícióik ismerete után:

  • Egységes erőforrás-azonosító (URI) - karaktersorozat, amely lehetővé teszi bármely absztrakt vagy fizikai erőforrás teljes azonosítását
  • Egységes erőforrás-kereső (URL) - az URI részhalmaza, amely az erőforrások elérhetőségének azonosításán túl leírja az elsődleges hozzáférési mechanizmust

Most arra a következtetésre juthatunk, hogy minden URL URI, de az ellenkezője nem igaz, mint később látni fogjuk.

2.1. Szintaxis

Minden URI, függetlenül attól, hogy URL-e vagy sem, egy adott űrlapot követ:

séma: [// hatóság] [/ elérési út] [? lekérdezés] [# töredék]

Ahol az egyes részeket a következőképpen írják le:

  • rendszer - URL-ek esetén az erőforráshoz való hozzáféréshez használt protokoll neve, más URI-k esetében, olyan név, amely az adott sémán belüli azonosítók hozzárendelésére vonatkozó specifikációra utal
  • hatóság- egy opcionális rész, amely a felhasználó hitelesítési információiból, egy gazdagépből és egy opcionális portból áll
  • pálya - egy erőforrás azonosítását szolgálja annak hatókörében rendszer és hatóság
  • lekérdezés - további adatok, amelyek a pálya, egy erőforrás azonosítására szolgál. Az URL-eknél ez a lekérdezési karakterlánc
  • töredék - választható azonosító az erőforrás egy bizonyos részére

Annak megkönnyítésére, hogy egy adott URI egyben URL is legyen-e, ellenőrizhetjük annak sémáját. Minden URL-nek a következő sémákkal kell kezdődnie: ftp, http, https,hörcsög, mailto, hírek, nntp, telnet, wais, fájl, vagy prospero. Ha nem ezzel kezdődik, akkor nem URL.

Most, hogy ismerjük a szintaxist, nézzünk meg néhány példát. Itt található az URI-k listája, ahol csak az első három URL:

ftp://ftp.is.co.za/rfc/rfc1808.txt //tools.ietf.org/html/rfc3986 mailto: [e-mail védett] tel: + 1-816-555-1212 urn: oázis: nevek: docbook: dtd: xml: 4.1 urn: isbn: 1234567890

3. URI és URL Java API különbségek

Ebben a részben példákkal mutatjuk be a fő különbségeket a URI és URL osztályok által biztosított Java.

3.1. Azonnali beavatkozás

Teremtés URI és URL példányok nagyon hasonlóak, mindkét osztály több konstruktort kínál, amelyek elfogadják a legtöbb részét, azonban csak a URI osztályban van egy konstruktor, amely megadja a szintaxis minden részét:

@Test public void whenCreatingURIs_thenSameInfo () dobja az {URI firstURI = új URI kivételt ("somescheme: // theuser: [email protected]: 80" + "/ some / path? Thequery # somefragment"); URI secondURI = új URI ("somescheme", "theuser: thepassword", "someuthority", 80, "/ some / path", "thequery", "somefragment"); assertEquals (firstURI.getScheme (), secondURI.getScheme ()); assertEquals (firstURI.getPath (), secondURI.getPath ()); } @Test public void, amikor az URL létrehozása az URL létrehozásakor URL URLURURL = új URL ("// felhasználó: [e-mail védett]: 80" + "/ elérési út / fájl / thequery # somefragment"); URL secondURL = új URL ("http", "somehost", 80, "/ path / to / file"); assertEquals (firstURL.getHost (), secondURL.getHost ()); assertEquals (firstURL.getPath (), secondURL.getPath ()); }

A URI Az class egy segédprogram-metódust is biztosít egy új példány létrehozásához, amely nem dob be ellenőrzött kivételt:

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

A URL osztály nem nyújt ilyen módszert.

Mivel az URL-nek a korábban említett sémák egyikével kell kezdődnie, egy objektum létrehozása egy másikkal kivételhez vezet:

A @Test (várható = rosszul formáltURLException.class) public void, amikor az URL létrehozása a (z) URL létrehozásakor a (z) URL kivétel az URL URL (URL: a másik URL: "somprostocol: // somehost / path / to / file"); assertNotNull (theURL); }

Mindkét osztályban léteznek más kivitelezők, amelyek mindegyikének felfedezéséhez olvassa el az URI és az URL dokumentációját.

3.2. Konvertálás URI és URL példányok között

Az URI és az URL közötti konvertálás meglehetősen egyszerű:

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

A nem URL-es URI konvertálása azonban kivételt eredményez:

@Test (várható = MalformedURLException.class) public void givenURI_whenConvertingToURL_thenException () dob MalformedURLException, URISyntaxException {URI uri = new URI ("somescheme: // someauthority / path? Thequery"); URL url = uri.toURL (); assertNotNull (url); }

3.3. Távoli kapcsolat megnyitása

Mivel az URL érvényes hivatkozás egy távoli erőforrásra, a Java módszereket kínál az erőforrással való kapcsolat megnyitására és annak tartalmának megszerzésére:

@Test public void givenURL_whenGettingContents_thenCorrect () dobja a MalformedURLException, IOException {URL url = új URL ("// courses.baeldung.com"); Karaktersorozat tartalma = IOUtils.toString (url.openStream ()); assertTrue (tartalom.tartalmaz ("")); }

4. Következtetés

Ebben a gyors cikkben bemutattunk néhány példát a különbségek bemutatására URI és URL Java-ban.

Kiemeltük a különbségeket mindkét objektum példányainak létrehozásakor és az egyik objektum átalakításakor a másikba. Megmutattuk azt is, hogy a URL rendelkezik módszerekkel a távoli kapcsolat megnyitására a hegyes erőforrással.

Mint mindig, a cikk teljes forráskódja megtalálható a Github oldalon.