Un ''servlet'' utilise du code ''Java'' dans lequel est mis du code ''HTML'' ou ''XML''. Toutes les données de la page étant générées par la ''servlet'', il est possible de générer du ''HTML 4.01'' ou du ''HTML 5'' sans aucune difficulté. Tous les exemples ci-dessous utilisent le [[helloworld:design_pattern:bean:java|BeanPersonne]]. =====Cycle de vie===== {{:helloworld:web:java:servlet:cycle_de_vie_1.jpg|Cycle de vie 1}} {{:helloworld:web:java:servlet:cycle_de_vie_2.jpg|Cycle de vie 2}} [[http://javawebaction.blogspot.com/2011/07/what-is-java-servlet-life-cycle-and-how.html|What is Java Servlet Life Cycle and how to explain it]] {{ :helloworld:web:java:servlet:java_web_development_what_is_java_servlet_life_cycle_and_how_to_explain_it_2020-04-26_12_14_05_am_.html |Archive du 09/07/2011 le 27/04/2020}} =====Création du projet===== Nécessite un projet de type [[ide:eclipse:projet|Dynamic Web Project]]. Une fois le projet généré, il faut créer la servlet. Pour cela : ''File|New|Servlet'' et choisissez comme ''Superclass'' ''javax.servlet.http.HttpServlet''. Si la super classe n'est pas disponible, c'est que le ''Dynamic Web Project'' n'a pas été correctement créé. Ensuite cliquez sur ''Next|Next'' et demandez à implémenter les méthodes ''doGet'' et ''doPost'' en fonction des besoins. {{:helloworld:web:java:servlet:1.png|Étape 1}}{{:helloworld:web:java:servlet:2.png|Étape 2}}{{:helloworld:web:java:servlet:3.png|Étape 3}}{{:helloworld:web:java:servlet:4.png|Étape 4}} La création d'une servlet crée automatiquement un fichier ''web.xml''. Si un message de type ''IWAE0035I No servlets exist to add'' apparait sous Gentoo, il faut suivre les instructions de [[https://forums.gentoo.org/viewtopic-t-934004.html|www-servers/tomcat-7.0.29-r1 with Eclipse WST]] {{ :helloworld:web:java:servlet:gentoo_forums_view_topic_-_solved_www-servers_tomcat-7.0.29-r1_with_eclipse_wst_2020-04-26_12_11_16_am_.html |Archive du 20/08/2012 le 27/04/2020}}, à savoir : cd /usr/share/tomcat-8/lib ln -s /usr/share/eclipse-ecj-4.4/lib/ecj.jar ln -s /usr/share/tomcat-servlet-api-3.1/lib/el-api.jar ln -s /usr/share/tomcat-servlet-api-3.1/lib/jsp-api.jar ln -s /usr/share/tomcat-servlet-api-3.1/lib/servlet-api.jar =====Exemple 1 - La base===== package com.llgc; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.nio.charset.StandardCharsets; 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 Servlet */ @WebServlet ("/Servlet") public class Servlet extends HttpServlet { /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding ("UTF-8"); PrintWriter out = response.getWriter (); response.setContentType ("text/html"); out.println (""); out.println (""); out.println (""); out.println (""); out.println ("Insert title here"); out.println (""); out.println (""); out.println ("

"); if (15 % 2 == 0) { out.print ("15 est un nombre pair."); } else { out.print ("15 est un nombre impair."); } out.println ("
"); switch (16 % 2) { case 0: out.print ("16 est un nombre pair."); break; default: out.print ("16 est un nombre impair."); break; } out.println ("

"); out.println (""); out.println (""); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet (request, response); } }
Rendu : 15 est un nombre impair. 16 est un nombre pair. =====Exemple 2 - Utilisation d'un Bean===== Le Bean utilisé est celui d'une [[helloworld:design_pattern:bean:java|personne]]. package com.llgc; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.nio.charset.StandardCharsets; 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 { /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding ("UTF-8"); PrintWriter out = response.getWriter (); response.setContentType ("text/html"); out.println (""); out.println (""); out.println (""); out.println (""); out.println ("Insert title here"); out.println (""); out.println (""); BeanPersonne perso1 = new BeanPersonne (); perso1.setTaille (170); perso1.setYeuxBleus (true); BeanPersonne perso2 = new BeanPersonne (); perso2.setTaille (160); perso2.setYeuxBleus (false); out.println ("

"); out.println (" La personne 1 possède une taille de " + perso1.getTaille () + " cm et"); if (!perso1.isYeuxBleus ()) { out.print ("n'a pas"); } else { out.print ("a"); } out.println (" les yeux bleus.
"); out.println (" La personne 2 possède une taille de " + perso2.getTaille () + " cm et"); if (!perso2.isYeuxBleus ()) { out.print ("n'a pas"); } else { out.print ("a"); } out.println (" les yeux bleus."); out.println ("

"); out.println (""); out.println (""); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet (request, response); } }
Rendu : La personne 1 possède une taille de 170 cm et a les yeux bleus. La personne 2 possède une taille de 160 cm et n'a pas les yeux bleus. =====Exemple 3 - Formulaire avec Bean global et session===== package com.llgc; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.nio.charset.StandardCharsets; import javax.servlet.ServletConfig; 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 Servlet3 */ @WebServlet ("/Servlet3") public class Servlet3 extends HttpServlet { @Override public void init (ServletConfig config) throws ServletException { BeanPersonne pers = new BeanPersonne (); pers.setTaille (123); config.getServletContext ().setAttribute ("beanApp", pers); super.init (config); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding ("UTF-8"); PrintWriter out = response.getWriter (); BeanPersonne pers = new BeanPersonne (); request.getSession (true).setAttribute ("beanSession", pers); response.setContentType ("text/html"); out.println (""); out.println (""); out.println (""); out.println (""); out.println ("Insert title here"); out.println (""); out.println (""); out.println ("
"); out.println ("
"); out.println (" Taille : "); out.println ("
"); out.println (""); out.println (""); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding ("UTF-8"); PrintWriter out = response.getWriter (); BeanPersonne persApp = (BeanPersonne) getServletContext ().getAttribute ("beanApp"); BeanPersonne persLoc = (BeanPersonne) request.getSession (true).getAttribute ("beanSession"); persLoc.setTaille (Integer.parseInt (request.getParameter ("taille"))); response.setContentType ("text/html"); out.println (""); out.println (""); out.println (""); out.println (""); out.println ("Insert title here"); out.println (""); out.println (""); out.println (" Valeur par défaut du bean application : " + persApp.getTaille () + ".
"); out.println (" Valeur saisie du bean local : " + persLoc.getTaille ()); out.println ("
"); out.println (""); out.println (""); } }
Rendu du formulaire : {{:helloworld:web:java:servlet:rendu_ex3.png|Rendu exemple 3}} Rendu de la réponse : Valeur par défaut du bean application : 123. Valeur saisie du bean local : 153 =====Exemple 3b - avec validation des données===== Dans le cas d'une ''servlet'', la vérification des données se fait dans la méthode ''doPost''. Le ''Javascript'' peut être utilisé en pré-traitement. =====Exemple 4 - context-param et init-param===== Ajout de 3 ''context-param''. EL Faces Servlet javax.faces.webapp.FacesServlet user utilisateur password mot de passe driver com.mysql.jdbc.Driver package com.llgc; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.nio.charset.StandardCharsets; import javax.servlet.ServletException; import javax.servlet.annotation.WebInitParam; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class Servlet4 */ @WebServlet (urlPatterns = "/Servlet4", initParams = { @WebInitParam (name = "user2", value = "utilisateurServlet") }) public class Servlet4 extends HttpServlet { /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding ("UTF-8"); PrintWriter out = response.getWriter (); response.setContentType ("text/html"); out.println (""); out.println (""); out.println (""); out.println (""); out.println ("Insert title here"); out.println (""); out.println (""); out.println ("

"); out.println ("nom : " + getServletContext ().getInitParameter ("user") + "
"); out.println ("pass : " + getServletContext ().getInitParameter ("password") + "
"); out.println ("driver : " + getServletContext ().getInitParameter ("driver") + "
"); out.println ("nom2 : " + getInitParameter ("user2")); out.println ("

"); out.println (""); out.println (""); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet (request, response); } }
Rendu : nom : utilisateur pass : mot de passe driver : com.mysql.jdbc.Driver nom2 : utilisateurServlet =====Exemple 5 - Cookies===== package com.llgc; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class Servlet5 */ @WebServlet ("/Servlet5") public class Servlet5 extends HttpServlet { /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding ("UTF-8"); PrintWriter out = response.getWriter (); String value = getCookie (request.getCookies (), "compteur"); response.setContentType ("text/html"); int compteur = 0; out.println (""); out.println (""); out.println (""); out.println (""); out.println ("Insert title here"); out.println (""); out.println (""); out.println ("

"); if (value == null) { out.println ("Pas de cookie, allez cuisiner !!!"); } else { compteur = Integer.parseInt (value); out.println ("compteur : " + compteur); } out.println ("

"); out.println (""); out.println (""); compteur++; Cookie c = new Cookie ("compteur", "" + compteur); c.setMaxAge (3600); response.addCookie (c); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet (request, response); } // Renvoie la valeur d'un cookie. protected static String getCookie (Cookie[] cookies, String cookieName) { if (cookies == null) { return null; } for (int i = 0; i < cookies.length; i++) { if (cookieName.equalsIgnoreCase (cookies[i].getName ())) { return cookies[i].getValue (); } } return null; } }
Rendu 1 : Pas de cookie, allez cuisiner !!! Rendu 2 : compteur : 1 =====Exemple 6 - Affichage d'une liste dans un tableau===== La liste est générée par une classe Java et affiche un type [[helloworld:design_pattern:bean:java#cas_general|BeanPersonne]]. package com.llgc; import java.util.LinkedList; import java.util.List; @ManagedBean public class Liste6 { public static List getListePersonne () { LinkedList liste = new LinkedList <> (); BeanPersonne personne = new BeanPersonne (); personne.setTaille (160); personne.setYeuxBleus (true); liste.add (personne); personne = new BeanPersonne (); personne.setTaille (170); personne.setYeuxBleus (true); liste.add (personne); personne = new BeanPersonne (); personne.setTaille (180); personne.setYeuxBleus (false); liste.add (personne); return liste; } } package com.llgc; import java.io.IOException; import java.io.PrintWriter; import java.util.List; 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 Servlet6 */ @WebServlet("/Servlet6") public class Servlet6 extends HttpServlet { /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding ("UTF-8"); PrintWriter out = response.getWriter (); response.setContentType ("text/html"); List liste = Liste6.getListePersonne (); out.println (""); out.println (""); out.println (""); out.println (""); out.println ("Insert title here"); out.println (""); out.println (""); out.println ("

"); out.println (" "); out.println (" "); out.println (" "); out.println (" "); out.println (" "); for (BeanPersonne beanPersonne : liste) { out.println (" "); out.println (" "); out.println (" "); out.println (" "); } out.println ("
TailleYeux bleus
" + beanPersonne.getTaille () + "" + beanPersonne.isYeuxBleus () + "
"); out.println ("

"); out.println (""); out.println (""); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
Rendu : {{:helloworld:web:java:servlet:rendu_ex6.png|Rendu exemple6}}