Programmering

Hvad er Java-servlets? Anmod om håndtering af Java-webapplikationer

Håndtering af anmodninger er brød og smør fra Java webapplikationsudvikling. For at svare på anmodninger fra netværket skal en Java-webapplikation først bestemme, hvilken kode der skal svare på anmodnings-URL'en, og derefter slå et svar. Hver teknologiestak har en måde at udføre håndtering af anmodning-svar på. I Java bruger vi servlets (og Java Servlet API) til dette formål. Tænk på en servlet som en lille server, hvis opgave er at acceptere anmodninger og udstede svar.

URL versus slutpunkt

Som internetbruger kender du URL'er som webadressen i din browser. Som udvikler kender du muligvis også webadresser som slutpunkter for webtjenester. EN URL (ensartet ressourcelokator) er en standard måde at beskrive og lokalisere internetressourcer ved hjælp af tekst på. Begrebet slutpunkt henviser til en URL, der betegner en webservice. Vilkårene slutpunkt og URL bruges ofte om hverandre, selvom de henviser til forskellige anvendelsesdomæner.

Software som lag

Som jeg forklarede i min introduktion til Java Runtime Environment, kan vi se software som en række lag. Hvert lag i et softwaresystem har visse muligheder, som lagene over det kræver. Som et eksempel sidder hardwarelaget under firmwarelaget og understøtter dets funktionalitet. Ligeledes er firmwarelaget (BIOS på en pc eller EFI på en Mac) nødvendigt for at køre operativsystemet. Figur 1 viser disse tre komponenter i et lagdiagram.

Matthew Tyson

Du kan også se på et softwaresystem som en serie af containere, hvor de nederste lag fungerer som containere til de højere. Hvert lag fungerer som en sammenhæng til at køre det næste niveau af funktionalitet: hardware indeholder firmware, og firmware indeholder operativsystemet.

Server på Java

EN server-side Java applikation er en af ​​en bred klasse af applikationer, der fungerer som netværksendepunkter, modtager HTTP-anmodninger fra en given URL og sender data tilbage i et udvekslingsformat som HMTL eller JSON. Server-side Java består af både standardiserede Java-servere og teknologier til interaktion med disse servere. Java Servlet API er den standard, der bruges til at interagere med en Java-server.

Java-servere og JVM

I Java-baserede systemer indeholder operativsystemet JVM, som giver et ensartet miljø til kørsel af Java-applikationer. En Java-server sidder oven på JVM. Ligesom JVM er mellemled mellem OS og din Java-applikation, giver Java-serveren ensartet, strømlinet adgang til operativsystemets netværks- og behandlingsfunktioner. En Java-applikation kører inde i serveren ved hjælp af Java Servlet API til at få adgang til serverens muligheder.

Figur 2 viser en softwarestak til serversiden Java.

Matthew Tyson

Java Servlet-specifikationen

Java Servlet-specifikationen giver den underliggende definition af en Java-server og relaterede komponenter. Den definerer, hvordan serveren sender anmodninger og svar under netværksinteraktioner via HTTP. Alle Java-servere skal være kompatible med Java Servlet-specifikationen. De fleste Java-servere i dag er kompatible med Servlet 4.0.

Servlet 4.0

Hver version af Java Servlet-specifikationen bringer nye funktioner. Servlet 4.0 inkluderer support til HTTP / 2-protokollen og dens server push-mekanisme. Server push gør det muligt for en server at indlæse aktiver, der kræves af en webside, i stedet for at vente på en bestemt anmodning. Servlet 4.0 spec indeholder også muligheden for at opdage URL-tilknytninger ved kørsel, en funktion kendt som runtime-opdagelse.

Eclipse Enterprise til Java

Servlet 4.0 er en del af open source EE4J (Eclipse Enterprise for Java) -initiativet, som inkluderer en foreslået erstatning for JCP.

For en praktisk forståelse af, hvordan Servlet-specifikationen fungerer, skal du overveje den artikel, du læser i øjeblikket. Et eller andet sted i tarmene med JavaWorlds infrastruktur blev denne artikel formateret og sendt til offentliggørelse. Det blev tildelt en URL, dirigeret gennem netværket og ankom til en server. Serveren forbandt artefakten (artiklen) med URL'en og fastslog, at når en GET-anmodning ankom til denne URL, ville den tjene denne artikel tilbage som HTML.

Når du opretter et Java-webapplikation, opretter du software, der kører inde i Java-serveren. Applikationen bruger de faciliteter, der leveres af serverkonteksten, og en af ​​disse faciliteter er Servlet API. Af denne grund kaldes en Java-server, der implementerer Servlet-specifikationen, undertiden a servletbeholder.

For at oprette en servlet implementerer du Servlet interface og distribuere det i en servletcontainer. Figur 3 viser, hvordan din applikation er afhængig af servlet.

Matthew Tyson

Skriver servlets med Tomcat

Nu hvor du har et konceptuelt overblik, lad os komme ned til at skrive en Java-servlet.

Den første ting, du har brug for, er en servletcontainer, ellers kendt som en Java-applikationsserver. Tomcat og Jetty er to af de mest populære servletcontainere. Vi bruger Tomcat, fordi det er en af ​​de mest mangeårige applikationsservere til Java. Tomcat er gratis og indeholder minimale klokker og fløjter, hvilket holder tingene enkle for vores eksempel. ("Bells and whistles" er forresten et teknisk udtryk.)

Download og installer Tomcat

Hvis du ikke allerede har Tomcat, skal du starte med at åbne Tomcat-download-siden. Der kan du vælge enten Windows-installationsprogrammet eller den mest passende ZIP-download til din computer (for eksempel downloader jeg 64-bit Windows-zip).

