Le développement d'applications web en Java repose historiquement sur l'API Servlet. Cette technologie permet de générer du contenu dynamique en répondant aux requêtes HTTP envoyées par un client, généralement un navigateur web. L'utilisation d'un environnement de développement intégré (IDE) moderne comme IntelliJ IDEA, couplé à un conteneur de servlets tel qu'Apache Tomcat, facilite grandement la mise en œuvre de ces architectures.
Configuration de l'environnement de développement
Avant de commencer la création du projet, il est essentiel de s'asurer que les outils de base sont correctement installés et configurés :
- JDK 11 ou supérieur : Bien que le JDK 8 ait longtemps été la norme, les versions LTS (Long Term Support) comme le JDK 11 ou 17 sont désormais recommandées pour bénéficier des améliorations de performance et du système de modules.
- Serveur Apache Tomcat : Il agit comme le conteneur web qui exécutera vos Servlets. Assurez-vous de définir la variable d'environnement
CATALINA_HOMEpointant vers le répertoire d'installation. - IntelliJ IDEA : La version Ultimate est préférable pour le support natif de Java EE, bien que la version Community puisse être utilisée avec des plugins tiers pour gérer Tomcat.
Création d'un projet Web et structure
Lors de la création d'un nouveau projet sous IntelliJ, sélectionnez l'archétype Java Enterprise et cochez Web Application. L'IDE générera une structure standardisée comprenant :
src/main/java: Pour vos classes Java et Servlets.src/main/webapp: Pour vos fichiers statiques (HTML, CSS, JS) et les pages JSP.WEB-INF/web.xml: Le descripteur de déploiement qui définit les correspondances entre les URLs et les classes Servlets.
Principes fondamentaux du cycle Requête-Réponse
Le fonctionnement d'un Servlet repose sur l'interception d'une requête HTTP. Lorsqu'un utilisateur soumet un formulaire HTML via une méthode GET ou POST, le serveur Tomcat identifie le Servlet associé grâce au fichier web.xml ou aux annotations @WebServlet.
Voici un exemple de logique de traitement au sein d'un Servlet pour une authentification simplifiée :
@WebServlet(name = "LoginHandler", urlPatterns = {"/verify"})
public class LoginHandler extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String identifiant = req.getParameter("user_id");
String cleAcces = req.getParameter("access_key");
resp.setContentType("text/html;charset=UTF-8");
PrintWriter out = resp.getWriter();
if ("admin".equals(identifiant) && "secret123".equals(cleAcces)) {
out.println("<p>Accès autorisé. Bienvenue !</p>");
} else {
out.println("<p style='color:red;'>Échec de l'authentification.</p>");
}
}
}
Intégration du JavaScript pour des appels asynchrones (AJAX)
Pour améliorer l'expérience utilisateur, il est courant d'utiliser AJAX pour communiquer avec le Servlet sans recharger la page entière. Voici comment restructurer un appel asynchrone en utilisant l'API moderne fetch au lieu de l'ancien XMLHttpRequest.
/**
* Envoie des données au Servlet et met à jour une zone de la page
*/
async function executerAppelServeur() {
const zoneAffichage = document.getElementById("resultat-serveur");
try {
const reponse = await fetch('verify?user_id=demo&access_key=123', {
method: 'POST'
});
if (reponse.ok) {
const contenu = await reponse.text();
zoneAffichage.innerHTML = `<div class="alert">${contenu}</div>`;
} else {
console.error("Erreur réseau : " + reponse.status);
}
} catch (erreur) {
console.error("Échec de la requête : ", erreur);
}
}
Éviter les pièges courants
Lors du développement avec IntelliJ et Tomcat, plusieurs points tcehniques peuvent ralentir la progression :
- Gestion de l'encodage : Pour éviter les problèmes de caractères accentués, forcez l'encodage UTF-8 dans vos Servlets (
resp.setCharacterEncoding("UTF-8")) et dans la configuration de Tomcat. - Mise à jour des ressources : Si vous modifiez uniquement des fichiers HTML ou CSS, utilisez l'option "Update classes and resources" dans IntelliJ pour éviter un redémarrage complet du serveur.
- Modification du web.xml : Toute modification structurelle dans le fichier de configuration
web.xmlnécessite généralement un redéploiement (Redeploy) de l'artefact sur Tomcat.
Évolution vers le découplage Front-end et Back-end
L'utilisation de JSP (JavaServer Pages) tend à diminuer au profit d'architectures découplées. Dans ce modèle, le Servlet ne renvoie plus du HTML, mais du JSON. Le front-end, souvent développé avec des frameworks comme React ou Vue.js, consomme ces données. Cette approche améliore la maintenabilité et permet de déléguer la gestion des ressources statiques à des serveurs plus performants comme Nginx, tout en laissant à Tomcat le traitement de la logique métier.