Servlet Java et conteneurs Web. Servlets. Que savez-vous des filtres de servlets

Les servlets sont des programmes Java qui s'exécutent côté serveur d'une application Web. Tout comme les applets étendent dynamiquement les fonctionnalités d'un navigateur Web, les servlets étendent dynamiquement les fonctionnalités d'un serveur Web. Bien que les servlets puissent servir n'importe quelle requête, ils sont couramment utilisés pour étendre les serveurs Web. Pour de telles applications, la technologie Java Servlet définit des classes de servlet spécifiques à HTTP. Les packages javax.servlet et javax.servlet.http fournissent des interfaces et des classes pour la création de servlets.

  • Quelle est la structure d'un projet web ?

  • Qu'est-ce qu'un conteneur de servlet ? Cycle de vie des servlets.

Un conteneur de servlets est un programme qui gère le cycle de vie des servlets.
Cycle de vie du servlet : il est géré par le conteneur du servlet, lors du premier accès au servlet, il est chargé en mémoire et la méthode init() est appelée. Au fur et à mesure que l'application s'exécute, les méthodes service() sont appelées pour traiter les demandes des clients. Lorsque l'application se termine, la méthode destroy() est appelée et la servlet est déchargée de la mémoire.

  • Quelles sont les tâches, les fonctionnalités d'un conteneur de servlet ?

Un conteneur de servlet peut agir comme un serveur Web entièrement autonome, fournir des pages à un autre serveur Web tel qu'Apache ou s'intégrer à un serveur d'applications Java EE. Assure l'échange de données entre le servlet et les clients, exécute des fonctions telles que la création d'un environnement logiciel pour un servlet fonctionnel, l'identification et l'autorisation des clients, l'organisation d'une session pour chacun d'eux.

  • En quoi sendRedirect() est-il différent de forward() ?

Pour appeler une JSP à l'aide d'un chemin relatif, utilisez la méthode forward() ; pour accéder à une JSP à l'aide d'un chemin absolu, utilisez la méthode sendRedirect(). La différence entre ces méthodes est qu'un objet de requête déjà existant est passé avec la méthode forward() et qu'une nouvelle requête est formée lorsque la méthode sendRedirect() est appelée. Dans ce dernier cas, les informations doivent être transmises avec d'autres objets. De plus, la méthode forward() est plus rapide.

  • Que savez-vous des filtres de servlet ?

L'implémentation de l'interface Filter permet de créer un objet qui intercepte la requête, peut transformer l'en-tête et le contenu de la requête client. Les filtres ne créent pas de demande ou de réponse, mais les modifient uniquement. Le filtre prétraite la demande avant qu'elle n'atteigne le servlet, puis (si nécessaire) traite la réponse du servlet. Le filtre peut interagir avec différents types de ressources, en particulier avec les servlets et les pages JSP. Les filtres de servlet peuvent :

  • intercepter le lancement du servlet avant que le servlet ne soit lancé.
  • déterminer le contenu de la requête avant que la servlet ne soit invoquée.
  • modifier les en-têtes et les données de requête dans lesquelles la requête entrante est conditionnée.
  • modifier les en-têtes et les données de réponse dans lesquels la réponse reçue est compressée.
  • intercepter l'initiation du servlet après un appel au servlet.

Un filtre de servlet peut être configuré pour fonctionner sur un seul servlet ou un groupe de servlets. La base de la formation des filtres est l'interface javax.servlet.Filter, qui implémente trois méthodes :

  • void init(FilterConfig config) lève ServletException ;
  • vide détruire();
  • void doFilter (demande ServletRequest, réponse ServletResponse, chaîne FilterChain) lance IOException, ServletException ;

La méthode init() est appelée avant que le filtre ne commence à s'exécuter et configure l'objet de configuration du filtre. La méthode doFilter fait le travail réel du filtre. Ainsi, le serveur appelle init() une fois pour exécuter le filtre, puis appelle doFilter() autant de fois qu'il y a de requêtes faites directement à ce filtre. Une fois que le filtre a terminé son travail, la méthode destroy() est appelée.

  • Pourquoi avons-nous besoin d'écouteurs dans les servlets ?

