- Ressources
- Langages
- Java
- Les collections
- Conversion & Casting
- Dates
- Tableau
- Bytes
- Formatage
- Traitement de fichiers
- Erreurs
- Le fichier Manifest
- Servlet
- EJB 2.x
- EJB 3.x
- JNDI
- Les méthodes
- Les Threads
- Les Opérateurs
- Les Mots clés
- MOM - JMS
- Class loader
- Garbage Collector
- Les transactions
- Les primitives
- Les expressions régulières
- Les annotations
- Les génériques
- CDI
- Java
Servlet
Une Servlet s’exécute dans un moteur de Servlet ou conteneur de Servlet permettant d’établir le lien entre la Servlet et le serveur Web
Une Servlet s'exécute par l'intermédiaire d'une machine virtuelle
HTTP Servlet
Exemple d'une servlet spécifique au protocole HTTP
//Importation de la bibliothèque Java des Servlets
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
//La classe étend de HttpServlet
public class HelloWorld extends HttpServlet {
//La méthode (redéfinie) doGet traite les requêtes GET
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
//Retour au format HTML
res.setContentType("text/html");
PrintWriter out = res.getWriter();
out.println("<html>");
out.println("<head><title>Bonjour tout le monde</title></head>");
out.println("<body>");
out.println("Bonjour tout le monde");
out.println("</body></html>");
}
}
L'implémentation par défaut des méthodes doXXX(…) renvoie une erreur de type HTTP 405.
Exemple d'une servlet qui effectue un téléchargement de fichier sur le client
public class DownloadFileServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
try {
//Lecture du fichier (ici sur le serveur)
InputStream is = new FileInputStream("c:/dd.txt");
OutputStream os = res.getOutputStream();
res.setContentType("text/plain");
//Indiquer que c'est un contenu à télécharger
res.setHeader("Content-Disposition","attachment;filename=NomDuFichier.txt");
int count;
byte buf[] = new byte[4096];
while ((count = is.read(buf)) > -1) {
os.write(buf, 0, count);
}
is.close();
os.close();
} catch (Exception e) {
// Y a un problème.
}
}
}
public class DownloadFileServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
byte[] contenu = ... ;
String fileName = ... ;
res.setContentType("application/pdf");
res.setHeader("Content-Disposition", "inline; filename=\"" + fileName + "\"");
BufferedOutputStream cout = new BufferedOutputStream(res.getOutputStream());
cout.write(contenu);
cout.close();
Redirection
La redirection s'effectue au moyen de la méthode sendRedirect. L'appel à cette méthode n'interrompt pas le traitement java. Attention pour une redirection HTTPS, il faut spécifier l'url complète
response.sendRedirect(URL_PAGE_REDIRECTION) ;
Pour l'affichage d'une page d'erreur, il est aussi possible de lever directement l'erreur
response.sendError(HttpServletResponse.SC_NOT_FOUND);
Dans ce cas, la page 404 prévue dans le fichier web.xml sera affichée
<error-page> <error-code>404</error-code> <location>/error.htm</location> </error-page>
Récupération des valeurs contenues dans la requêtes
Les valeurs suivantes peuvent être récupérées, soit en utilisant
Enumeration enTetes = req.getHeaderNames();
while (enTetes.hasMoreElements()) {
String enTete = (String) enTetes.nextElement();
out.println(""
+ enTete
+ " "
+ req.getHeader(enTete)
+ " ");
}
Soit en utilisant directement la méthode getXXX() de l'objet requête
| Host | localhost:9080 |
| User-Agent | Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) Gecko/20061010 Firefox/2.0 |
| Accept | text/xml, application/xml, application/xhtml+xml, text/html;q=0.9, text/plain;q=0.8, image/png, */*;q=0.5 |
| Accept-Language | fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3 |
| Accept-Encoding | gzip,deflate |
| Accept-Charset | ISO-8859-1,utf-8;q=0.7,*;q=0.7 |
| Keep-Alive | 300 |
| Connection | keep-alive |
| Cookie | JSESSIONID=0000rQrscijX4kdBwOXZm8foTdt:-1 |
| getAuthType() | null |
| getContentLength() | -1 |
| getContentType() | null |
| getHeader("Accept") | text/xml, application/xml, application/xhtml+xml, text/html;q=0.9, text/plain;q=0.8, image/png, */*;q=0.5 |
| getHeader("Referer") | null |
| getHeader("User-Agent") | Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) Gecko/20061010 Firefox/2.0 |
| getPathInfo() | null |
| getPathTranslated() | null |
| getQueryString() | no=69722472×tamp=20061031162845&token=lkdjajdl%E9asjflask |
| getRequestURI() | /test/GetPdf |
| getRemoteAddr() | 127.0.0.1 |
| getRemoteHost() | localhost |
| getRemoteUser() | null |
| getRequestURL() | http://localhost:9080/test/GetPdf |
| getServerName() | localhost |
| getProtocol() | HTTP/1.1 |
| getServerPort() | 9080 |
Paramètre d'initialisation
Il est possible de paramétrer certaine valeur dans le descripteur de deploiement (web.xml) de la servlet en utilisant les éléments init-param, param-name et param-value.
<web-app>
<servlet>
<servlet-name>MyServletName</servlet-name>
<servlet-class>com.mycompany.MyServlet</servlet-class>
<init-param>
<param-name>param1</param-name>
<param-value>value1</param-value>
</init-param>
<init-param>
<param-name>param2</param-name>
<param-value>value2</param-value>
</init-param>
...
</servlet>
...
</web-app>
La récupération se fait généralement dans la méthode init de la Servlet avec les méthodes getInitParameter(String paramName) et/ou getInitParameterNames().
// La méthode init est appelé par le container de Servlet
// juste avant que la Servlet soit en service.
public void init() throws ServletException {
getServletContext().log("getinit init");
// Récupération de la valeur d'un paramètre précis
String value = getServletConfig().getInitParameter("param1");
// Récupération de tous les paramètres d'initialisation
java.util.Enumeration enum = getServletConfig().getInitParameterNames();
while (enum.hasMoreElements()) {
// Récupération du nom du paramètre
String name = (String) enum.nextElement();
// Récupération de la valeur du paramètre
value = getServletConfig().getInitParameter(name);
}
// Autre possibilité: en utilisant le contexte de la servlet
value = getServletContext().getInitParameter("param1");
}