Article de reference

Servlet Jakarta

( Learn how and when to remove this message ) Cycle de vie d'un fichier JSP Une servlet Jakarta (anciennement servlet Java) est un composant logiciel Java qui étend les fonction...

Cycle de vie d'un fichier JSP

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 la du 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 .

    Historique de l'API Servlet
    Version de l'API ServletLibéréSpécificationPlate-formeChangements importants
    Servlet Jakarta 6.128 mars 20246.1Jakarta EE 11Amélioration de la prise en charge des codes d'état HTTP et de l'encodage des caractères
    Jakarta Servlet 6.031 mai 20226.0Jakarta EE 10Supprimer les fonctionnalités obsolètes et implémenter les améliorations demandées
    Jakarta Servlet 5.09 octobre 20205.0Jakarta EE 9L'API a été déplacée du package HTTP/2
    Servlet Java 3.1Mai 2013JSR 340Java EE 7E/S non bloquantes, mécanisme de mise à niveau du protocole HTTP ( WebSocket )
    Servlet Java 3.0Décembre 2009 JSR 315Java EE 6Extensibilité, facilité de développement, servlet asynchrone, sécurité, téléchargement de fichiers
    Servlet Java 2.5Septembre 2005 JSR 154Java EE 5Nécessite Java SE 5, prend en charge les annotations
    Servlet Java 2.4Novembre 2003 JSR 154J2EE 1.4web.xml utilise le schéma XML
    Servlet Java 2.3Août 2001 JSR 53J2EE 1.3Ajout deFilter
    Servlet Java 2.2Août 1999 JSR 902 , JSR 903J2EE 1.2Intégré à J2EE, il introduit des applications web indépendantes dans des fichiers .war.
    Servlet Java 2.1Novembre 1998 2.1aIndéterminéPremière spécification officielle, ajoutée RequestDispatcher,ServletContext
    Servlet Java 2.0Décembre 1997cycle 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.
  • Après son initialisation, l'instance de servlet peut traiter les requêtes client. Chaque requête est traitée dans un thread distinct. Le conteneur web appelle la 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.
  • Enfin, le conteneur web appelle la 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.

    1. Supposons qu'un utilisateur demande à visiter une URL .
      • Le navigateur génère alors une requête HTTP pour cette URL.
      • Cette requête est ensuite envoyée au serveur approprié.
    2. La requête HTTP est reçue par le serveur web et transmise au conteneur de servlets.
      • Le conteneur associe cette requête à un servlet particulier.
      • La servlet est récupérée dynamiquement et chargée dans l'espace d'adressage du conteneur.
    3. Le conteneur appelle la init()méthode du servlet.
      • Cette méthode est invoquée uniquement lors du premier chargement du servlet en mémoire.
      • Il est possible de transmettre des paramètres d'initialisation à la servlet afin qu'elle puisse se configurer elle-même.
    4. Le conteneur appelle la service()méthode du servlet.
      • Cette méthode est appelée pour traiter la requête HTTP.
      • La servlet peut lire les données fournies dans la requête HTTP.
      • La servlet peut également formuler une réponse HTTP pour le client.
    5. La servlet reste dans l'espace d'adressage du conteneur et est disponible pour traiter toute autre requête HTTP reçue des clients.
      • Cette service()méthode est appelée pour chaque requête HTTP.
    6. Le conteneur peut, à un moment donné, décider de décharger la servlet de sa mémoire.
      • Les algorithmes qui permettent de prendre cette décision sont spécifiques à chaque conteneur.
    7. Le conteneur appelle la méthode du servlet destroy()pour libérer toutes les ressources, telles que les descripteurs de fichiers, allouées au servlet ; les données importantes peuvent être enregistrées dans un stockage persistant.
    8. La mémoire allouée à la servlet et à ses objets peut ensuite être récupérée par le ramasse-miettes.

    Exemple

    L'exemple de servlet suivant affiche le nombre de fois où sa service()méthode a été appelée.

    Notez que HttpServletest une sous-classe de GenericServlet, une implémentation de l' Servletinterface.

    La service()méthode de HttpServletclasse répartit les requêtes vers les méthodes doGet()`get`, doPost()` doPut()get`, doDelete()`get`, etc., en fonction de la requête HTTP. Dans l'exemple ci-dessous, cette service()méthode est surchargée et ne précise pas quelle méthode de requête HTTP elle traite.

    ); 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 }@Overridepublicvoiddestroy(){getServletContext().log("destroy() called");}}

    Container servers

    The specification for Servlet technology has been implemented in many products. See a list of implementations on the web container page.

    There are also other types of servlet containers such as those for SIP servlets, e.g., SailFin.

    Plus d articles de Worldlex Wiki

    Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

    Explorer l index