Les écouteurs de contexte et de session sont des classes qui peuvent garder une trace du moment où un contexte ou une session a été initialisé, ou garder une trace du moment où ils doivent être détruits et du moment où des attributs ont été ajoutés ou supprimés du contexte ou de la session. Le servlet 2.4 étend le modèle d'écouteur de requête pour suivre la manière dont une requête est créée et détruite, et la manière dont les attributs sont ajoutés et supprimés d'un servlet. Servlet 2.4 a ajouté les classes suivantes :

  • ServletRequestListenerServletRequestListener
  • ServletRequestEventServletRequestEvent
  • ServletRequestAttributeListenerServletRequestAttributeListener
  • ServletRequestAttributeEventServletRequestAttributeEvent

  • Comment gérer les exceptions levées par une autre servlet dans l'application ?

Étant donné que le navigateur ne comprend que le HTML, lorsqu'une application lève une exception, le conteneur de servlet gère l'exception et génère une réponse HTML. Ceci est similaire à ce qui se passe avec des codes d'erreur comme 404, 403, etc. L'API Servlet prend en charge les servlets natifs pour gérer les exceptions et les erreurs que nous pouvons définir dans le descripteur de déploiement. La tâche principale de ces servlets est de gérer l'erreur ou l'exception et d'envoyer une réponse HTML lisible par l'utilisateur à l'utilisateur. Par exemple, vous pouvez fournir un lien vers la page principale, ainsi qu'une description de certains détails sur l'erreur.

  • Qu'est-ce qu'un descripteur de déploiement ?

Le descripteur de déploiement est le fichier de configuration d'artefact qui sera déployé dans le conteneur de servlet. Dans la spécification Java Platform, Enterprise Edition, un descripteur de déploiement décrit comment un composant, un module ou une application (telle qu'une application Web ou d'entreprise) doit être déployé.

Ce fichier de configuration spécifie les options de déploiement d'un module ou d'une application avec des paramètres spécifiques, des options de sécurité et décrit les exigences de configuration spécifiques. La syntaxe des fichiers descripteurs de déploiement est XML.

  • Comment implémenter le lancement de servlet avec le lancement d'application ?

