"petits serveurs".
Les servlets écoutent des requêtes et retournent des réponses.
Les servlets écoutent des requêtes réseau sur un port donné et retournent des réponses. Les requêtes attendues peuvent être de divers type mais dans les faits sont presque toujours de type Web. Dans ce cas les servlets sont des servlets particulières, adaptées au décodage de requêtes Web (protocole HTTP).
C'est le cas le plus courant. Une servlet HTTP hérite
de javax.servlet.http.HttpServlet
. Elle en redéfinit :
void <strong>init</strong>()
exécutée une seule fois après le chargement de la
servlet en mémoire.void
<b>doGet</b>
(<strong>HttpServletRequest,
HttpServletResponse</strong>)
pour traiter les requêtes HTTP de type GET
void
<b>doPost</b>
(<b>HttpServletRequest</b>,
<b>HttpServletResponse</b>)
pour traiter les requêtes HTTP de type POST
void
<b>service</b>
(<b>HttpServletRequest</b>,
<b>HttpServletResponse</b>)
pour traiter tout type de requête HTTP.Des exemples de servlets sont :
Un exemple de code source de servlet est :
import <b>javax.servlet.http</b>.*; <span class="codeComment.js">//
Classes nécessaires aux servlets Web (HTTP)</span><br> <br> public class MaServlet<br> extends <b>HttpServlet</b>
{<br> <span class="codeComment"> /**<br>
* Traitement des requêtes HTTP POST<br>
* @param someRequest La requête HTTP POST<br>
* @param someResponse La réponse HTTP que l'on va remplir<br>
*/ </span><br> public void <b>doPost</b> (<b>HttpServletRequest</b> someRequest, <b>HttpServletResponse</b>
someResponse) {<br> someResponse.<b>setContentType</b> (<span class="codeString">"text/html"</span>); <span class="codeComment">//
Type <a href="/tech/info/soft/net/protocole/6/MIME.html">MIME</a> d'une page <a href="/tech/info/soft/data/doc/html">HTML</a></span><br> java.io.PrintWriter output = someResponse.<b>getWriter</b>();
<span class="codeComment">// Flux d'écriture de la réponse</span><br> <br> output.println (<span class="codeString">"<html>"</span>);<br>
output.println (<span class="codeString">" <head>"</span>); <br> output.println (<span class="codeString">" <title>Bienvenue
!</title>"</span>); <br> output.println (<span class="codeString">" </head>"</span>); <br> output.println
(<span class="codeString">" <body>"</span>); <br> <br> <span class="codeComment">// Valeur du paramètre
"name" envoyé avec la requête ?</span> <br> String userName = someRequest.<b>getParameter</b> (<span class="codeString">"name"</span>); <br> <br> output.println (<span class="codeString">" Bienvenue
"</span> + userName); <br> <br> output.println (<span class="codeString">" </body>"</span>); <br> output.println
(<span class="codeString">"</html>"</span>); <br> }<br>}
Servlet | Version | 2 | Commentaire | ||||
---|---|---|---|---|---|---|---|
Domaine | Technologie | Release | 1 | 2 | 3 | 4 | |
API | HttpSession | lecture valeurs | getValue |
getAttribute |
|||
lecture clés | getValueNames |
getAttributeNames |
|||||
modification | setValue |
setAttribute |
|||||
suppression | removeValue |
removeAttribute |
|||||
getServletContext | Non | Oui | |||||
ServletConfig | getServletName | Non | Oui | ||||
ServletRequest | Langue | Non | getLocale |
||||
Chiffrement | Non | isSecure |
|||||
HttpServletRequest | En-têtes HTTP | Non | getHeaders |
||||
getContextPath | Non | Oui | |||||
Identité de l'appelant | getUserPrincipal |
||||||
Rôle J2EE | Non | isUserInRole |
|||||
HttpServletResponse | En-têtes HTTP | Non | addHeader addIntHeader addDateHeader ... |
||||
RequestDispatcher | Non | Oui | |||||
ServletContext | Paramètres d'initialisation | Non | getInitParameter getInitParameterNames |
||||
getServletContextName | Non | Oui | |||||
getResourcePaths | Non | Oui | |||||
HttpServlet | doHead | Oui | Non | Oui | |||
ServletResponse | resetBuffer | Non | Oui | ||||
Filtres | Non | FilterChain |
|||||
HttpSessionActivationListener | Non | Oui | |||||
ServletRequestListener | Non | Oui | |||||
ServletRequestAttributeListener | Non | Oui | |||||
Descripteur | Algorithme SSL | Non | Oui | ||||
Page d'erreur | Non | <error-page> |
|||||
Assemblage | WebApp | Non | Oui | WAR |
SingleThreadModel
, car cela instancierai autant de servlets que de requêtes simultanées.