Servlet d'interface 1.1
Aujourd'hui, nous commençons un nouveau sujet intéressant - les servlets . C'est l'ajout de servlets à Java qui a fait de Java la norme de facto pour les grandes applications serveur. 80% de tous les logiciels d'entreprise dans le monde sont écrits en Java. Et en Chine, tout est à 100 %. Que sont donc les servlets ?
Un servlet est exactement ce qui transforme un programme Java en un service Web et lui permet de traiter les demandes des clients. Et c'était comme ça...
Dans les années 90, immédiatement après l'avènement du World Wide Web, des clients Web (navigateurs) et des serveurs Web sont apparus. Les serveurs Web distribuaient généralement simplement le fichier qu'ils avaient stocké sur Internet : pages html, scripts, images, etc.
À un moment donné, tout le monde est arrivé à la conclusion qu'il faudrait rendre les deux côtés plus intelligents. JavaScript a été ajouté aux pages HTML et des plugins ont été ajoutés aux serveurs - des scripts spéciaux qui ont été appelés en réponse à certaines demandes et ont rendu le comportement du serveur plus flexible et plus intelligent.
Ainsi, un servlet est un tel plugin Java qui a été intégré Java web-server
et lui a permis d'exécuter du code Java lorsqu'il est demandé pour certaines pages. Et déjà ce code Java, représenté par une classe héritée de la classe Servlet, faisait ce que ses développeurs avaient prévu.
Et comme vous le savez déjà, le serveur Web Java le plus populaire est Tomcat . Nommé, soit dit en passant, en l'honneur du chat Tom du dessin animé "Tom et Jerry".
Comment Tomcat interagit-il avec les servlets ? En fait, ce processus est standardisé et s'appelle le cycle de vie du servlet . Dans celui-ci, un servlet est un objet chargeable et un serveur Web est un conteneur de servlet .
Si le servlet n'a pas encore été chargé , alors :
- La classe servlet est chargée par le conteneur.
- Le conteneur crée une instance de la classe (objet) du servlet.
- Le conteneur appelle une méthode
init()
sur l'objet servlet. La méthode est appelée une seule fois.
Cycle de travail standard - répondre à une demande client :
- Chaque requête est traitée dans un thread séparé.
- Le conteneur appelle une méthode
service()
sur le servlet et y transmet les objets ServletRequest et ServletResponse. - Pour terminer le servlet, une méthode est appelée
destroy()
sur l'objet servlet. Il n'est appelé qu'une seule fois.
Il peut y avoir plusieurs raisons pour lesquelles une servlet se termine :
- Le programmeur redémarre le serveur Web, il est nécessaire d'arrêter gracieusement tous les servlets.
- Le programmeur charge une nouvelle version de la servlet, l'ancienne doit être correctement déchargée.
- Et ainsi de suite.
Rappelez-vous l'essentiel : le serveur Web et ses servlets doivent fonctionner sans panne ni redémarrage pendant des mois, en traitant des milliers de requêtes par minute. Par conséquent, le code pour le chargement, le fonctionnement et le déchargement d'un servlet doit toujours être écrit en très haute qualité.
1.2 Classe HttpServlet
La classe Servlet existe pour normaliser le fonctionnement d'un servlet et d'un conteneur. Les programmeurs ne travaillent pas directement avec cette classe. Eh bien, ils fonctionnent rarement. La classe la plus couramment utilisée HttpServlet
est héritée de Servlet.
Cette classe a plusieurs méthodes qui nous seront utiles. Vous les utiliserez souvent :
Méthode | Description | |
---|---|---|
1 | init() |
Appelé une fois lorsque le servlet est chargé |
2 | destroy() |
Appelé une fois lorsque le servlet est déchargé |
3 | service(HttpRequest, HttpResponse) |
Appelé à chaque nouvelle requête au servlet |
4 | doGet(HttpRequest, HttpResponse) |
Appelé pour chaque nouvelle requête GET au servlet |
5 | doPost(HttpRequest, HttpResponse) |
Appelé pour chaque nouvelle requête POST au servlet |
6 | doHead(HttpRequest, HttpResponse) |
Appelé pour chaque nouvelle requête HEAD au servlet |
7 | doDelete(HttpRequest, HttpResponse) |
Appelé pour chaque nouvelle requête DELETE au servlet |
8 | doPut(HttpRequest, HttpResponse) |
Appelé pour chaque nouvelle requête PUT à la servlet |
Les méthodes init()
et destroy()
sont héritées de la classe Servlet. Par conséquent, si vous décidez de les remplacer dans votre servlet, vous devrez également appeler leur implémentation à partir de la classe de base. La commande est utilisée pour cela super.method name()
.
Exemple de servlet :
public class FirstHttpServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Getting the parameter “secret” from request
String secret = request.getParameter("secret");
// Put parameter “secret” into Http-session
HttpSession session = request.getSession(true);
session.setAttribute("secret", secret);
// Print HTML as response for browser
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
out.println("<html>");
out.println("<head>");
out.println("<title>Header</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet example "+ secret +"</h1>");
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
}
}
1.3 méthode de service (HttpServletRequest, HttpServletResponse)
Si vous regardez le traitement d'une requête client du point de vue d'un servlet, alors les choses ressemblent à ceci.
Pour chaque requête client, le conteneur (serveur Web) crée HttpServletRequest
des objets HttpServletResponse
, puis appelle une méthode service(HttpServletRequest request, HttpServletResponse response)
sur le servlet correspondant. Ces objets lui sont passés afin que la méthode puisse prendre les données nécessaires request
et mettre le résultat du travail dans response
.
La méthode service()
a une implémentation par défaut. S'il n'est pas redéfini, il sera exécuté. C'est ce qu'il fait.
La méthode service()
détermine le type de méthode HTTP à partir de la requête (GET, POST, ...) et appelle la méthode correspondant à la requête.
Méthode | Description | |
---|---|---|
1 | service(HttpRequest, HttpResponse) |
Appelé à chaque nouvelle requête au servlet |
2 | doGet(HttpRequest, HttpResponse) |
Appelé pour chaque nouvelle requête GET au servlet |
3 | doPost(HttpRequest, HttpResponse) |
Appelé pour chaque nouvelle requête POST au servlet |
4 | doHead(HttpRequest, HttpResponse) |
Appelé pour chaque nouvelle requête HEAD au servlet |
5 | doDelete(HttpRequest, HttpResponse) |
Appelé pour chaque nouvelle requête DELETE au servlet |
6 | doPut(HttpRequest, HttpResponse) |
Appelé pour chaque nouvelle requête PUT à la servlet |
Dans votre classe, vous pouvez soit redéfinir une méthode service()
, soit la laisser telle quelle, mais ensuite redéfinir les méthodes doGet()
, doPost()
, ... selon vos besoins.
GO TO FULL VERSION