En guide til Java URL

1. Oversigt

I denne artikel skal vi udforske operationer på lavt niveau med Java-netværksprogrammering. Vi kigger dybere på webadresser.

En URL er en reference eller en adresse til en ressource på netværket. Og enkelt sagt, Java-kode, der kommunikerer over netværket, kan bruge java.net.URL klasse til at repræsentere adresserne på ressourcerne.

Java-platformen leveres med indbygget netværkssupport, samlet i java.net pakke:

import java.net. *;

2. Oprettelse af en URL

Lad os først oprette en java.net.URL objekt ved at bruge dens konstruktør og videresende en streng, der repræsenterer ressourceens menneskelige læsbare adresse:

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

Vi har lige oprettet en absolut URL-objekt. Adressen har alle de nødvendige dele for at nå den ønskede ressource.

Vi kan også skabe en relativ URL; forudsat at vi har URL-objektet, der repræsenterer Baeldungs ​​startside:

URL hjem = ny URL ("// baeldung.com");

Lad os derefter oprette en ny URL, der peger på en ressource, vi allerede kender; vi bruger en anden konstruktør, der tager både en eksisterende URL og et ressourcenavn i forhold til den URL:

URL url = ny URL (hjem, "a-guide-to-java-sockets");

Vi har nu oprettet et nyt URL-objekt url i forhold til hjem; så den relative URL er kun gyldig inden for sammenhængen med basis-URL'en.

Vi kan se dette i en test:

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

Men hvis den relative URL registreres for at være absolut i dens komponentdele, så baseURL ignoreres:

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

Endelig kan vi oprette en URL ved at ringe til en anden konstruktør, der tager komponenter i URL-strengen ind. Vi vil dække dette i det næste afsnit efter at have dækket URL-komponenter.

3. URL-komponenter

En URL består af et par komponenter - som vi vil undersøge i dette afsnit.

Lad os først se på adskillelsen mellem protokolidentifikatoren og ressourcen - disse to komponenter er adskilt af et kolon efterfulgt af to skråstreg fremad, dvs. ://.

Hvis vi har en URL som f.eks //baeldung.com derefter delen før separatoren, http, er protokolidentifikatoren, mens den der følger er ressourcenavnet, baeldung.com.

Lad os se på den API, som URL objekt afslører.

3.1. Protokollen

At hente protokollen - vi bruger getProtocol () metode:

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

3.2. Havnen

At få havnen - vi bruger getPort () metode:

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

Bemærk, at denne metode henter den eksplicit definerede port. Hvis der ikke er defineret nogen port eksplicit, returnerer den -1.

Og fordi HTTP-kommunikation bruger port 80 som standard - er ingen port defineret.

Her er et eksempel, hvor vi har en eksplicit defineret port:

@Test offentlig ugyldighed givenUrl_whenGetsPort_thenCorrect () {URL url = ny URL ("// baeldung.com:8090"); assertEquals (8090, url.getPort ()); }

3.3. Værten

Værten er den del af ressourcenavnet, der starter lige efter :// separator og ender med domænenavnudvidelsen, i vores tilfælde .com.

Vi kalder getHost () metode til at hente værtsnavnet:

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

3.4. Filnavnet

Uanset hvad der følger efter værtsnavnet i en URL kaldes ressourceens filnavn. Det kan omfatte både sti- og forespørgselsparametre eller bare et filnavn:

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

Forudsat at Baeldung har java 8 artikler under URL'en / articles? topic = java & version = 8. Alt efter værtsnavnet er filnavnet:

@Test offentlig ugyldighed givetUrl_whenCanGetFileName_thenCorrect2 () {URL url = ny URL ("// baeldung.com/articles?topic=java&version=8"); assertEquals ("/ articles? topic = java & version = 8", url.getFile ()); }

3.5. Sti-parametre

Vi kan også kun inspicere stien parametre, som i vores tilfælde er /artikler:

@Test offentligt ugyldigt givetUrl_whenCanGetPathParams_thenCorrect () {URL url = ny URL ("// baeldung.com/articles?topic=java&version=8"); assertEquals ("/ articles", url.getPath ()); }

3.6. Forespørgselsparametre

Ligeledes kan vi inspicere forespørgselsparametrene som er emne = java & version = 8:

@Test offentlig ugyldighed givetUrl_whenCanGetQueryParams_thenCorrect () {URL url = ny URL ("// baeldung.com/articles?topic=java& version = 8"); assertEquals (" topic = java& version = 8", url.getQuery ());}

4. Oprettelse af URL med komponentdele

Da vi nu har set på de forskellige URL-komponenter og deres plads i dannelsen af ​​den komplette adresse til ressourcen, kan vi se på en anden metode til at oprette et URL-objekt ved at videregive komponentdelene.

Den første konstruktør tager henholdsvis protokollen, værtsnavnet og filnavnet:

@Test offentligt ugyldigt givenUrlComponents_whenConstructsCompleteUrl_thenCorrect () {String protocol = "http"; String vært = "baeldung.com"; Strengfil = "/guidelines.txt"; URL url = ny URL (protokol, vært, fil); assertEquals ("// baeldung.com/guidelines.txt", url.toString ()); }

Husk betydningen af ​​filnavn i denne sammenhæng, den følgende test skal gøre det tydeligere:

@Test offentligt ugyldigt givenUrlComponents_whenConstructsCompleteUrl_thenCorrect2 () {String protocol = "http"; String vært = "baeldung.com"; String file = "/ articles? Topic = java & version = 8"; URL url = ny URL (protokol, vært, fil); assertEquals ("// baeldung.com/articles?topic=java&version=8", url.toString ()); }

Den anden konstruktør tager henholdsvis protokollen, værtsnavnet, portnummeret og filnavnet:

@Test offentligt ugyldigt givenUrlComponentsWithPort_whenConstructsCompleteUrl_ thenCorrect () {String protocol = "http"; String vært = "baeldung.com"; int-port = 9000; Strengfil = "/guidelines.txt"; URL url = ny URL (protokol, vært, port, fil); assertEquals ("//baeldung.com:9000/guidelines.txt", url.toString ()); }

5. Konklusion

I denne vejledning dækkede vi URL klasse og viste, hvordan man bruger det i Java til at få adgang til netværksressourcer programmatisk.

Som altid kan den fulde kildekode til artiklen og alle kodestykker findes i GitHub-projektet.


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