Você está na página 1de 25

Servlets

Formation Java
Adel ELJ, Architecte J2EE

Adel ELJ, WEB SOFT TECHNOLOGY


Qu’est ce qu'une servlet

• Une servlet est un code Java utilisé pour étendre


les fonctionnalités d'un serveur Web

• C'est :
– Une application côté serveur
– Utilisée pour générer du contenu dynamique
– Chargée dynamiquement quand elle est
demandée

Adel ELJ, WEB SOFT TECHNOLOGY


L'interface Servlet

public interface Servlet {

public void destroy();


public void init(ServletConfig) throws ServletException;
public void service(ServletRequest, ServletResponse)
throws ServletException, IOException;
public ServletConfig getServletConfig();
public String getServletInfo();

javax.servlet.GenericServlet
javax.servlet.http.HttpServlet

Adel ELJ, WEB SOFT TECHNOLOGY


Model d’accès des servlets

Adel ELJ, WEB SOFT TECHNOLOGY


Servlet & Conteneur

Le conteneur de servlets associe à


des URLs virtuels une servlet

Adel ELJ, WEB SOFT TECHNOLOGY


Servlet: Appel
• Objet généralisé
• Possède une méthode doGet
• Est exécutée dans un serveur Web
• Appelée par un browser

Serveur Web

Servlet
Browser
doGet() {
URL avec paramètres …
}

Adel ELJ, WEB SOFT TECHNOLOGY


Servlet HelloServlet
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class HelloSerlet extends HttpServlet {

public void doGet (HttpServletRequest requset,


HttpServletResponse response) throws
ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>Bonjour le
monde</title></head>");
out.println("<body><h1>Bonjour le monde</h1></body>");
out.println("</html>");
}
}
Adel ELJ, WEB SOFT TECHNOLOGY
Appeler une servlette

Browser Serveur WhebSphere


HTML page servlet: Test.java

<FORM ACTION="URL">
<INPUT TYPE = text Internet
NAME="field"> Exécution
</FORM> de Java

page HTML

Adel ELJ, WEB SOFT TECHNOLOGY


Configuration d’une appli Web

Le fichier web.xml
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">
<web-app>
<display-name>Mon application Web</display-name>
<servlet> nom de la servlet
<servlet-name>maServlet</servlet-name>
<servlet-class>west.formation.j2ee.servlet.MaServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>maServlet</servlet-name>
<url-pattern>*.test</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>maServlet</servlet-name>
<url-pattern>/toto</url-pattern> URI d’accès
</servlet-mapping>
</web-app>
Adel ELJ, WEB SOFT TECHNOLOGY
Configuration d’une appli Web

Paramètres d’initialisation d’une servlet

association name/value
<servlet>
<servlet-name>maServlet</servlet-name>
<servlet-class>west.formation.j2ee.servlet.MaServlet</servlet-class>
<init-param>
<param-name>parametre1</param-name>
<param-value>valeur1</param-value>
</init-param>
<init-param>
<param-name>parametre2</param-name>
<param-value>valeur2</param-value>
</init-param>
</servlet>

Adel ELJ, WEB SOFT TECHNOLOGY


Cycle de vie d’une servlet

Le cycle de vie d'une servlet :


1. la méthode init() est appelée après le
chargement ;
2. une méthode service() est appelée à
chaque requête dans un nouveau
thread.
3. la méthode destroy() est appelée pour le
déchargement.

Adel ELJ, WEB SOFT TECHNOLOGY


Informations sur la requête

protected void doGet(HttpServletRequest request, HttpServletResponse response)


throws ServletException, IOException {
response.setContentType("text/plain");
PrintWriter out= response.getWriter(); GET, POST, PUT etc.
out.println("Protocol: " + request.getProtocol());
out.println("Scheme: " + request.getScheme());
out.println("ServerName: " + request.getServerName());
out.println("ServerPort: " + request.getServerPort()); Chemin virtuel complet
out.println("RemoteAddr: " + request.getRemoteAddr());
out.println("RemoteHost: " + request.getRemoteHost());
out.println("Method: " + request.getMethod());
out.println("requestuestURI: " + request.getRequestURI()); Chemin de la servlet
out.println("ServletPath: " + request.getServletPath());
out.println("PathInfo: " + request.getPathInfo());
out.println("PathTranslated: " + request.getPathTranslated());
out.println("QueryString: " + request.getQueryString()); Chemin de la
out.println("RemoteUser: " + request.getRemoteUser()); ressource
out.println("AuthType: " + request.getAuthType());
}

Chemin sur le serveur


Adel ELJ, WEB SOFT TECHNOLOGY
Informations sur la requête (2)

Déclaration de la servlet « header »

Définition des servlets

<servlet>
<servlet-name>header</servlet-name>
<servlet-class>west.formation.j2ee.servlet.HeaderServlet</servlet-class>
</servlet>
<servlet>

