Les servlets Java sont des programmes qui s'exécutent sur un serveur Web ou d'application et agissent comme une couche intermédiaire entre une requête provenant d'un navigateur Web ou d'un autre client HTTP et des bases de données ou des applications sur le serveur HTTP.

Les servlets offrent plusieurs avantages par rapport au CGI.

  • Les performances sont nettement meilleures.

  • Les servlets s'exécutent dans l'espace d'adressage d'un serveur Web. Il n'est pas nécessaire de créer un processus distinct pour traiter chaque demande client.

  • Les servlets sont indépendants de la plate-forme car ils sont écrits en Java.

  • Le gestionnaire de sécurité Java sur le serveur applique un ensemble de restrictions pour protéger les ressources sur une machine serveur. Les servlets sont donc fiables.

  • La fonctionnalité complète des bibliothèques de classes Java est disponible pour un servlet. Il peut communiquer avec des applets, des bases de données ou d'autres logiciels via les sockets et les mécanismes RMI que vous avez déjà vus.

Les servlets exécutent les tâches principales suivantes:

  • Lisez les données explicites envoyées par les clients (navigateurs). Cela inclut un formulaire HTML sur une page Web ou il peut également provenir d'une applet ou d'un programme client HTTP personnalisé.

  • Lisez les données de requête HTTP implicites envoyées par les clients (navigateurs). Cela inclut les cookies, les types de supports et les schémas de compression que le navigateur comprend, etc.

  • Traitez les données et générez les résultats. Ce processus peut nécessiter de parler à une base de données, d'exécuter un appel RMI ou CORBA, d'appeler un service Web ou de calculer directement la réponse.

  • Envoyez les données explicites (c'est-à-dire le document) aux clients (navigateurs). Ce document peut être envoyé dans une variété de formats, y compris le texte (HTML ou XML), binaire (images GIF), Excel, etc.

  • Envoyez la réponse HTTP implicite aux clients (navigateurs). Cela comprend le fait d'indiquer aux navigateurs ou aux autres clients le type de document renvoyé (par exemple, HTML), la configuration des cookies et des paramètres de mise en cache, et d'autres tâches similaires.

Un cycle de vie de servlet peut être défini comme l'ensemble du processus depuis sa création jusqu'à sa destruction. Voici les chemins suivis par un servlet.

  • Le servlet est initialisé en appelant la méthode init ().

  • Le servlet appelle la méthode service () pour traiter la demande d'un client.

  • Le servlet se termine en appelant la méthode destroy ().

  • Enfin, le servlet est récupéré par le garbage collector de la JVM.

La méthode init est conçue pour être appelée une seule fois. Il est appelé lorsque le servlet est créé pour la première fois, et n'est pas rappelé à chaque requête utilisateur. Ainsi, il est utilisé pour les initialisations ponctuelles, tout comme avec la méthode init des applets.

Chaque fois que le serveur reçoit une demande de servlet, le serveur génère un nouveau thread et appelle le service. La méthode service () vérifie le type de requête HTTP (GET, POST, PUT, DELETE, etc.) et appelle les méthodes doGet, doPost, doPut, doDelete, etc. selon le cas.

Une requête GET résulte d'une requête normale pour une URL ou d'un formulaire HTML pour lequel aucune METHODE n'est spécifiée et elle doit être gérée par la méthode doGet ().

Une requête POST résulte d'un formulaire HTML qui répertorie spécifiquement POST comme METHODE et doit être gérée par la méthode doPost ().

La méthode destroy () n'est appelée qu'une seule fois à la fin du cycle de vie d'un servlet.

La méthode init () crée ou charge simplement des données qui seront utilisées tout au long de la vie du servlet.

Cette méthode donne à votre servlet une chance de fermer les connexions à la base de données, d'arrêter les threads d'arrière-plan, d'écrire des listes de cookies ou de décomptes de succès sur le disque et d'effectuer d'autres activités de nettoyage.

Cette méthode doit être utilisée pour obtenir des données du serveur.

Cette méthode doit être utilisée pour traiter les données sur le serveur.

La méthode service () est la principale méthode pour effectuer la tâche réelle. Le conteneur de servlet (c'est-à-dire le serveur Web) appelle la méthode service () pour traiter les demandes provenant du client (navigateurs) et pour écrire la réponse formatée au client.

Chaque fois que le serveur reçoit une demande de servlet, le serveur génère un nouveau thread et appelle le service. La méthode service () vérifie le type de requête HTTP (GET, POST, PUT, DELETE, etc.) et appelle les méthodes doGet, doPost, doPut, doDelete, etc. selon le cas.

Voici la signature de cette méthode:

public void service(ServletRequest request, 
                    ServletResponse response) 
   throws ServletException, IOException{
}

La méthode service () est appelée par le conteneur et la méthode de service appelle les méthodes doGe, doPost, doPut, doDelete, etc. selon le cas. Vous n'avez donc rien à voir avec la méthode service () mais vous remplacez doGet () ou doPost () selon le type de requête que vous recevez du client.

Les servlets gèrent automatiquement l'analyse des données de formulaire à l'aide des méthodes suivantes en fonction de la situation:

  • getParameter(): Vous appelez la méthode request.getParameter () pour obtenir la valeur d'un paramètre de formulaire.

  • getParameterValues(): Appelez cette méthode si le paramètre apparaît plus d'une fois et renvoie plusieurs valeurs, par exemple une case à cocher.

  • getParameterNames(): Appelez cette méthode si vous voulez une liste complète de tous les paramètres de la demande actuelle.

La méthode getParameterNames () de HttpServletRequest renvoie la liste complète de tous les paramètres de la requête actuelle. Cette méthode retourne une énumération qui contient les noms des paramètres dans un ordre non spécifié.

Une fois que nous avons une énumération, nous pouvons boucler l'énumération de manière standard, en utilisant la méthode hasMoreElements () pour déterminer quand arrêter et en utilisant la méthode nextElement () pour obtenir chaque nom de paramètre.

Nous pouvons utiliser la méthode getHeaderNames () de HttpServletRequest pour lire les informations d'en-tête HTTP. Cette méthode renvoie une énumération qui contient les informations d'en-tête associées à la requête HTTP actuelle.

Une fois que nous avons une énumération, nous pouvons boucler l'énumération de manière standard, en utilisant la méthode hasMoreElements () pour déterminer quand arrêter et en utilisant la méthode nextElement () pour obtenir chaque nom de paramètre.

Lorsqu'un navigateur demande une page Web, il envoie beaucoup d'informations au serveur Web qui ne peuvent pas être lues directement car ces informations voyagent dans le cadre de l'en-tête de la requête HTTP. HTTPServletRequest représente cette requête HTTP.

lorsqu'un serveur Web répond à une requête HTTP adressée au navigateur, la réponse se compose généralement d'une ligne d'état, de certains en-têtes de réponse, d'une ligne vide et du document. HTTPServletResponse représente cette réponse HTTP.

Obtenez l'objet de PrintWriter à l'aide de request.

PrintWriter out = response.getWriter();

Maintenant, imprimez html.

out.println("Hello World");

Nous pouvons utiliser la méthode setStatus (statuscode) de HttpServletResponse pour envoyer une erreur d'authentification.

// Set error code and reason.
response.sendError(407, "Need authentication!!!" );

La redirection de page est généralement utilisée lorsqu'un document est déplacé vers un nouvel emplacement et que nous devons envoyer le client vers ce nouvel emplacement ou cela peut être dû à un équilibrage de charge ou à une simple randomisation. Le moyen le plus simple de rediriger une requête vers une autre page consiste à utiliser la méthode sendRedirect () de l'objet de réponse.

Cette méthode génère une réponse 302 avec un en-tête Location donnant l'URL du nouveau document.

Cette méthode envoie un code d'état (généralement 404) avec un court message qui est automatiquement mis en forme dans un document HTML et envoyé au client.

Les filtres de servlet sont des classes Java qui peuvent être utilisées dans la programmation de servlet aux fins suivantes:

  • Pour intercepter les demandes d'un client avant qu'il n'accède à une ressource en back-end.

  • Pour manipuler les réponses du serveur avant qu'elles ne soient renvoyées au client.

Il existe différents types de filtres suggérés par les spécifications:

  • Filtres d'authentification.

  • Filtres de compression de données.

  • Filtres de cryptage.

  • Filtres qui déclenchent des événements d'accès aux ressources.

  • Filtres de conversion d'image.

  • Filtres de journalisation et d'audit.

  • Filtres de chaîne MIME-TYPE.

  • Filtres de tokenisation.

  • Filtres XSL / T qui transforment le contenu XML.

Les filtres sont déployés dans le fichier descripteur de déploiement web.xml, puis mappés aux noms de servlet ou aux modèles d'URL dans le descripteur de déploiement de votre application.

Cette méthode est appelée par le conteneur Web pour indiquer à un filtre qu'il est mis en service.

Cette méthode est appelée par le conteneur chaque fois qu'une paire demande / réponse est transmise à travers la chaîne en raison d'une demande client pour une ressource à la fin de la chaîne.

Cette méthode est appelée par le conteneur Web pour indiquer à un filtre qu'il est mis hors service.

Oui.

Oui. L'ordre des éléments de mappage de filtre dans web.xml détermine l'ordre dans lequel le conteneur Web applique le filtre au servlet. Pour inverser l'ordre du filtre, il vous suffit d'inverser les éléments de mappage de filtre dans le fichier web.xml.

Utilisez l'élément error-page dans web.xml pour spécifier l'appel des servlets en réponse à certaines exceptions ou codes d'état HTTP.

Si vous souhaitez avoir un gestionnaire d'erreurs générique pour toutes les exceptions, vous devez définir la page d'erreur suivante au lieu de définir des éléments de page d'erreur séparés pour chaque exception:

<error-page>
   <exception-type>java.lang.Throwable</exception-type >
   <location>/ErrorHandler</location>
</error-page>

Les cookies sont des fichiers texte stockés sur l'ordinateur client et ils sont conservés à diverses fins de suivi des informations. Les servlets Java prennent en charge de manière transparente les cookies HTTP.

La configuration des cookies avec servlet implique trois étapes:

(1) Création d'un objet Cookie: Vous appelez le constructeur Cookie avec un nom de cookie et une valeur de cookie, qui sont tous deux des chaînes.

Cookie cookie = new Cookie("key","value");

Gardez à l'esprit que ni le nom ni la valeur ne doivent contenir d'espace blanc ni aucun des caractères suivants: [] () =, "/? @:;

(2) Définition de l'âge maximum: vous utilisez setMaxAge pour spécifier la durée (en secondes) du cookie doit être valide. La suite mettrait en place un cookie pendant 24 heures.

cookie.setMaxAge(60*60*24);

(3) Envoi du cookie dans les en-têtes de réponse HTTP: vous utilisez response.addCookie pour ajouter des cookies dans l'en-tête de réponse HTTP comme suit:

response.addCookie(cookie);

Pour lire les cookies, vous devez créer un tableau d'objets javax.servlet.http.Cookie en appelant la méthode getCookies () de HttpServletRequest. Parcourez ensuite le tableau et utilisez les méthodes getName () et getValue () pour accéder à chaque cookie et à la valeur associée.

Supprimer les cookies est très simple. Si vous souhaitez supprimer un cookie, il vous suffit de suivre les trois étapes suivantes:

  • Lisez un cookie déjà existant et stockez-le dans l'objet Cookie.

  • Définissez l'âge du cookie sur zéro à l'aide de la méthode setMaxAge () pour supprimer un cookie existant.

  • Ajoutez ce cookie dans l'en-tête de la réponse.

La session permet d'identifier un utilisateur sur plusieurs demandes de page ou de visiter un site Web et de stocker des informations sur cet utilisateur. La session persiste pendant une période de temps spécifiée, sur plus d'une connexion ou demande de page de l'utilisateur.

Vous pouvez ajouter des données supplémentaires à la fin de chaque URL qui identifie la session, et le serveur peut associer cet identificateur de session aux données qu'il a stockées sur cette session. Par exemple, avec http://tutorialspoint.com/file.htm;sessionid=12345, l'identifiant de session est attaché sous la forme sessionid = 12345, accessible sur le serveur Web pour identifier le client.

Vous obtiendrez l'objet HttpSession en appelant la méthode publique getSession () de HttpServletRequest, comme ci-dessous:

// Create a session object if it is already not  created.
HttpSession session = request.getSession();

Lorsque vous avez terminé avec les données de session d'un utilisateur, vous avez plusieurs options:

  • Remove a particular attribute: Vous pouvez appeler la méthode public void removeAttribute (String name) pour supprimer la valeur associée à une clé particulière.

  • Delete the whole session:Vous pouvez appeler la méthode public void invalidate () pour supprimer une session entière. Définition du délai d'expiration de la session: vous pouvez appeler la méthode publique void setMaxInactiveInterval (intervalle int) pour définir le délai d'expiration d'une session individuellement.

  • Log the user out: Les serveurs qui prennent en charge les servlets 2.4, vous pouvez appeler la déconnexion pour déconnecter le client du serveur Web et invalider toutes les sessions appartenant à tous les utilisateurs.

setAttribute (String name, Object value) de l'objet HTTPSession lie un objet à cette session, en utilisant le nom spécifié et peut être utilisé pour mettre à jour un attribut en session.

setMaxInactiveInterval (intervalle int) de l'objet HTTPSession spécifie le temps, en secondes, entre les demandes du client avant que le conteneur de servlet n'invalide cette session.

Le moyen le plus simple d'actualiser une page Web consiste à utiliser la méthode setIntHeader () de l'objet de réponse.

Cela signifie permettre à un site Web de fournir différentes versions de contenu traduites dans la langue ou la nationalité du visiteur.

Cela signifie ajouter des ressources à un site Web pour l'adapter à une région géographique ou culturelle particulière, par exemple la traduction en hindi sur un site Web.

Il s'agit d'une région culturelle ou géographique particulière. Il est généralement appelé symbole de langue suivi d'un symbole de pays séparé par un trait de soulignement. Par exemple, "en_US" représente les paramètres régionaux anglais pour les États-Unis.

Voici la méthode d'objet de requête qui renvoie l'objet Locale.

java.util.Locale request.getLocale()

La méthode suivante renvoie un nom pour le pays des paramètres régionaux approprié pour l'affichage à l'utilisateur.

String getDisplayCountry()

Quelle est la prochaine?

De plus, vous pouvez passer en revue vos missions passées que vous avez effectuées sur le sujet et vous assurer que vous êtes en mesure de parler en toute confiance. Si vous êtes plus frais, l'intervieweur ne s'attend pas à ce que vous répondiez à des questions très complexes, mais vous devez plutôt rendre vos concepts de base très forts.

Deuxièmement, peu importe si vous ne pouviez pas répondre à quelques questions, il importe que quoi que vous ayez répondu, vous ayez dû y répondre avec confiance. Soyez donc confiant lors de votre entretien. Chez tutorialspoint, nous vous souhaitons bonne chance d'avoir un bon intervieweur et tout le meilleur pour votre entreprise future. À votre santé :-)