Det er det: du har lige tilføjet Java-serverlaget til dit operativsystem!

Bekræft, at Tomcat kører

Lad os sørge for at køre Tomcat, inden vi går videre. Start enten Windows-tjenesten, eller kør opstart.sh eller startup.bat fil fra kommandolinjen.

Hvis du nu åbner en webbrowser og går til lokal vært: 8080, skal du blive mødt af følgende skærmbillede:

Matthew Tyson

Hvis du støder på problemer med at køre Tomcat, kan du besøge Tomcat-dokumentationen for fejlfinding.

Kør eksemplet på Tomcat-servlet

Lad os nu se på en Java-servlet. Bekvemt har Tomcat inkluderet nogle enkle eksempler.

Klik på Eksempler link du ser i Udvikler hurtig start sektion på Tomcat-velkomstsiden. Når du er der, skal du klikke på Servlet-eksempler link.

Nu kan du se en simpel Servlet i aktion ved at klikke på Hej Verden prøver Udfør link. Det vil bringe din browser til // localhost: 8080 / eksempler / servlets / servlet / HelloWorldExample URL, hvor du vil se den flerårige programmørs hilsen.

Visning af servletkildekoden

Klik på pilen Tilbage i din browser, og klik derefter på kilde link til HelloWorld-appen. Kilden vises i liste 1.

Notering 1. Kildekode til HelloWorld-eksempel

 import java.io. *; import javax.servlet. *; import javax.servlet.http. *; offentlig klasse HelloWorld udvider HttpServlet {public void doGet (HttpServletRequest anmodning, HttpServletResponse svar) kaster IOException, ServletException {respons.setContentType ("text / html"); PrintWriter out = respons.getWriter (); out.println (""); out.println (""); out.println ("Hej verden!"); out.println (""); out.println (""); out.println (""); out.println (""); out.println (""); }} 

Denne meget enkle kodeliste indeholder de grundlæggende komponenter i en Java-servlet. Lad os overveje det trin for trin.

Den første linje kalder standard Java-import. Derefter definerer programmet en ny klasse, der udvider HttpServlet klasse. Dette er kritisk, fordi servlets skal implementere Servlet interface for at køre inde i en servletbeholder.

Dernæst Hej Verden klasse definerer en metode kaldet doGet (). Dette er en standardmetode på servlets: den fortæller serveren at rute HTTP FÅ anmodninger om denne metode. Andre HTTP-metoder, som POST, håndteres ved hjælp af lignende navngivne metoder, som f.eks doPost.

Bemærk, at det doGet () har to parametre: (HttpServletRequest anmodning, HttpServletResponse svar). Disse to objekter repræsenterer anmodningen og svaret. De giver adgang til alt, hvad din kode har brug for for at håndtere anmodningen og udstede et svar. I HelloWorld.doGet servlet-metoden, f.eks respons objekt bruges til at informere serveren om, hvilken indholdstypehoved der skal udstedes. I dette tilfælde er det respons.setContentType ("tekst / html");.

Endelig får programmet et Java Writer-objekt fra svaret respons.getWriter (). Det Forfatter bruges derefter til at oprette et simpelt HTML-svar for at vende tilbage til browseren.

URL-kortlægning

Strukturen og kodestrømmen i Listing 1 er ret intuitiv, men der er en åbenlys undladelse. Hvordan ved serveren at tilknytte // localhost: 8080 / eksempler / servlets / servlet / HelloWorldExample URL til HelloWorld.doGet metode?

Du finder svaret på dette mysterium i applikationens metadata. Hver Java-webapplikation indeholder en standard metadatafil, kaldet web.xml, som fortæller serveren, hvordan man kortlægger webadresser til servlets.

Hvad er metadata?

Metadata er enhver information, der bruges til at kontrollere driften af ​​software uden for selve softwaren.

I applikationerne til Tomcat-eksemplet er web.xml findes på \ apache-tomcat-9.0.11 \ webapps \ eksempler \ WEB-INF \ web.xml. Det \ WEB-INF \ web.xml er standardplaceringen for metadatafilen til servlets. Hvis du åbner denne fil, kan du se, hvordan serveren er konfigureret.

Den forkortede web.xml i Listing 2 har netop de oplysninger, vi har brug for til vores diskussion.

Liste 2. Kildekode for Tomcat HelloWorld-eksemplet

     HelloWorldExample HelloWorldExample HelloWorldExample / servlets / servlet / HelloWorldExample 

Liste 2 viser en typisk XML-filoverskrift, der henviser til skemaet for en Java-webapplikationsbeskrivelse. Dette efterfølges af to poster: og.

Opkaldet til tildeler et logisk navn HelloWorldExample, til HelloWorldExample klasse, via felterne og.

Opkaldet til tildeler det logiske navn til værdi og derved knytte koden til URL'en.

Bemærk, at felt understøtter jokertegn for at håndtere en række fleksible URL-tilknytninger.

Andre servletfunktioner

Ud over URL-kortlægning giver servlets yderligere muligheder for filtrering og godkendelse. Filtre bruges til behandling af anmodninger, og Godkendelse bruges til at tildele enkle brugere og roller til URL-mønstre. JavaServer Pages (JSP) -specifikationen understøtter generering af HTML på en meget mere kraftfuld måde.

Konklusion

Denne artikel har været en konceptuel oversigt over Java-servlets, herunder URL-anmodning og svarhåndtering inde i en Java-server. Forståelse af disse grundlæggende elementer i serversiden Java hjælper dig med at integrere mere avancerede begreber som server push og runtime opdagelse af URL-tilknytninger, som er nye i Servlet 4.0.

Denne historie, "Hvad er Java-servlets? Anmodning om håndtering af Java-webapplikationer" blev oprindeligt udgivet af JavaWorld.