Une servlet Jakarta (anciennement servlet Java) est un composant logiciel Java qui étend les fonctionnalités d'un serveur . Bien que les servlets puissent répondre à de nombreux types de requêtes, elles servent le plus souvent à implémenter des conteneurs web pour héberger des applications web sur des serveurs web et sont donc considérées comme une API web côté serveur . Ces servlets web sont l' équivalent Java d'autres technologies de contenu web dynamique telles que PHP et ASP.NET .
classe Java de Jakarta EE conforme à l'API Servlet Jakarta , une norme pour l'implémentation de classes Java répondant aux requêtes. Les servlets peuvent en principe communiquer via n'importe quel protocole client-serveur , mais elles sont le plus souvent utilisées avec HTTP . En théorie, toute servlet peut étendre ladu contenu dynamique à un serveur web via la plateforme Java . Le contenu généré est généralement du HTML , mais peut également être d'autres formats de données tels que XML et, plus fréquemment, JSON .L'API Jakarta Servlet a été, dans une certaine mesure, remplacée par deux technologies Java standard pour les services Web :services Web RESTful de Jakarta (JAX-RS 2.0) sont utiles pour les services AJAX, JSON et REST, et
les services Web XML Jakarta (JAX-WS) sont utiles pour les services Web SOAP . Un servlet objet qui reçoit une requête et génère une réponse en fonction de celle-ci. Le Servletpackage de base définit des objets Java pour représenter les requêtes et les réponses des servlets, ainsi que des objets reflétant les paramètres de configuration et l'environnement d'exécution du servlet.
L' API Servlet , contenue dans la hiérarchie des packages JavaHTTPGenericServlet . Il inclut des objets de gestion de session qui suivent plusieurs requêtes et réponses entre le serveur web et un client.
Les servlets peuvent conserver un état dans des variables de session entre plusieurs transactions serveur grâce aux cookies HTTP ou au mappage d'URL . Il existe plusieurs façons de créer une servlet et d'utiliser le mappage d'URL avec celle-ci. Avant la spécification Servlet 3.0 (Tomcat 7.0), la configuration du fichier web.xml pour associer une servlet à une URL était la seule option. Pour les applications utilisant la spécification Servlet 3.0 ou une version ultérieure, l' @WebServletannotation permet d'associer n'importe quelle servlet à un ou plusieurs modèles d'URL.
Les servlets peuvent être empaquetées dans un fichier WAR en tant qu'application Web .
Un conteneur web est nécessaire pour déployer et exécuter une servlet. Ce conteneur (également appelé conteneur de servlets) est le composant du serveur web qui interagit avec les servlets. Il gère le cycle de vie des servlets, associe une URL à la servlet correspondante et vérifie que l'utilisateur qui effectue la requête dispose des droits d'accès appropriés.
Les servlets peuvent être générées automatiquement à partir de pages JSP (Jakarta Server Pages) par le compilateur JSP . La différence entre les servlets et les JSP réside dans le fait que les servlets intègrent généralement du HTML dans du code Java, tandis que les JSP intègrent du code Java dans du HTML. En général, l'intégration de code Java dans les JSP est considérée comme une mauvaise pratique . Il est préférable de déplacer la logique back-end de la JSP vers le code Java Servlet . Ainsi, le JSP est uniquement responsable du traitement et la JSP uniquement de la présentation du HTML , ce qui permet une séparation claire des responsabilités et le respect du principe de responsabilité unique .Servlet
Bien que l'utilisation directe des servlets pour générer du HTML (comme le montre l'exemple ci-dessous) soit devenue rare, le framework web MVC de plus haut niveau de Jakarta EE ( Faces ) utilise toujours explicitement la technologie servlet pour la gestion des requêtes/réponses de bas niveau via le Modèle 2 », qui est une variante du modèle-vue-contrôleur .
Histoire
L'API Java Servlet a été annoncée publiquement pour la première fois lors de la conférence inaugurale JavaOne en mai 1996. Environ deux mois après ces annonces, la première implémentation publique a été mise à disposition sur le site web de JavaSoft. Il s'agissait de la première version alpha du serveur web Java (JWS ; alors connu sous le nom de code Jeeves ) , qui serait finalement commercialisé le 5 juin 1997.
Dans son blog sur java.net , Jim Driscoll, vétéran de Sun et responsable de GlassFish, détaille l'histoire de la technologie des servlets. James Gosling a été le premier à imaginer les servlets aux débuts de Java , mais le concept n'est devenu un produit qu'en décembre 1996, lorsque Sun a commercialisé JWS. C'était avant que ce qui est aujourd'hui Jakarta EE ne soit formalisé en spécification.
La spécification Servlet1 a été créée par Pavni Diwanji alors qu'elle travaillait chez Sun Microsystems , la version 1.0 ayant été finalisée en juin 1997. À partir de la version 2.2, la spécification a été développée dans le cadre du Java Community Process .
| Version de l'API Servlet | Libéré | Spécification | Plate-forme | Changements importants |
|---|---|---|---|---|
| Servlet Jakarta 6.1 | 28 mars 2024 | 6.1 | Jakarta EE 11 | Amélioration de la prise en charge des codes d'état HTTP et de l'encodage des caractères |
| Jakarta Servlet 6.0 | 31 mai 2022 | 6.0 | Jakarta EE 10 | Supprimer les fonctionnalités obsolètes et implémenter les améliorations demandées |
| Jakarta Servlet 5.0 | 9 octobre 2020 | 5.0 | Jakarta EE 9 | L'API a été déplacée du package HTTP/2 |
| Servlet Java 3.1 | Mai 2013 | JSR 340 | Java EE 7 | E/S non bloquantes, mécanisme de mise à niveau du protocole HTTP ( WebSocket ) |
| Servlet Java 3.0 | Décembre 2009 | JSR 315 | Java EE 6 | Extensibilité, facilité de développement, servlet asynchrone, sécurité, téléchargement de fichiers |
| Servlet Java 2.5 | Septembre 2005 | JSR 154 | Java EE 5 | Nécessite Java SE 5, prend en charge les annotations |
| Servlet Java 2.4 | Novembre 2003 | JSR 154 | J2EE 1.4 | web.xml utilise le schéma XML |
| Servlet Java 2.3 | Août 2001 | JSR 53 | J2EE 1.3 | Ajout deFilter |
| Servlet Java 2.2 | Août 1999 | JSR 902 , JSR 903 | J2EE 1.2 | Intégré à J2EE, il introduit des applications web indépendantes dans des fichiers .war. |
| Servlet Java 2.1 | Novembre 1998 | 2.1a | Indéterminé | Première spécification officielle, ajoutée RequestDispatcher,ServletContext |
| Servlet Java 2.0 | Décembre 1997 | cycle de vie d'une servlet , le conteneur web initialise l'instance de servlet en appelant la init()méthode , en lui passant un objet implémentant l' javax.servlet.ServletConfiginterface. Cet objet de configuration permet à la servlet d'accéder aux paramètres d'initialisation nom-valeur de l'application web.service()méthode de la servlet pour chaque requête. Cette service()méthode détermine le type de requête et la transmet à la méthode appropriée pour la traiter. Le développeur de la servlet doit implémenter ces méthodes. Si une requête est faite pour une méthode non implémentée par la servlet, la méthode de la classe parente est appelée, ce qui entraîne généralement le renvoi d'une erreur à l'utilisateur.destroy()méthode qui met la servlet hors service. Cette destroy()méthode, comme init(), n'est appelée qu'une seule fois au cours du cycle de vie d'une servlet.Voici un scénario d'utilisation typique de ces méthodes.
ExempleL'exemple de servlet suivant affiche le nombre de fois où sa Notez que La ); sharedCounter = 0 ; }@Override protected void service ( final HttpServletRequest request , final HttpServletResponse response ) throws ServletException , IOException { getServletContext (). log ( "service() appelé" ); int localCounter ; synchronized ( sharedCounter ) { sharedCounter ++ ; localCounter = sharedCounter ; } response.getWriter (). write ( "Incrémentation du compteur à " + localCounter ) ; // accès à une variable locale response.getWriter ( ). flush ( ); // vidage de la réponse }@Override public void destroy () { getServletContext (). log ( "destroy() appelé" ); } } Serveurs conteneursLa spécification de la technologie Servlet a été implémentée dans de nombreux produits. Consultez la liste des implémentations sur la page dédiée aux conteneurs Web . Il existe également d'autres types de conteneurs de servlets, tels que ceux pour les servlets SIP, par exemple SailFin . |