Distribuere webapplikasjoner i brygge

1. Oversikt

I denne artikkelen vil vi gjøre en rask oversikt over Jetty-webserveren og deretter dekke ulike tilnærminger for distribusjon av en WAR-fil.

Jetty er en åpen kildekode Java HTTP-webserver og en servletcontainer. Brygge brukes oftere i maskin til maskinkommunikasjon i Java-økosystemet.

2. Prosjektoppsett

Den siste versjonen av Jetty kan alltid lastes ned ved å følge denne lenken. Vi vil lage en veldig grunnleggende Java-webapplikasjon fra kommandolinjen med Maven, som vi vil bruke til eksemplene våre.

I denne artikkelen bruker vi Jetty 9.x, den siste versjonen for øyeblikket.

La oss gå over til konsollen vår, navigere til vårt valgte sted og kjøre følgende kommando:

mvn arketype: generer -DgroupId = com.baeldung -DartifactId = jetty-app -DarchetypeArtifactId = maven-arketype-webapp -DinteractiveMode = false

Denne kommandoen vil opprette en komplett Java-webapp i en ny brygge-app mappen på vår nåværende plassering. Det er bare en av mange måter å lage et Java-program med Maven på, og det passer vårt formål.

Siden vi skal håndtere WAR-filer, la oss navigere til prosjektroten og bygge den:

cd bryggeapp

Bygge med Maven:

mvn-pakke

Deretter brygge-app. krig vil bli opprettet på stedet brygge-app / target / jetty-app.war.

3. Bryggestruktur

Kontekststi. Henviser til stedet som er relativt til serverens adresse og representerer navnet på webapplikasjonen.

For eksempel hvis webapplikasjonen vår blir satt under $ JETTY_HOME \ webapps \ myapp katalogen, får du tilgang til den via URL-en // localhost / myapp, og dens kontekststi vil være / myapp.

KRIG. Er utvidelsen av en fil som pakker et hierarki for webapplikasjon i ZIP-format og er en forkortelse for Web Archive. Java-webapplikasjoner er vanligvis pakket som WAR-filer for distribusjon. WAR-filer kan opprettes på kommandolinjen eller med en IDE som Eclipse.

4. Implementering ved å kopiere WAR

Den enkleste måten å distribuere et webapplikasjon til Jetty-serveren er sannsynligvis ved å kopiere WAR-filen til $ JETTY_HOME / webapps katalog.

Etter kopiering kan vi starte serveren ved å navigere til $ JETTY_HOME og kjører kommandoen:

java -jar start.jar

Brygge vil skanne $ JETTY_HOME / webapps katalog ved oppstart for webapplikasjoner å distribuere. Den nye appen vår blir distribuert på / brygge-app kontekst.

Når vi laster inn URL-en // localhost: 8080 / brygge-app fra nettleseren, bør vi se appen vår kjører med Hei Verden! skrives ut på skjermen.

5. Implementering ved hjelp av kontekstfil

Bryggeserver tilbyr oss en måte å distribuere et webarkiv plassert hvor som helst i filsystemet ved at vi oppretter en kontekstfil for det.

På denne måten, selv om WAR-filen ligger på et skrivebord eller vi har valgt å beholde den brygge-app / mål der Maven plasserer pakken, kan vi bare lage kontekstfilen inne $ JETTY_HOME / webapps.

La oss distribuere brygge-app. krig vi bare distribuert ved å slette den fra webapps. Vi vil da lage brygge-app.xml med følgende kode og plasser den inne webapps:

   / brygge absolutt / sti / til / brygge-app.war 

Denne kontekstfilen må ha samme navn som WAR, med XML-filtype. Legg merke til at vi har satt inn kontekststi tilskrive /brygge. Dette betyr at vi får tilgang til webappen vår fra URL-en // localhost: 8080 / brygge.

Denne evnen til å tilpasse kontekststien er en av de store fordelene med kontekstfiltilnærmingen ved å distribuere WARer i brygge, da noen appnavn kanskje ikke er praktisk for dette formålet.

6. Implementering med Jetty Maven Plugin

6.1. Standard implementering

