Servlet et son cycle de vie
Un Servlet est une composante côté serveur qui traite les requêtes HTTP. Il implémente l'intefrace javax.servlet.Servlet et est configuré dans des fichiers de déploiement comme web.xml. Le cycle de vie d'un Servlet comprend l'initialisation via la méthode init(), le traitement des requêtes avec service() qui redirige vers des méthodes spécifiques comme doGet() ou doPost(), et la libération des ressources par destroy().
Contrairement à CGI qui crée un processus distinct pour chaque requête, les Servlets utilisent un modèle multithread, où une instance peut gérer plusieurs requêtes simultanément, ce qui améliore l'efficacité.
Differences entre requêtes GET et POST
Les requêtes GET récupèrent des données du serveur et transmettent les paramètres dans l'URL, tandis que POST envoie des données dans le corps de la requête, offrant plus de sécurité et supportant des volumes plus importants. Les formulaires HTML utilisent GET par défaut, mais POST est recommandé pour les soumissions de données sensibles ou volumineuses.
Forward versus Redirect
Le forward est une action serveur où la requête est transférée en interne à une autre ressource, comme une page JSP, sans changemant d'URL visible pour le client. Exemple de code avec des noms modifiés : requete.getRequestDispatcher("/succes.jsp").forward(requete, reponse);
Le redirect envoie un code de statut HTTP (comme 302) au client, qui doit refaire une requête vers une nouvelle URL. Cela permet de rediriger vers des sites externes ou de gérer les connexions utilisateur.
Gestion des sessions avec cookies et HttpSession
Les cookies sont stockés côté client et permettent de persister des données entre les requêtes. Voici un exemple de code avec des noms de variables modifiés :
Cookie preferenceUtilisateur = new Cookie("theme", "sombre");
preferenceUtilisateur.setMaxAge(2592000); // 30 jours en secondes
reponse.addCookie(preferenceUtilisateur);
Pour récupérer des cookies :
Cookie[] tousCookies = requete.getCookies();
if (tousCookies != null) {
for (int index = 0; index < tousCookies.length; index++) {
Cookie cookieTemp = tousCookies[index];
if ("theme".equals(cookieTemp.getName())) {
String valeurTheme = cookieTemp.getValue();
}
}
}
L'objet HttpSession stocke les données côté serveur pour un utilisateur spécifique, utile pour les paniers d'achat ou les profils. Il est obtenu via requete.getSession() et permet de définir des attributs avec setAttribute().
JSP et intégration avec Servlets
JSP est une extension des Servlets, compilée en une classe Servlet lors de la première requête. Les JSP incluent des objets implicites comme request, response et session pour faciliter le développement web. Les inclusions statiques (<%@ include file="header.jsp" %>) et dynamiques (<jsp:include page="footer.jsp" />) permettent de modulariser le code.
Pour résoudre les problèmes d'encodage dans JSP, configurez le type de contenu avec <%@page contentType="text/html;charset=UTF-8" %> et utilisez requete.setCharacterEncoding("UTF-8") pour les formulaires.
Architecture MVC et Tomcat
Le modèle MVC sépare les applications web en composants : le Modèle gère la logique métier, la Vue affiche les données, et le Contrôleur dirige les requêtes. Tomcat est un serveur d'aplpications qui déploie et exécute les composants Java EE comme les Servlets et JSP. Il gère automatiquement le recompilation des JSP modifiés pour un développement efficace.
La sécurité des threads dans les Servlets est cruciale : évitez de définir des variables d'instance partagées, et préférez les variables locales dans les méthodes. Les attributs en lecture seule peuvent être déclarés comme final pour éviter les problèmes de concurrence.