Le conteneur de servlet charge généralement le servlet à la première demande du client, mais il est parfois nécessaire de charger le servlet dès le démarrage de l'application (par exemple, si le servlet est volumineux et prendra beaucoup de temps à charger). Pour ce faire, vous devez utiliser l'élément load-on-startup dans le descripteur (ou l'annotation loadOnStartup), qui indiquera que la servlet doit être chargée au démarrage.

La valeur doit être un entier. Si la valeur est négative, alors la servlet sera chargée à la demande du client, et si 0 et plus, alors elle sera chargée au démarrage de l'application. Plus le nombre est bas, plus tôt le servlet sera dans la file d'attente de téléchargement.

  • Qu'est-ce qu'un objet ServletConfig ?

L'interface javax.servlet.ServletConfig est utilisée pour transmettre des informations de configuration à un servlet. Chaque servlet a son propre objet ServletConfig, dont le conteneur de servlet est responsable de l'instanciation. Les paramètres d'initialisation dans web.xml (ou les annotations WebInitParam) sont utilisés pour définir les paramètres de configuration. La méthode getServletConfig() est utilisée pour obtenir l'objet ServletConfig de cette servlet.

  • Qu'est-ce qu'un objet ServletContext ?

L'interface javax.servlet.ServletContext définit un ensemble de méthodes qu'une servlet utilise pour communiquer avec son conteneur de servlet, telles que l'obtention du type MIME d'un fichier, la distribution de requêtes ou l'écriture dans un fichier journal. L'objet ServletContext est unique et disponible pour tous les servlets d'une application Web. Nous pouvons utiliser l'objet ServletContext lorsque nous devons accorder l'accès à un ou plusieurs servlets aux paramètres initialisés d'une application Web. Pour ce faire, utilisez l'élément dans web.xml. L'objet ServletContext peut être obtenu à l'aide de la méthode getServletContext() sur l'interface ServletConfig.

Les conteneurs de servlet peuvent également fournir des objets de contexte qui sont uniques à un groupe de servlets. Chacun des groupes sera associé à un ensemble différent d'URL de chemin d'hôte.

ServletContext a été étendu dans la spécification Servlet 3 pour fournir un ajout programmatique d'écouteurs et de filtres à une application. Cette interface possède également de nombreuses méthodes utiles comme getMimeType(), getResourceAsStream() etc.

  • Quelle est la différence entre ServletContext et ServletConfig ?

Voici quelques-unes des différences :

  • ServletConfig est unique par servlet, tandis que ServletContext est unique dans toute l'application.
  • ServletConfig est utilisé pour fournir des paramètres d'initialisation à un servlet, et ServletContext est utilisé pour fournir des paramètres d'initialisation d'application pour tous les servlets.
  • Nous n'avons pas la possibilité de définir des attributs sur l'objet ServletConfig, alors que nous pouvons définir des attributs sur l'objet ServletContext qui seront disponibles pour les autres servlets.

  • Interface ServletResponse.

L'interface ServletResponse est un outil pour envoyer des données à un client. Toutes les méthodes de cet outil servent cet objectif.

  • Interface ServletRequest.

L'interface ServletRequest est un outil permettant d'obtenir les paramètres de requête HTTP. Cette interface possède certaines méthodes dont le nom et l'objectif sont identiques à ServletContext.

  • Qu'est-ce qu'un répartiteur de demandes ?

L'interface RequestDispatcher est utilisée pour transmettre une demande à une autre ressource (il peut s'agir de HTML, de JSP ou d'un autre servlet dans la même application). Nous pouvons l'utiliser pour ajouter le contenu d'une autre ressource à la réponse. Cette interface est utilisée pour la communication interne entre les servlets dans le même contexte. L'interface a deux méthodes :

  • void forward(ServletRequest var1, ServletResponse var2) - transmet une requête d'un servlet à une autre ressource (servlet, JSP ou fichier HTML) sur le serveur.
  • void include(ServletRequest var1, ServletResponse var2) - inclut le contenu de la ressource (servlet, JSP ou page HTML) dans la réponse.

L'interface est accessible à l'aide de la méthode ServletContext getRequestDispatcher(String s). Le chemin doit commencer par / , qui sera interprété par rapport au chemin racine actuel du contexte.

  • Comment créer un deadlock dans une servlet ?

Le blocage (deadlock) peut être obtenu en implémentant un appel de méthode en boucle, par exemple en appelant la méthode doPost() dans la méthode doGet() et en appelant doGet() dans la méthode doPost().

  • Comment obtenir l'adresse de la servlet sur le serveur ?

Pour obtenir le chemin réel du servlet sur le serveur, vous pouvez utiliser cette construction : getServletContext().getRealPath(request.getServletPath()).

  • Comment obtenir des informations sur le serveur à partir du servlet ?

Les informations sur le serveur peuvent être récupérées à l'aide de l'objet ServletContext à l'aide de la méthode getServerInfo(). Ceux. getServletContext().getServerInfo().

  • Comment obtenir l'adresse IP du client sur le serveur ?

Utilisez request.getRemoteAddr() pour obtenir l'adresse IP du client dans le servlet.

  • Que savez-vous des classes wrapper de servlet ?

L'API HTTP Servlet fournit deux classes wrapper, HttpServletRequestWrapper et HttpServletResponseWrapper. Ils aident les développeurs à implémenter leurs propres implémentations des types de requête et de réponse du servlet. Nous pouvons étendre ces classes et remplacer uniquement les méthodes nécessaires pour implémenter nos propres types d'objets de réponse et de requête. Ces classes ne sont pas utilisées dans la programmation standard des servlets.

L'une des caractéristiques les plus agréables de Java est sa nature multiforme. Bien sûr, la création d'applications de bureau traditionnelles et même d'applications mobiles est excellente. Mais que se passe-t-il si vous voulez sortir des sentiers battus et entrer dans le territoire du développement Web Java ? La bonne nouvelle pour vous est que le langage est livré avec une API Servlet complète qui vous permet de créer des applications Web robustes sans trop de tracas.

Créer des applications Java avec des servlets

Nous avons donc déjà créé les fichiers de configuration de l'application. Cependant, dans son état actuel, il ne fait littéralement rien. Nous voulons que les clients puissent s'inscrire à l'aide d'un formulaire HTML, donc la prochaine chose que nous devons faire est de créer des fichiers JSP qui afficheront le formulaire ci-dessus et les détails du client une fois l'inscription réussie. C'est ce que nous allons faire maintenant.

Travail sur le look

L'apparence de l'application sera définie par deux fichiers JSP - dans le contexte de MVC, ils sont appelés vues. Le premier sera responsable de l'affichage du formulaire d'inscription et des éventuelles erreurs causées après validation des données saisies. La seconde sera une page d'accueil normale qui affichera les données saisies par le client une fois le processus d'inscription terminé avec succès.

Voici le premier fichier JSP :

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> Inscription

Inscription

$(violation).

Vous avez aimé l'article ? A partager entre amis :