Što su Java servleti? Rukovanje zahtjevima za Java web programe

Rukovanje zahtjevima kruh je i put razvoja Java web aplikacija. Da bi odgovorio na zahtjeve s mreže, Java web aplikacija prvo mora odrediti koji će kôd odgovoriti na URL zahtjeva, a zatim odrediti odgovor. Svaki tehnološki stog ima način postizanja obrade zahtjeva i odgovora. U Javi u tu svrhu koristimo servlete (i Java Servlet API). Zamislite servlet kao maleni poslužitelj čiji je posao prihvaćanje zahtjeva i izdavanje odgovora.

URL u odnosu na krajnju točku

Kao korisniku Interneta poznati su vam URL-ovi kao adresa web mjesta u vašem pregledniku. Kao programer, možda ćete URL-ove znati i kao krajnje točke za web usluge. URL (Uniform Resource Locator) je standardni način opisivanja i pronađite Internet resurse pomoću teksta. Pojam krajnja točka odnosi se na URL koji označava web uslugu. Pojmovi krajnja točka i URL često se koriste naizmjenično, iako se odnose na različite domene korištenja.

Softver kao slojevi

Kao što sam objasnio u uvodu u Java Runtime Environment, softver možemo promatrati kao niz slojeva. Svaki sloj u softverskom sustavu ima određene sposobnosti koje su potrebne slojevima iznad njega. Kao primjer, hardverski sloj nalazi se ispod sloja firmvera, podržavajući njegovu funkcionalnost. Isto tako, sloj firmvera (BIOS na računalu ili EFI na Macu) potreban je za pokretanje operativnog sustava. Slika 1 prikazuje ove tri komponente u slojevitom dijagramu.

Matthew Tyson

Također biste mogli gledati na softverski sustav kao na niz spremnika , pri čemu donji slojevi djeluju kao spremnici za više. Svaki sloj djeluje kao kontekst za pokretanje sljedeće razine funkcionalnosti: hardver sadrži firmware, a firmware sadrži operativni sustav.

Java na poslužitelju

Server-side Java aplikacija je jedna od širokog klase aplikacija koje služe kao mreža krajnje točke, prima HTTP zahtjeve iz određenog URL i slanje podataka natrag u Interchange Format kao HMTL ili JSON. Java na poslužitelju sastoji se od standardiziranih Java poslužitelja i tehnologija za interakciju s tim poslužiteljima. Java Servlet API standard je koji se koristi za interakciju s Java poslužiteljem.

Java poslužitelji i JVM

U sustavima koji se temelje na Javi, operativni sustav (OS) sadrži JVM, koji pruža dosljedno okruženje za pokretanje Java aplikacija. Java poslužitelj nalazi se na vrhu JVM-a. Baš kao što je JVM posrednik između OS-a i vašeg Java programa, Java poslužitelj pruža dosljedan, pojednostavljeni pristup mrežnim i operacijskim mogućnostima operativnog sustava. Java aplikacija radi unutar poslužitelja, koristeći API Java Servlet za pristup mogućnostima poslužitelja.

Slika 2 prikazuje softverski stog za Java na poslužitelju.

Matthew Tyson

Specifikacija Java Servlet

Specifikacija Java Servlet daje osnovnu definiciju za Java poslužitelj i srodne komponente. Definira kako će poslužitelj slati zahtjeve i odgovore tijekom mrežnih interakcija putem HTTP-a. Svi Java poslužitelji moraju biti kompatibilni sa specifikacijom Java Servlet. Većina Java poslužitelja danas su kompatibilni sa Servlet 4.0.

Servlet 4.0

Svaka verzija specifikacije Java Servlet donosi nove značajke. Servlet 4.0 uključuje podršku za HTTP / 2 protokol i njegov mehanizam potiskivanja poslužitelja. Potiskivanje poslužitelja omogućuje poslužitelju da unaprijed učita sredstva potrebna za web stranicu, umjesto da čeka određeni zahtjev. Specifikacija Servlet 4.0 također uključuje mogućnost otkrivanja preslikavanja URL-a tijekom izvođenja, značajke poznate kao otkrivanje runtimea .

Eclipse Enterprise za Javu

Servlet 4.0 dio je inicijative otvorenog koda EE4J (Eclipse Enterprise for Java), koja uključuje predloženu zamjenu za JCP.

Za praktično razumijevanje rada specifikacije Servlet, razmotrite članak koji trenutno čitate. Negdje u nedrima JavaWorld-ove infrastrukture, ovaj je članak oblikovan i poslan na objavljivanje. Dodijeljen mu je URL, usmjeren je kroz mrežu i stigao je na poslužitelj. Poslužitelj je povezao artefakt (članak) s URL-om i utvrdio da će, kada stigne GET zahtjev za taj URL, ovaj članak poslužiti kao HTML.

Kada izrađujete Java web aplikaciju, kreirate softver koji se izvodi unutar Java poslužitelja. Aplikacija koristi sadržaje koje pruža kontekst poslužitelja, a jedan od tih objekata je Servlet API. Iz tog razloga se Java poslužitelj koji implementira specifikaciju Servlet ponekad naziva spremnikom servleta .

Da biste stvorili servlet, implementirate Servletsučelje i rasporedite ga unutar spremnika servleta. Slika 3 prikazuje kako se vaša aplikacija oslanja na servlet.

Matthew Tyson

Pisanje servleta s Tomcatom

Sad kad ste dobili konceptualni pregled, prijeđimo na posao pisanja Java servleta.