Bryggens Maven-plugin hjelper oss med rask testing og iterasjon mens vi bygger Java-webapplikasjoner. For å kunne distribuere og kjøre applikasjoner med det, trenger vi bare å legge til plugin-modulen pom.xml:

 org.eclipse.jetty jetty-maven-plugin 9.3.11.v20160721 

Den siste versjonen finner du ved å følge denne Maven-lenken.

Vi må sørge for at vår forekomst av brygge kjører i havn 8080 stoppes før vi utfører neste trinn.

For å distribuere appen vår etter å ha lagt til pluginet, navigerer vi til roten hvor pom.xml er lokalisert og kjører følgende kommando:

mvn brygge: løp

Denne kommandoen oppretter en ny bryggeinstans, og pluginet distribuerer appen til den. Vi får tilgang til den ved å laste den inn // lokal vert: 8080.

Bryggens Maven-plugin skanner kontinuerlig webprosjektet for eventuelle endringer og fortsetter å omplassere det.

6.2. Endring av ContextPath

Fra forrige underavsnitt ble appen distribuert under / kontekst. Imidlertid hvis vi ønsker å distribuere under en gitt kontekstbane som f.eks /brygge som før, må vi konfigurere plugin-modulen annerledes.

Vi vil endre plugin-erklæringen til følgende XML:

 org.eclipse.jetty jetty-maven-plugin 9.3.11.v20160721 / brygge 

Legg merke til hvordan vi har lagt til en konfigurasjonsblokk for å tilpasse distribusjonen ytterligere. Det finnes flere konfigurasjonsalternativer som skal plasseres inne i denne blokken, avhengig av hva man ønsker.

Etter disse endringene kan vi kjøre programtillegget på nytt som før og få tilgang til appen vår gjennom // localhost: 8080 / brygge.

6.3. Endre port

Et scenario man kan møte er et unntak for bruk i havn. Vi kan ha en bryggeinstans som kjører på havnen 8080 for produksjon, men vi er fortsatt i utviklingsfase og ønsker å dra nytte av den lette iterasjonen som følger med distribusjon ved hjelp av Maven-plugin.

I slike tilfeller må vi kjøre testserveren vår på en annen port. La oss endre plugin-konfigurasjonen til følgende XML:

  / brygge 8888 

Når vi kjører Maven-pluginet vårt på nytt, vil vi kunne få tilgang til appen vår fra // localhost: 8888 / brygge.

Det er verdt å merke seg at med Maven-pluginet trenger vi ikke å ha en forekomst av brygge installert og kjøre. Snarere skaper den sin egen bryggeinstans.

7. Distribuere med Jetty Runner

Akkurat som brygge Maven-plugin tilbyr jetty-runner en rask og enkel måte å distribuere og kjøre vår webapp på. Med jetty-runner trenger vi heller ikke å installere og kjøre en separat forekomst av en bryggeserver.

7.1. Jetty Runner Setup

For å bruke jetty-runner i rask distribusjon og kjøring av webappene våre, kan vi laste ned den nyeste versjonen ved å følge denne Maven-lenken.

Med jetty-runner trenger vi bare å plassere den nedlastede krukken hvor som helst og være klar med filsystembanen til webarkivene våre.

Vi kan sende inn konfigurasjonsparametere fra kommandolinjen, samt distribuere mange applikasjoner i forskjellige sammenhenger og bundet til forskjellige porter med bare en kommando.

Jeg har plassert min kai-runner-krukke i samme hierarki som brygge-app katalog. Det er katalogen som inneholder webapplikasjonen vår.

7.2. Grunnleggende distribusjon

La oss distribuere vår krig ved hjelp av jetty-runner:

java -jar jetty-runner-9.4.0.M1.jar jetty-app / target / jetty-app.war

Denne kommandoen, akkurat som tilfellet med Maven-pluginet, oppretter en bryggeinstans og distribuerer den medfølgende krigen til den. WAR-banen kan være en absolutt eller en relativ bane.

Vi kan laste inn dette programmet ved hjelp av // lokal vert: 8080.

7.3. Distribuere med kontekstbane

Å distribuere under /brygge sammenheng som før:

