Que sont les servlets Java? Traitement des demandes pour les applications Web Java

La gestion des demandes est le pain et le beurre du développement d'applications Web Java. Afin de répondre aux demandes du réseau, une application Web Java doit d'abord déterminer le code qui répondra à l'URL de la demande, puis rassembler une réponse. Chaque pile technologique a un moyen de traiter les demandes-réponses. En Java, nous utilisons des servlets (et l'API Java Servlet) à cet effet. Considérez un servlet comme un petit serveur dont le travail consiste à accepter les demandes et à émettre des réponses.

URL vs point de terminaison

En tant qu'internaute, vous connaissez les URL comme adresse de site Web dans votre navigateur. En tant que développeur, vous pouvez également connaître les URL en tant que points de terminaison pour les services Web. Une URL (localisateur de ressources uniformes) est un moyen standard de décrire et de localiser des ressources Internet à l'aide de texte. Le terme point de terminaison fait référence à une URL désignant un service Web. Les termes point de terminaison et URL sont souvent utilisés de manière interchangeable, bien qu'ils se réfèrent à des domaines d'utilisation différents.

Logiciel en tant que couches

Comme je l'ai expliqué dans mon introduction à l'environnement d'exécution Java, nous pouvons voir les logiciels sous la forme d'une série de couches. Chaque couche d'un système logiciel possède certaines capacités requises par les couches supérieures. Par exemple, la couche matérielle se trouve sous la couche micrologicielle, prenant en charge ses fonctionnalités. De même, la couche de micrologiciel (BIOS sur un PC ou EFI sur un Mac) est nécessaire pour exécuter le système d'exploitation. La figure 1 montre ces trois composants dans un diagramme en couches.

Matthew Tyson

Vous pouvez également considérer un système logiciel comme une série de conteneurs , où les couches inférieures agissent comme des conteneurs pour les couches supérieures. Chaque couche agit comme un contexte pour exécuter le niveau de fonctionnalité suivant: le matériel contient le micrologiciel et le micrologiciel contient le système d'exploitation.

Java côté serveur

Une application Java côté serveur fait partie d'une large classe d'applications qui servent de points de terminaison réseau, recevant des requêtes HTTP d'une URL donnée et renvoyant des données dans un format d'échange tel que HMTL ou JSON. Java côté serveur comprend à la fois des serveurs Java standardisés et des technologies d'interaction avec ces serveurs. L'API Java Servlet est la norme utilisée pour interagir avec un serveur Java.

Serveurs Java et JVM

Dans les systèmes Java, le système d'exploitation (OS) contient la machine virtuelle Java, qui fournit un environnement cohérent pour l'exécution des applications Java. Un serveur Java se trouve au-dessus de la JVM. Tout comme la JVM est l'intermédiaire entre le système d'exploitation et votre application Java, le serveur Java fournit un accès cohérent et rationalisé aux capacités de mise en réseau et de traitement du système d'exploitation. Une application Java s'exécute à l'intérieur du serveur, en utilisant l'API Java Servlet pour accéder aux fonctionnalités du serveur.

La figure 2 montre une pile logicielle pour Java côté serveur.

Matthew Tyson

La spécification Java Servlet

La spécification Java Servlet fournit la définition sous-jacente d'un serveur Java et des composants associés. Il définit la manière dont le serveur enverra les demandes et les réponses lors des interactions réseau via HTTP. Tous les serveurs Java doivent être compatibles avec la spécification Java Servlet. La plupart des serveurs Java actuels sont compatibles avec Servlet 4.0.

Servlet 4.0

Chaque version de la spécification Java Servlet apporte de nouvelles fonctionnalités. Servlet 4.0 inclut la prise en charge du protocole HTTP / 2 et de son mécanisme de poussée de serveur. Serveur push permet à un serveur de précharger les actifs requis par une page Web, plutôt que d'attendre une demande spécifique. La spécification Servlet 4.0 intègre également la possibilité de découvrir les mappages d'URL lors de l'exécution, une fonctionnalité connue sous le nom de découverte d'exécution .

