Cosa sono i servlet Java? Richiedere la gestione per le applicazioni Web Java

La gestione delle richieste è il pane quotidiano dello sviluppo di applicazioni web Java. Per rispondere alle richieste dalla rete, un'applicazione Web Java deve prima determinare quale codice risponderà all'URL della richiesta, quindi effettuare il marshalling di una risposta. Ogni stack tecnologico ha un modo per eseguire la gestione della richiesta-risposta. In Java, utilizziamo servlet (e Java Servlet API) per questo scopo. Pensa a un servlet come a un minuscolo server il cui compito è accettare richieste ed emettere risposte.

URL vs endpoint

Come utente di Internet, hai familiarità con gli URL come indirizzo del sito web nel tuo browser. In qualità di sviluppatore, potresti anche conoscere gli URL come endpoint per i servizi web. Un URL (Uniform Resource Locator) è un modo standard per descrivere e individuare le risorse Internet utilizzando il testo. Il termine endpoint si riferisce a un URL che denota un servizio Web. I termini endpoint e URL sono spesso usati in modo intercambiabile, sebbene si riferiscano a diversi domini di utilizzo.

Software come livelli

Come ho spiegato nella mia introduzione a Java Runtime Environment, possiamo visualizzare il software come una serie di livelli. Ogni livello in un sistema software contiene determinate capacità che sono richieste dai livelli sopra di esso. Ad esempio, il livello hardware si trova sotto il livello firmware, supportandone le funzionalità. Allo stesso modo, il livello del firmware (BIOS su un PC o EFI su un Mac) è necessario per eseguire il sistema operativo. La Figura 1 mostra questi tre componenti in un diagramma a strati.

Matthew Tyson

Potresti anche considerare un sistema software come una serie di contenitori , in cui gli strati inferiori fungono da contenitori per quelli superiori. Ogni livello funge da contesto per l'esecuzione del livello successivo di funzionalità: l'hardware contiene il firmware e il firmware contiene il sistema operativo.

Java lato server

Un'applicazione Java lato server fa parte di una vasta classe di applicazioni che fungono da endpoint di rete, ricevono richieste HTTP da un determinato URL e restituiscono dati in un formato di interscambio come HMTL o JSON. Java lato server è costituito da server Java standardizzati e tecnologie per l'interazione con tali server. L'API Java Servlet è lo standard utilizzato per interagire con un server Java.

Server Java e JVM

Nei sistemi basati su Java, il sistema operativo (OS) contiene JVM, che fornisce un ambiente coerente per l'esecuzione di applicazioni Java. Un server Java si trova in cima alla JVM. Proprio come la JVM è l'intermediario tra il sistema operativo e l'applicazione Java, il server Java fornisce un accesso coerente e semplificato alle capacità di elaborazione e di rete del sistema operativo. Un'applicazione Java viene eseguita all'interno del server, utilizzando l'API del servlet Java per accedere alle capacità del server.

La Figura 2 mostra uno stack software per Java lato server.

Matthew Tyson

La specifica Java Servlet

La specifica Java Servlet fornisce la definizione sottostante per un server Java e i relativi componenti. Definisce come il server invierà richieste e risposte durante le interazioni di rete su HTTP. Tutti i server Java devono essere compatibili con la specifica Java Servlet. La maggior parte dei server Java oggi sono compatibili con Servlet 4.0.

Servlet 4.0

Ogni versione della specifica Java Servlet porta nuove funzionalità. Servlet 4.0 include il supporto per il protocollo HTTP / 2 e il suo meccanismo di push del server. Il push del server consente a un server di precaricare le risorse richieste da una pagina Web, anziché attendere una richiesta specifica. La specifica Servlet 4.0 incorpora anche la capacità di scoprire i mapping degli URL in fase di esecuzione, una funzionalità nota come discovery di runtime .

Eclipse Enterprise per Java

Servlet 4.0 fa parte dell'iniziativa open source EE4J (Eclipse Enterprise for Java), che include una proposta di sostituzione per JCP.

Per una comprensione pratica di come funziona la specifica Servlet, considera l'articolo che stai attualmente leggendo. Da qualche parte nelle viscere dell'infrastruttura di JavaWorld, questo articolo è stato formattato e inviato per la pubblicazione. È stato assegnato un URL, instradato attraverso la rete ed è arrivato a un server. Il server ha collegato l'artefatto (articolo) con l'URL e ha stabilito che quando arrivava una richiesta GET per quell'URL, avrebbe restituito questo articolo come HTML.

