Forskjellen mellom URL og URI

1. Oversikt

I denne korte artikkelen tar vi en titt på hovedforskjellene mellom URI-er og URL-er og implementerer eksempler for å markere disse forskjellene.

2. URI og URL

Forskjellen mellom dem er rett etter å ha kjent definisjonene deres:

  • Uniform Resource Identifier (URI) - en sekvens av tegn som tillater fullstendig identifikasjon av enhver abstrakt eller fysisk ressurs
  • Uniform Resource Locator (URL) - et delsett av URI som, i tillegg til å identifisere hvor en ressurs er tilgjengelig, beskriver den primære mekanismen for å få tilgang til den

Nå kan vi konkludere med at hver URL er en URI, men det motsatte er ikke sant, som vi får se senere.

2.1. Syntaks

Hver URI, uansett om det er en URL eller ikke, følger et bestemt skjema:

skjema: [// autoritet] [/ sti] [? spørring] [# fragment]

Hvor hver del er beskrevet som følger:

  • ordningen - for URL-er, er navnet på protokollen som brukes for å få tilgang til ressursen, for andre URI-er, er et navn som refererer til en spesifikasjon for tildeling av identifikatorer innenfor den ordningen
  • autoritet- en valgfri del som består av brukerautentiseringsinformasjon, en vert og en valgfri port
  • sti - den tjener til å identifisere en ressurs innenfor rammen av dens ordningen og autoritet
  • spørsmål - tilleggsdata som sammen med sti, tjener til å identifisere en ressurs. For URL-er er dette spørringsstrengen
  • fragment - en valgfri identifikator for en bestemt del av ressursen

For å enkelt identifisere om en bestemt URI også er en URL, kan vi sjekke ordningen. Hver URL må begynne med noen av disse ordningene: ftp, http, https,gopher, mailto, nyheter, nntp, telnet, wais, fil, eller velvære. Hvis det ikke begynner med det, er det ikke en URL.

Nå som vi vet syntaksen, la oss se på noen eksempler. Her er en liste over URI-er, der bare de tre første er URL-er:

ftp://ftp.is.co.za/rfc/rfc1808.txt //tools.ietf.org/html/rfc3986 mailto: [email protected] tlf: + 1-816-555-1212 urn: oasis: navn: docbook: dtd: xml: 4.1 urn: isbn: 1234567890

3. URI og URL Java API forskjeller

I denne delen vil vi demonstrere med eksempler de viktigste forskjellene mellom URI og URL klasser levert av Java.

3.1. Instantiering

Å skape URI og URL Forekomster er veldig like, begge klassene gir flere konstruktører som aksepterer de fleste av dens deler, men bare URI klasse har en konstruktør til å spesifisere alle deler av syntaksen:

@Test offentlig ugyldig nårCreatingURIs_thenSameInfo () kaster unntak {URI firstURI = new URI ("somescheme: // theuser: [email protected]: 80" + "/ some / path? Thequery # somefragment"); URI secondURI = ny URI ("somescheme", "theuser: thepassword", "someuthority", 80, "/ some / path", "the query", "somefragment"); assertEquals (firstURI.getScheme (), secondURI.getScheme ()); assertEquals (firstURI.getPath (), secondURI.getPath ()); } @Test offentlig ugyldig nårCreatingURLs_thenSameInfo () kaster unntak {URL firstURL = ny URL ("// theuser: [email protected]: 80" + "/ path / to / file? Thequery # somefragment"); URL secondURL = ny URL ("http", "somehost", 80, "/ path / to / file"); assertEquals (firstURL.getHost (), secondURL.getHost ()); assertEquals (firstURL.getPath (), secondURL.getPath ()); }

De URI klasse gir også en verktøymetode for å opprette en ny forekomst som ikke kaster et avkrysset unntak:

@Test offentlig ugyldig nårCreatingURI_thenCorrect () {URI uri = URI.create ("urn: isbn: 1234567890"); assertNotNull (uri); }

De URL klasse gir ikke slik metode.

Siden en URL må starte med en av de tidligere nevnte ordningene, vil det å prøve å opprette et objekt med en annen resultere i et unntak:

@Test (forventet = MalformedURLException.class) offentlig ugyldig nårCreatingURLs_thenException () kaster Unntak {URL theURL = ny URL ("otherprotocol: // somehost / path / to / file"); assertNotNull (theURL); }

Det er andre konstruktører i begge klasser, for å oppdage dem alle, se URI og URL-dokumentasjon.

3.2. Konvertering mellom URI- og URL-forekomster

Konvertering mellom URI og URL er ganske grei:

@Test offentlig ugyldighet gittObjects_whenConverting_thenCorrect () kaster MalformedURLException, URISyntaxException {String aURIString = "// somehost: 80 / path? Thequery"; URI uri = ny URI (aURIString); URL url = ny URL (aURIString); URL toURL = uri.toURL (); URI toURI = url.toURI (); assertNotNull (url); assertNotNull (uri); assertEquals (toURL.toString (), toURI.toString ()); }

Å prøve å konvertere en URI som ikke er URL, resulterer imidlertid i et unntak:

@Test (forventet = MalformedURLException.class) offentlig ugyldig gittURI_whenConvertingToURL_thenException () kaster MalformedURLException, URISyntaxException {URI uri = new URI ("somescheme: // someauthority / path? The query"); URL url = uri.toURL (); assertNotNull (url); }

3.3. Åpne en ekstern tilkobling

Siden en URL er en gyldig referanse til en ekstern ressurs, gir Java metoder for å åpne en forbindelse til den ressursen og få innholdet:

@Test offentlig ugyldig gittURL_whenGettingContents_thenCorrect () kaster MalformedURLException, IOException {URL url = new URL ("// courses.baeldung.com"); Strenginnhold = IOUtils.toString (url.openStream ()); assertTrue (contents.contains ("")); }

4. Konklusjon

I denne raske artikkelen presenterte vi noen få eksempler for å demonstrere forskjellene mellom URI og URL i Java.

Vi la vekt på forskjellene når vi opprettet forekomster av begge objektene og mens vi konverterte det ene objektet til det andre. Vi viste også at a URL har metoder for å åpne en ekstern tilkobling til den spisse ressursen.

Som alltid kan fullstendig kildekode for denne artikkelen finnes på Github.


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