java -jar jetty-runner-9.4.0.M1.jar --path / jetty jetty-app / target / jetty-app.war

Tilgjengelig via // localhost: 8080 / brygge.

7.4. Distribuer på gitt havn

Slik distribuerer du på et gitt portnummer:

java -jar jetty-runner-9.4.0.M1.jar --port 9090 jetty-app / target / jetty-app.war

Tilgjengelig via // lokal vert: 9090.

7.5. Distribuere flere kriger

For å distribuere flere WARer med samme kommando, bruker vi -sti argument for å gjøre hver unik:

java -jar jetty-runner - sti / en en. krig - sti / to to. krig

Vi ville da få tilgang one.war via // localhost: 8080 / en og to. krig via // localhost: 8080 / to.

8. Implementere med Cargo Maven Plugin

Cargo er et allsidig bibliotek som lar oss manipulere forskjellige typer applikasjonsbeholdere på en standard måte.

8.1. Oppsett av lastedistribusjon

I denne delen vil vi se på hvordan du gjør det bruk Cargos Maven-plugin for å distribuere en WAR til bryggen, i dette tilfellet vil vi distribuere en WAR til en Jetty 9.x-forekomst.

For å få et godt grep om hele prosessen, begynner vi fra bunnen av med å lage en ny Java-webapplikasjon fra kommandolinjen:

mvn arketype: generer -DgroupId = com.baeldung -DartifactId = last-distribusjon -DarchetypeArtifactId = maven-arketype-webapp -DinteractiveMode = false

Dette vil opprette et komplett Java-webapplikasjon i last-distribusjon katalog. Hvis vi bygger, distribuerer og laster inn denne applikasjonen som den er, blir den skrevet ut Hei Verden! i nettleseren.

Siden vår webapplikasjon ikke inneholder noen servlets, er vår web.xml filen vil være veldig grunnleggende. Så naviger til WEB-INF mappen til det nyopprettede prosjektet vårt og opprett en web.xml hvis det ikke ble opprettet automatisk ennå med følgende innhold:

  last-deploy index.jsp 

For å gjøre det mulig for Maven å gjenkjenne lastens kommandoer uten å skrive inn det fullstendige navnet, må vi legge til lasten Maven plugin i en plugin-gruppe i Maven's settings.xml.

Som et nærmeste barn av roten element, legg til dette:

 org.codehaus.cargo 

8.2. Lokal distribusjon

I dette underavsnittet vil vi redigere pom.xml som passer til våre nye distribusjonskrav.

Legg til pluginet som følger:

   org.codehaus.cargo cargo-maven2-plugin 1.5.0 jetty9x installert Sett inn absolutt sti til brygge 9 installasjon eksisterende Sett inn absolutt sti til brygge 9 installasjon 

Legg merke til at vi eksplisitt definere emballasjen som en WAR, uten dette, vil vårt bygg mislykkes. I plugins-delen legger vi til lasten maven2 plugin.

Den siste versjonen i skrivende stund er 1.5.0. Den siste versjonen finner du imidlertid alltid her. I tillegg legger vi til en konfigurasjonsdel der vi forteller Maven at vi bruker bryggebeholder og også en eksisterende bryggeinstallasjon.

Ved å sette containertypen til installert, forteller vi Maven at vi har en bryggeinstans installert på maskinen, og vi gir den absolutte URL-en til denne installasjonen.

Ved å sette konfigurasjonstypen til eksisterende, forteller vi Maven at vi har et eksisterende oppsett som vi bruker, og ingen ytterligere konfigurasjon er nødvendig.

Alternativet ville være å be lasten om å laste ned og sette opp Jetty-versjonen spesifisert ved å oppgi en URL. Imidlertid er vårt fokus på WAR distribusjon.

Det er verdt å merke seg at enten vi bruker Maven 2.x eller Maven 3.x, fungerer maven2-plugin for begge deler.

Vi kan nå installere applikasjonen vår ved å utføre:

mvn installere

og distribuer den ved å kjøre:

mvn last: distribuere

Hvis alt går bra i Maven og Jetty-konsollen, bør vi kunne kjøre webapplikasjonen vår ved å laste den inn // localhost: 8080 / lastedistribusjon.

