Tutorial Servlets

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 15

Module: J2EE ISTIC

Niveau : LFSI3 A.U: 2018-2019

Tutorial 1
Servlet & JSP

Partie 1 : Créer une Servlet


Implémenter et tester une première servlet HelloWorld permettant d’afficher le message
«Helloworld». Pour cela :

- Créer un projet web dynamique (voir TP1)

- Créer une Servlet en suivant les étapes suivantes:

La perspective Java EE nous montre une icône qui nous permet de créer directement des
classes Java de servlet. C'est que nous allons utiliser pour notre première servlet.

La première rubrique du menu qui s'ouvre est celle qui nous permet de créer une servlet.

Un panneau s'ouvre alors, qui nous permet de spécifier la classe de cette servlet : son
nom, et le nom du package dans lequel cette classe sera placée.

Une servlet hérite nécessairement de HttpServlet, on ne doit donc prendre garde à ce


point si l'on modifie la classe qu'étend notre servlet.

Proposé par : Dr. Ben Othman Ibtissem Page 1 sur 15


Module: J2EE ISTIC
Niveau : LFSI3 A.U: 2018-2019

Le panneau suivant nous permet de fixer les informations sur cette servlet, qui seront
écrites dans le fichierweb.xml de notre application. Le nom de notre servlet, utilisé pour
s'y référer dans le fichier web.xml. Ses paramètres d'initialisation. Le (ou les) paramètres
URL mappings, qui fixeront l'URL à laquelle notre servlet sera disponible.

Proposé par : Dr. Ben Othman Ibtissem Page 2 sur 15


Module: J2EE ISTIC
Niveau : LFSI3 A.U: 2018-2019

Le dernier panneau de création précise le contenu de la classe qu'Eclipse va nous générer.


Par commodité, Eclipse peut créer pour nous différentes méthodes standard de notre
servlet, telles que init(), doGet() oudoPost().

Une fois ces étapes déroulées, notre classe de servlet est créée, et apparaît dans la structure
de notre projet.

Proposé par : Dr. Ben Othman Ibtissem Page 3 sur 15


Module: J2EE ISTIC
Niveau : LFSI3 A.U: 2018-2019

Code de la Servlet créée (par défaut) :


package packageServlets;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* Servlet implementation class Servlet2
*/
@WebServlet("/Servlet2")
public class Servlet2 extends HttpServlet {
private static final long serialVersionUID = 1L;

public Servlet2() {
super();
// TODO Auto-generated constructor stub
}

protected void doGet(HttpServletRequest request,


HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");

PrintWriter out = response.getWriter();


out.println("Hello world !!");
}

protected void doPost(HttpServletRequest request,


HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}

Proposé par : Dr. Ben Othman Ibtissem Page 4 sur 15


Module: J2EE ISTIC
Niveau : LFSI3 A.U: 2018-2019

Confuguration avec le fichier web.xml


<?xml version="1.0" encoding="UTF-8"?>

<web-app …>

<servlet>

<servlet-name>Servlet1</servlet-name>

<servlet-class>packageServlets.Servlet1</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>Servlet1</servlet-name>

<url-pattern>/page1</url-pattern>

</servlet-mapping>

</web-app>

Run on server :

Proposé par : Dr. Ben Othman Ibtissem Page 5 sur 15


Module: J2EE ISTIC
Niveau : LFSI3 A.U: 2018-2019

N.B : Durant le reste du TP, il faut refaire toutes les étapes précédante et réecrire la méthode
doGET() selon vos besoins. Un seul fichier de configuration est utile dans le même projet, il
faut juste le modifier lors de la création des nouvelles servlets.

Exemple 2: Affichage d’un message


protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");

PrintWriter out = response.getWriter();


out.println("Hello world !!");
}

Proposé par : Dr. Ben Othman Ibtissem Page 6 sur 15


Module: J2EE ISTIC
Niveau : LFSI3 A.U: 2018-2019

Associer une vue à une Servlet


Première version de la servlet :
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");

PrintWriter out = response.getWriter();


out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset=\"utf-8\" />");
out.println("<title>Test</title>");
out.println("</head>");
out.println("<body>");
out.println("<p> Bonjour les Servlets!</p>");
out.println("</body>");
out.println("</html>");
}

Proposé par : Dr. Ben Othman Ibtissem Page 7 sur 15


Module: J2EE ISTIC
Niveau : LFSI3 A.U: 2018-2019

Seconde version de la servlet, plus concise, qui fait appel à la JSP :