</servlet> Chemin de la servlet
...
<servlet-mapping>
<servlet-name>header</servlet-name>
<url-pattern>/header/*</url-pattern>
</servlet-mapping>

Définition des associations Adel ELJ, WEB SOFT TECHNOLOGY


Informations sur la requête (3)

URL complète

Informations sur la requête

Adel ELJ, WEB SOFT TECHNOLOGY


Entêtes de la requête

En-tête = Informations envoyées par le browser

protected void doGet(HttpServletRequest request, HttpServletResponse response)


throws ServletException, IOException {

response.setContentType("text/plain"); Ensemble des noms


PrintWriter out= response.getWriter(); des entêtes

Enumeration e= request.getHeaderNames();
for (; e.hasMoreElements();) {
String name= (String) e.nextElement();
out.println(name + ' ' + request.getHeader(name));
}
}

Valeur d’un entête

Adel ELJ, WEB SOFT TECHNOLOGY


En-têtes de la requête

Entêtes

Adel ELJ, WEB SOFT TECHNOLOGY


Paramètres d’initialisation

Les paramètres sont déclarés dans le fichier web.xml

<servlet>
<servlet-name>initParam</servlet-name>
<servlet-class>west.formation.j2ee.servlet.InitParamServlet</servlet-class>
<init-param>
<param-name>count</param-name>
<param-value>5</param-value>
</init-param>
<init-param>
<param-name>message</param-name>
<param-value>hello config</param-value>
</init-param>
</servlet>

Adel ELJ, WEB SOFT TECHNOLOGY


Paramètres d’initialisation (2)

L’objet ServletConfig permet de récupérer les


paramètres
public class InitParamServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/plain"); Demande la valeur du
PrintWriter out= response.getWriter(); paramètre "count"
for(int i=0;i<count;i++) {
out.println(message);
}
}
public void init(ServletConfig config) throws ServletException {
count = Integer.parseInt(config.getInitParameter("count"));
message = config.getInitParameter("message");
}
private int count;
private String message;
}
Adel ELJ, WEB SOFT TECHNOLOGY
Paramètres d’initialisation (3)

Le destroy doit libérer les ressources !!

protected void doGet(HttpServletRequest request, HttpServletResponse response)


throws ServletException, IOException {
… Stockage des paramètres
}
public void init(ServletConfig config) throws ServletException {
super.init(config);

count = Integer.parseInt(config.getInitParameter("count"));
message = config.getInitParameter("message");
}
public void destroy() {
message=null;
}
Libération des paramètres
private int count;
private String message;
Adel ELJ, WEB SOFT TECHNOLOGY
Les formulaires

Deux méthodes de passage de paramètres :


• GET (dans l’URL)
• POST (dans la requête HTTP)

Gestion uniforme au niveau des servlets

Adel ELJ, WEB SOFT TECHNOLOGY


Les formulaires GET

HTML pour la méthode GET


<form enctype="application/x-www-form-urlencoded"
action="subscribe" method=GET>
Titre :
<select name=title>
<option value="Mr">Mr
<option value="Ms">Mme
</select>
Nom :
<input type=text size=20 name=username>
Prénom :
<input type=text size=20 name=firstname>
<hr>
<input type=submit value="Envoi">
<input type=reset value="Réinitialiser">
</form>

Adel ELJ, WEB SOFT TECHNOLOGY


Les formulaires GET (2)

Utilisation des méthodes getParameter*()

protected void doGet(HttpServletRequest request, HttpServletResponse response)


throws ServletException, IOException {
response.setContentType("text/html"); Ensemble des paramètres
PrintWriter out= response.getWriter(); de la requète
out.println("<html><body bgcolor=\"white\">");
Enumeration e=request.getParameterNames();
for(;e.hasMoreElements();) {
String name=(String)e.nextElement();
String value=request.getParameter(name);
out.println(name+'='+value+"<br>");
Valeurs d’un paramètre
}
out.println("</body></html>");
de la requète
}

Adel ELJ, WEB SOFT TECHNOLOGY


Les formulaires POST

HTML pour la méthode POST


<form enctype="application/x-www-form-urlencoded"
action="subscribe" method=POST>
Titre :
<select name=title>
<option value="Mr">Mr
<option value="Ms">Mme
</select>
Nom :
<input type=text size=20 name=username>
Prénom :
<input type=text size=20 name=firstname>
<hr>
<input type=submit value="Envoi">
<input type=reset value="Réinitialiser">
</form>

Adel ELJ, WEB SOFT TECHNOLOGY


Les formulaires POST (2)

Utilisation des méthodes getParameter*()

protected void doPost(HttpServletRequest request, HttpServletResponse response)


throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out= response.getWriter();
Ensemble des paramètres
out.println("<html><body bgcolor=\"white\">"); de la requète

Enumeration e=request.getParameterNames();
for(;e.hasMoreElements();) {
String name=(String)e.nextElement();
String value=request.getParameter(name);
out.println(name+'='+value+"<br>");
} Valeurs d’un paramètre
de la requète
out.println("</body></html>");
}

Adel ELJ, WEB SOFT TECHNOLOGY


Session

L’objet HttpSession gère les sessions

Création : Créé une session si


request.getSession() non existante
request.getSession(boolean create)

Gestion d’association clé/valeur :


session.getAttributeNames()
session.getAttribute(String name)
session.setAttribute(String name, Object value)
session.removeAttribute(String name)

Destruction :
session. invalidate() Invalide toutes les sessions
session. logout() pour un client

Adel ELJ, WEB SOFT TECHNOLOGY

Você também pode gostar