Eclipse Enterprise pour Java

Servlet 4.0 fait partie de l'initiative open source EE4J (Eclipse Enterprise pour Java), qui comprend un remplacement proposé pour le JCP.

Pour une compréhension pratique du fonctionnement de la spécification Servlet, considérez l'article que vous lisez actuellement. Quelque part dans les entrailles de l'infrastructure de JavaWorld, cet article a été formaté et soumis pour publication. Une URL lui a été attribuée, acheminée via le réseau et est arrivée sur un serveur. Le serveur a connecté l'artefact (article) à l'URL et a déterminé que lorsqu'une requête GET arrivait pour cette URL, elle renvoyait cet article au format HTML.

Lorsque vous créez une application Web Java, vous créez un logiciel qui s'exécute à l'intérieur du serveur Java. L'application utilise les fonctionnalités fournies par le contexte du serveur, et l'une de ces fonctionnalités est l'API Servlet. Pour cette raison, un serveur Java qui implémente la spécification de servlet est parfois appelé un conteneur de servlet .

Pour créer un servlet, vous implémentez l' Servletinterface et la déployez dans un conteneur de servlet. La figure 3 montre comment votre application repose sur le servlet.

Matthew Tyson

Ecrire des servlets avec Tomcat

Maintenant que vous avez un aperçu conceptuel, passons à l'écriture d'un servlet Java.

The first thing you'll need is a servlet container, otherwise known as a Java application server. Tomcat and Jetty are two of the most popular servlet containers. We'll use Tomcat because it's one of the most long-standing application servers for Java. Tomcat is free and contains minimal bells and whistles, which will keep things simple for our example. ("Bells and whistles" is a technical term, by the way.)

Download and install Tomcat

If you don't already have Tomcat, start by opening the Tomcat download page. There, you can select either the Windows installer or the most appropriate ZIP download for your computer (for example, I'm downloading the 64-bit Windows zip).

That's it: you've just added the Java server layer to your operating system!

Verify Tomcat is running

Avant d'aller plus loin, assurons-nous de pouvoir exécuter Tomcat. Démarrez le service Windows ou exécutez startup.shou startup.batfichier à partir de la ligne de commande.

Si vous ouvrez maintenant un navigateur Web et accédez à localhost:8080, vous devriez être accueilli par l'écran suivant:

Matthew Tyson

Si vous rencontrez des problèmes lors de l'exécution de Tomcat, vous pouvez consulter la documentation Tomcat pour le dépannage.

Exécutez l'exemple de servlet Tomcat

Voyons maintenant un servlet Java. De manière pratique, Tomcat a inclus quelques exemples simples.

Cliquez sur le lien Exemples que vous voyez dans la section Démarrage rapide du développeur de la page d'accueil de Tomcat. Une fois que vous y êtes, cliquez sur le lien Exemples de 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

En plus du mappage d'URL, les servlets offrent des fonctionnalités supplémentaires de filtrage et d'authentification. Les filtres sont utilisés pour traiter les demandes et l' authentification est utilisée pour attribuer des utilisateurs et des rôles simples aux modèles d'URL. La spécification JavaServer Pages (JSP) prend en charge la génération HTML d'une manière beaucoup plus puissante.

Conclusion

Cet article présente un aperçu conceptuel des servlets Java, y compris la gestion des requêtes et réponses d'URL à l'intérieur d'un serveur Java. La compréhension de ces éléments de base de Java côté serveur vous aidera à intégrer des concepts plus avancés tels que la poussée du serveur et la découverte d'exécution des mappages d'URL, qui sont nouveaux dans Servlet 4.0.

Cette histoire, "Que sont les servlets Java? Traitement des demandes pour les applications Web Java" a été publiée à l'origine par JavaWorld.