Prvo što će vam trebati je spremnik servleta, inače poznat kao Java aplikacijski poslužitelj. Tomcat i Jetty dva su od najpopularnijih spremnika za servlet. Koristit ćemo Tomcat jer je to jedan od najdugovječnijih aplikacijskih poslužitelja za Javu. Tomcat je besplatan i sadrži minimalna zvona, što će olakšati stvari za naš primjer. ("Zvona i zviždaljke" usput je tehnički pojam.)

Preuzmite i instalirajte Tomcat

Ako još nemate Tomcat, započnite s otvaranjem stranice za preuzimanje Tomcata. Tamo možete odabrati instalacijski program za Windows ili najprikladnije preuzimanje ZIP-a za svoje računalo (na primjer, preuzimam 64-bitni Windows zip).

To je to: upravo ste dodali sloj Java poslužitelja u svoj operativni sustav!

Provjerite radi li Tomcat

Prije nego što krenemo dalje, pobrinimo se da možete pokrenuti Tomcat. Ili pokrenuti Windows servis ili trčanje startup.shili startup.batdatoteku iz naredbenog retka.

Ako sada otvorite web preglednik i prijeđete na localhost:8080, trebao bi vas dočekati sljedeći zaslon:

Matthew Tyson

Ako naiđete na bilo kakve probleme prilikom pokretanja Tomcata, posjetite Tomcat dokumentaciju radi rješavanja problema.

Pokrenite primjer Tomcat servleta

Sada ćemo pogledati Java servlet. Zgodno, Tomcat je uvrstio nekoliko jednostavnih primjera.

Kliknite vezu Primjeri koju vidite u odjeljku za brzi početak za programere na Tomcat stranici dobrodošlice. Kad ste tamo, kliknite vezu Primjeri servleta .

Sada možete vidjeti jednostavan Servlet u akciji klikom na vezu Hello Worlduzorka Execute. To će dovesti vaš preglednik do URL- a // localhost: 8080 / examples / servlets / servlet / HelloWorldExample , gdje ćete vidjeti pozdrav višegodišnjeg programera.

Pregled izvornog koda servleta

Kliknite strelicu Natrag u pregledniku, a zatim kliknite izvornu vezu za aplikaciju HelloWorld. Izvor je prikazan na popisu 1.

Popis 1. Izvorni kod za primjer HelloWorld

 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(""); out.println(""); out.println("Hello World!"); out.println(""); out.println(""); out.println(""); out.println(""); out.println(""); } } 

Ovaj vrlo jednostavan popis kodova sadrži osnovne komponente Java servleta. Razmotrimo to korak po korak.

Prvi redak poziva standardni Java uvoz. Nakon toga program definira novu klasu koja proširuje HttpServletklasu. To je kritično jer servleti moraju implementirati Servletsučelje da bi se izvodili unutar spremnika servleta.

Dalje, HelloWorldklasa definira metodu koja se naziva doGet(). Ovo je standardna metoda na servletima: ona govori poslužitelju da usmjeri HTTP GETzahtjeve na ovu metodu. Druge HTTP metode, poput POST-a, obrađuju se slično imenovanim metodama, poput doPost.

Notice that that doGet() has two parameters: (HttpServletRequest request, HttpServletResponse response). These two objects represent the request and response. They provide access to everything your code needs to deal with the request and issue a response. In the HelloWorld.doGet servlet method, for example, the response object is used to inform the server what content type header to issue. In this case, it's response.setContentType("text/html");.

Finally, the program obtains a Java Writer object from the response response.getWriter(). The Writer is then used to create a simple HTML response to return to the browser.

URL mapping

The structure and code flow in Listing 1 are fairly intuitive, but there is a glaring omission. How does the server know to associate the //localhost:8080/examples/servlets/servlet/HelloWorldExample URL to the HelloWorld.doGet method?

You will find the answer to this mystery in the application meta-data. Every Java web application includes a standard meta-data file, called web.xml, which tells the server how to map URLs to servlets.

What is meta-data?

Meta-data is any information that is used to control the operation of software from outside the software itself.

In the Tomcat example apps, the web.xml is found at \apache-tomcat-9.0.11\webapps\examples\WEB-INF\web.xml. The \WEB-INF\web.xml is the standard location of the meta-data file for servlets. If you open this file, you'll see how the server is configured.

The abbreviated web.xml in Listing 2 has just the information we need for our discussion.

Listing 2. Source code for the Tomcat HelloWorld example

     HelloWorldExample HelloWorldExample   HelloWorldExample /servlets/servlet/HelloWorldExample    

Listing 2 shows a typical XML file header referencing the schema for a Java web application descriptor. This is followed by two entries: and.

The call to assigns a logical name, HelloWorldExample, to the HelloWorldExample class, via the and fields.

The call to assigns that logical name to the value, thereby associating the code to the URL.

Note that the field supports wild cards in order to handle a variety of flexible URL mappings.

Other servlet capabilities

Osim mapiranja URL-a, servleti pružaju dodatne mogućnosti za filtriranje i provjeru autentičnosti. Filteri se koriste za obradu zahtjeva, a provjera autentičnosti koristi se za dodjeljivanje jednostavnih korisnika i uloga URL uzorcima. Specifikacija JavaServer Pages (JSP) pruža podršku za generiranje HTML-a na mnogo snažniji način.

Zaključak

Ovaj je članak konceptualni pregled Java servleta, uključujući obradu zahtjeva za URL-om i odgovora unutar Java poslužitelja. Razumijevanje ovih osnovnih elemenata Java na poslužitelju pomoći će vam integrirati naprednije koncepte kao što su push poslužitelj i runtime otkrivanje mapiranja URL-a, koji su novi u Servlet 4.0.

Ovu priču, "Što su Java servleti? Obrada zahtjeva za Java web aplikacije" izvorno je objavio JavaWorld.