Hvis vi sjekker $ JETTY_HOME / webapps -mappen, vil vi finne en distribusjonsbeskrivelsesfil eller det vi tidligere kalte kontekstfil kalt last-deploy.xml skapt av last.

8.3. Fjerninstallering

Som standard har ikke Jetty muligheter for distribusjon. For å legge til en slik støtte til bryggen, bruker Cargo Fjernbryter for brygge Webapplikasjon.

Hva dette betyr er at vi må laste ned en webapplikasjon WAR pre-laget av Cargo-utviklerne, distribuere denne WAR til målbryggecontaineren.

Hver gang vi ønsker å distribuere til denne eksterne serveren ved hjelp av Maven-plugin, vil den sende en HTTP-forespørsel til distribusjonsapplikasjonen på den eksterne serveren med vår WAR for distribusjon.

Denne eksterne distribusjonen finner du her. Gå over til verktøy delen og laste ned last-brygge-7-og-videre-distribusjon KRIG.

Sikkerhetshensyn

Vi må sette opp en sikkerhetsrike i brygge før dette kan fungere, for autentiseringsformål. Lag en fil som heter realm.properties i $ JETTY_HOME / etc katalog for den eksterne bryggeserveren. Filinnholdet er:

admin: passord, manager

De admin er brukernavnet som klienten kan få tilgang til de sikre appene, passord er passordet og sjef er den rollen klientene må ha før de får tilgang.

Vi må også erklære sikkerhetskravene våre i distribusjonsapplikasjonen. Vi pakker ut KRIGEN vi lastet ned fra bryggesiden, gjør noen endringer og pakker den tilbake i en KRIG.

Etter å ha pakket ut, gå til WEB-INF / web.xml og fjern kommentaren til XML-koden med Kommentarer for å aktivere sikkerhet kommentar. Eller plasser følgende kode der:

  Jetty Remote Deployer / * manager BASIC Test Realm 

Implementering av distribusjonen

Vi kan nå pakke appen tilbake i en WAR og kopiere den til et hvilket som helst sted på den eksterne serveren. Vi vil deretter distribuere den til bryggen.

Under distribusjon er det best å bruke en distribusjonsbeskrivelsesfil slik at vi kan lage en securityHandler og gi den til a loginService. Alle sikrede applikasjoner må ha en påloggingstjeneste, ellers vil bryggen ikke distribuere dem.

La oss nå opprette en kontekstfil i $ JETTY_HOME / webapps i den eksterne bryggeinstansen, husk reglene for å navngi kontekstfilen. Gjør det samme navn som WAR:

   / deployer absolute / path / to / cargo-jetty-deployer.war Test Realm /etc/realm.properties 

Start den eksterne bryggeserveren, og hvis alt går bra, bør vi kunne laste det // localhost: 8080 / cargo-jetty-deployer. Vi skal da kunne se noe sånt som:

HTTP ERROR 400 Problem tilgang / last-brygge-distribusjon /. Årsak: Kommando / er ukjent

Distribuere KRIG til fjerntliggende brygge

For å utføre en ekstern distribusjon trenger vi bare å endre konfigurasjonsdelen av pom.xml. Ekstern distribusjon betyr at vi ikke har en lokal installasjon av brygge, men har godkjent tilgang til distribueringsappen som kjører på den eksterne serveren.

Så la oss endre pom.xml slik at konfigurasjonsdelen ser slik ut:

  jetty9x ekstern kjøretid 127.0.0.1 8080 administratorpassord 

Denne gangen endrer vi containertypen fra installert til fjernkontroll og konfigurasjonstypen fra eksisterende til kjøretid. Til slutt legger vi til vertsnavn-, port- og autentiseringsegenskaper i konfigurasjonen.

rengjør prosjektet:

mvn ren

installer den:

mvn installere

til slutt, distribuere den:

mvn last: distribuere

Det er det.

9. Implementering fra formørkelse

Eclipse lar oss legge inn servere for å legge til webprosjektdistribusjon i normal arbeidsflyt uten å navigere bort fra IDE.