protected void doGet(HttpServletRequest request,


HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
this.getServletContext().getRequestDispatcher("/WEB-
INF/FichierJSP4.jsp").forward(request, response);

Fichier FichierJSP4.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Test</title>
</head>
<body>
<p>Bonjour les servlets à partir d'une JSP !</p>
</body>
</html>

Proposé par : Dr. Ben Othman Ibtissem Page 8 sur 15


Module: J2EE ISTIC
Niveau : LFSI3 A.U: 2018-2019

Partie 2 : Transmission des données


Utilisons maintenant les servlets pour mettre en place du dynamisme dans les
applications :

1. Données issues du serveur : les attributs


Transmettre des variables de la servlet à la JSP

Créer une chaîne de caractères depuis la servlet, et transmettre-la à la vue pour


affichage.
public void doGet( HttpServletRequest request, HttpServletResponse
response ) throws ServletException, IOException{
String message = "Transmission de variables : OK !";
request.setAttribute( "test", message );
this.getServletContext().getRequestDispatcher( "/WEB-INF/test.jsp"
).forward( request, response );
}

Code : JSP /WEB-INF/test.jsp


<%@ page pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head> <meta charset="utf-8" /> <title>Test</title> </head>
<body>
<p>Ceci est une page générée depuis une JSP.</p>
<p>
<% String attribut = (String) request.getAttribute("test");
out.println( attribut ); %>
</p>
</body>
</html>

Proposé par : Dr. Ben Othman Ibtissem Page 9 sur 15


Module: J2EE ISTIC
Niveau : LFSI3 A.U: 2018-2019

Exemple 2 :
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setAttribute("heure", "jour");
this.getServletContext().getRequestDispatcher("/WEB-
INF/FichierJSP5.jsp").forward(request, response);

Fichier.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"


pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Test</title>
</head>
<body>
<p>
<%
String heure = (String) request.getAttribute("heure");
if (heure.equals("jour")) {
out.println("Bonjour");
}
else {
out.println("Bonsoir");
}
%>
</p>
<p>
<%
for (int i = 0 ; i < 20 ; i++) {
out.println("Une nouvelle ligne !<br />");
}
%>
</p>
</body>
</html>

Proposé par : Dr. Ben Othman Ibtissem Page 10 sur 15


Module: J2EE ISTIC
Niveau : LFSI3 A.U: 2018-2019

2. Données issues du client : les paramètres

Qu'est-ce qu'un paramètre de requête ?

La méthode GET du protocole HTTP permet au client de transmettre des données


au serveur en les incluant directement dans l'URL, dans ce qui s'appelle les
paramètres ou query strings en anglais. Nous allons rendre notre projet interactif,
en autorisant le client à transmettre des informations au serveur.

Les paramètres sont transmis au serveur directement via l'URL.


D’une manière générale, une URL est de la forme:

 le premier paramètre est séparé du reste de l'URL par le caractère « ? » ;


 les paramètres sont s éparés entre eux par le caractère « & » ;
 une valeur est attribuée à chaque paramètre via l'opérateur « = ».
Exemple de transmission des données via l’URL

La servlet Test.java récupère le paramètre "name" dans l'URL et le transmet à la vue :

protected void doGet(HttpServletRequest request,


HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
request.setAttribute("name", name);
this.getServletContext().getRequestDispatcher("/WEB-
INF/bonjour.jsp").forward(request, response);
}
}

Proposé par : Dr. Ben Othman Ibtissem Page 11 sur 15


Module: J2EE ISTIC
Niveau : LFSI3 A.U: 2018-2019

La vue bonjour.jsp se contente d'afficher le nom qu'elle a reçu du contrôleur :


<%@ page pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Test</title>
</head>
<body>
<p>Bonjour
<%
String name = (String) request.getAttribute("name");
out.println(name);
%>
</p>
</body>
</html>

Traitement des formulaires

Proposé par : Dr. Ben Othman Ibtissem Page 12 sur 15


Module: J2EE ISTIC
Niveau : LFSI3 A.U: 2018-2019

Pour lire les données du formulaire : traiter la requête

 Accéder par l’intermédiaire de l’objet HttpServletRequest aux paramètres


 String getParameter(String p) : retourne la valeur du paramètre p
 String[] getParamterValues(String p) : retourne les valeurs du paramètre p

Fichier de la Servlet Servlet8.java :

La méthode doGet :
protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("TEXT/PLAIN");
PrintWriter out=response.getWriter();
out.println("Nom: "+ request.getParameter("nom"));
out.println("Prénom: "+ request.getParameter("prenom"));
if(request.getParameterValues("radio1")[0].equals("mas"))
out.println("l'etudiant");
if(request.getParameterValues("radio1")[0].equals("fem"))
out.println("l'etudiante");
out.println("a écrit sur le cours "+
request.getParameter("cours")+" que ");
out.println(request.getParameter("textarea"));
}

Fichier web.xml :
<servlet>
<servlet-name>Servlet8</servlet-name>
<servlet-class>packageServlets.Servlet8</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Servlet8</servlet-name>
<url-pattern>/page8</url-pattern>
</servlet-mapping>
<servlet>

Fichier FormulaireInscription.jsp :
<%@ page pageEncoding="UTF-8" %>

Proposé par : Dr. Ben Othman Ibtissem Page 13 sur 15


Module: J2EE ISTIC
Niveau : LFSI3 A.U: 2018-2019
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Test</title>
</head>
<body>
<form action="page8" method="get">
<p>
Nom : <input type="text" name="nom">
Prénom : <input type="text" name="prenom">
</p>
<p>
Sexe :
<input type="radio" name="radio1" value="sexe" checked>masculin
<input type="radio" name="radio1" value="sexe">féminin
</p>
<p>Commentaire :<br>
<textarea name="textarea" cols="50" rows="10"> </textarea><br>
<input type="submit" name="Submit" rows="5" value="Soumettre">
</p>
</form>
</body>
</html>

Run on server du fichier FormulaireInscription.jsp :

Proposé par : Dr. Ben Othman Ibtissem Page 14 sur 15


Module: J2EE ISTIC
Niveau : LFSI3 A.U: 2018-2019

Après le remplissage du formulaire, appuyer sur le bouton « Soumettre », la page suivante s’affichera :

Proposé par : Dr. Ben Othman Ibtissem Page 15 sur 15

Vous aimerez peut-être aussi