Quando crei un'applicazione Web Java, stai creando un software che viene eseguito all'interno del server Java. L'applicazione utilizza le funzionalità fornite dal contesto del server e una di queste funzionalità è l'API servlet. Per questo motivo, un server Java che implementa la specifica Servlet è talvolta chiamato contenitore servlet .

Per creare un servlet, implementare l' Servletinterfaccia e distribuirla all'interno di un servlet container. La Figura 3 mostra come l'applicazione si basa sul servlet.

Matthew Tyson

Scrittura di servlet con Tomcat

Ora che hai una panoramica concettuale, passiamo al lavoro di scrivere un servlet Java.

La prima cosa di cui avrai bisogno è un servlet container, altrimenti noto come Java application server. Tomcat e Jetty sono due dei contenitori servlet più popolari. Useremo Tomcat perché è uno dei server di applicazioni più longevi per Java. Tomcat è gratuito e contiene campane e fischietti minimi, che manterranno le cose semplici per il nostro esempio. ("Bells and whistles" è un termine tecnico, tra l'altro.)

Scarica e installa Tomcat

Se non hai già Tomcat, inizia aprendo la pagina di download di Tomcat. Qui puoi selezionare il programma di installazione di Windows o il download ZIP più appropriato per il tuo computer (ad esempio, sto scaricando lo zip di Windows a 64 bit).

Ecco fatto: hai appena aggiunto il livello del server Java al tuo sistema operativo!

Verifica che Tomcat sia in esecuzione

Prima di andare oltre, assicurati di poter eseguire Tomcat. Avvia il servizio Windows oppure esegui startup.sho startup.batarchivia dalla riga di comando.

Se ora apri un browser web e vai su localhost:8080, dovresti essere accolto dalla seguente schermata:

Matthew Tyson

In caso di problemi durante l'esecuzione di Tomcat, è possibile visitare la documentazione di Tomcat per la risoluzione dei problemi.

Esegui l'esempio del servlet Tomcat

Ora diamo un'occhiata a un servlet Java. Convenientemente, Tomcat ha incluso alcuni semplici esempi.

Fai clic sul collegamento Esempi che vedi nella sezione Avvio rapido per sviluppatori della pagina di benvenuto di Tomcat. Una volta che sei lì, fai clic sul collegamento Esempi di servlet .

Now you can see a simple Servlet in action by clicking the Hello World sample's Execute link. That will bring your browser to the //localhost:8080/examples/servlets/servlet/HelloWorldExample URL, where you will see the perennial programmer's salutation.

Viewing the servlet source code

Click the Back arrow in your browser, then click the source link for the HelloWorld app. The source is shown in Listing 1.

Listing 1. Source code for HelloWorld example

 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(""); } } 

This very simple code listing contains the basic components of a Java servlet. Let's consider it step by step.

The first line calls the standard Java imports. After that, the program defines a new class, which extends the HttpServlet class. This is critical because servlets must implement the Servlet interface in order to run inside a servlet container.

Next, the HelloWorld class defines a method called doGet(). This is a standard method on servlets: it tells the server to route HTTP GET requests to this method. Other HTTP methods, like POST, are handled by similarly named methods, like 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

Oltre alla mappatura degli URL, i servlet forniscono funzionalità aggiuntive per il filtraggio e l'autenticazione. I filtri vengono utilizzati per l'elaborazione delle richieste e l' autenticazione viene utilizzata per assegnare utenti e ruoli semplici ai pattern URL. La specifica JavaServer Pages (JSP) fornisce il supporto per la generazione di HTML in un modo molto più potente.

Conclusione

Questo articolo è stato una panoramica concettuale dei servlet Java, inclusa la richiesta di URL e la gestione delle risposte all'interno di un server Java. La comprensione di questi elementi di base di Java lato server ti aiuterà a integrare concetti più avanzati come il push del server e il rilevamento runtime delle mappature URL, che sono nuove in Servlet 4.0.

Questa storia, "Cosa sono i servlet Java? Gestione delle richieste per le applicazioni web Java" è stata originariamente pubblicata da JavaWorld.