9.1. Legge ned brygge i formørkelse

Vi kan legge inn en bryggeinstallasjon i formørkelse ved å velge vindu element fra oppgavelinjen og deretter preferanser fra rullegardinmenyen.

Vi finner et tre gitter av preferanseelementer på venstre panel i vinduet som vises. Vi kan deretter navigere til formørkelse -> servere eller bare skrive servere i søkefeltet.

Vi velger deretter brygge-katalogen hvis den ikke allerede er åpen for oss, og velger bryggeversjonen vi lastet ned.

På høyre side av panelet vises en konfigurasjonsside der vi velger aktiveringsalternativet for å aktivere denne Jetty-versjonen og bla til installasjonsmappen.

Fra skjermbildene blir brygge 7.x erstattet av versjonen av bryggen vi konfigurerte.

Vi bruker endringer og neste gang vi åpner servervisningen fra eclipse's windows -> show view undermeny, vil den nylig konfigurerte serveren være tilstede, og vi kan starte, stoppe og distribuere applikasjoner til den.

9.2. Implementering av webapplikasjon i innebygd brygge

For å distribuere en webapplikasjon til den innebygde bryggeforekomsten, må den eksistere i vårt arbeidsområde.

Åpne servere visning fra vindu -> vis visning og se etter servere. Når den er åpen, kan vi bare høyreklikke på serveren vi konfigurerte og velge legg til distribusjon fra hurtigmenyen som vises.

Fra Ny distribusjon dialogboksen som vises, åpner du prosjekt rullegardinmeny og velg webprosjektet.

Det er en Implementeringstype seksjonen under Prosjekt kombinasjonsboks når vi velger Eksplodert arkiv (utviklingsmodus), endringene i applikasjonen blir synkronisert live uten å måtte omdistribueres, dette er det beste alternativet under utvikling, da det er veldig effektivt.

Velger Pakket arkiv (produksjonsmodus) vil kreve at vi distribuerer hver gang vi gjør endringer og ser dem i nettleseren. Dette er best bare for produksjon, men likevel gjør Eclipse det like enkelt.

9.3. Implementering av webapplikasjon på ekstern plassering

Vi velger vanligvis å distribuere en WAR gjennom Eclipse for å gjøre feilsøking lettere. Det kan komme en tid da vi vil at den skal distribueres til et annet sted enn de som brukes av Eclipses innebygde servere.

Den vanligste forekomsten er der produksjonsserveren vår er online, og vi vil oppdatere webapplikasjonen.

Vi kan omgå denne prosedyren ved å distribuere i produksjonsmodus og merke til Distribuere plassering i Ny distribusjon dialogboksen og plukke WAR derfra.

Under distribusjonen, i stedet for å velge en innebygd server, kan vi velge alternativet fra servere visning ved siden av listen over innebygde servere. Vi navigerer til $ JETTY_HOME/webapps katalog over en ekstern bryggeinstallasjon.

10. Implementering fra IntelliJ IDEA

For å distribuere en webapplikasjon til bryggen, må den eksistere og allerede ha blitt lastet ned og installert.

10.1. Lokal konfigurasjon

Åpne Løpe menyen og klikk på Rediger konfigurasjoner alternativer.

I panelet til venstre søker du etter Brygger Server, hvis den ikke er der, klikker du på + -tegnet i menyen, søk etter Brygge og velg Lokalt. I Navn feltuttak Brygge 9.

Klikk på Konfigurer ... knappen og inn Bryggehjem feltet naviger til hjemstedet til installasjonen din og velg den.

Eventuelt kan du stille inn Oppstart side å være // lokal vert: 8080 / og HTTP-port: 8080, endre porten etter behov.

Gå til Utplassering klikk på + -symbolet, velg gjenstand du vil legge til serveren, og klikk OK

10.2. Fjernkonfigurasjon

Følg de samme instruksjonene som for lokale bryggekonfigurasjoner, men i serverfanen må du oppgi det eksterne stedet for installasjonen.

11. Konklusjon

I denne artikkelen har vi dekket omfattende de forskjellige måtene å distribuere en WAR-fil på Jetty webserver.


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