# TP6 : Les servlets(chat) ## Le noms des auteurs : Shahrokh Abolhassani Bavili Seyed Saeid Hosseini ## Résumé du TP : Dans ce TP, nous voulons créer une application Web qui permet à deux personnes de discuter entre elles. Pour cela, nous utilisons Java EE et écrivons des codes avec des servlets et des fichiers jsp. ## Les codes et leurs explications : ### Chat.java: c'est le code principal qui permet à "StringBuffer" de discuter. ```java= package pr.tp.web.servlet; import java.io.IOException; import java.util.Date; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; @WebServlet("/chat") public class Chat extends HttpServlet { private static final long serialVersionUID = 197811968639586823L; private StringBuffer chatContent; @Override public void init() throws ServletException{ chatContent = new StringBuffer(); chatContent.append("Bienvenue sur le chat. "); chatContent.append("Soyez gentils.").append("\n"); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { RequestDispatcher rd = request.getRequestDispatcher("chat.jsp"); RequestDispatcher rd2 = request.getRequestDispatcher("chat2.jsp"); request.setAttribute("content", chatContent.toString()); request.setAttribute("content2", chatContent.toString()); rd.include(request, response); rd2.include(request, response);} protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String a = req.getParameter("ligne"); String b = req.getParameter("ligne2"); HttpSession session3 = req.getSession(); HttpSession session4 = req.getSession(); if (a!=null) { Date time = new Date(); String Name1 = (String) session3.getAttribute("UserName1"); chatContent.append("("+time.toString()+"): ").append(Name1+" >>").append(req.getParameter("ligne")).append("\n"); }else { Date time = new Date(); String Name2 = (String) session4.getAttribute("UserName2"); chatContent.append("("+time.toString()+"): ").append(Name2+" >>").append(req.getParameter("ligne2")).append("\n"); } String refresh = req.getParameter("refresh"); if (refresh!=null) { int start = 0; int end = 1000; chatContent.delete(start, end); } doGet(req,resp); } } ``` ### chat.jsp: Comme nous l'avons vu dans le code précédent, celui ci appelle deux codes JSP(chat.jsp et chat2.jsp),avec l'utilisation de "action" dans la méthode <form>. Donc pour chat.jsp nous avons: ```java= <%@ page language="java" contentType="text/html; charset=windows-1256" pageEncoding="windows-1256"%> <!DOCTYPE html> <html> <head> <meta charset="windows-1256"> <title>Chat second person !</title> </head> <body> ${UserName1 } <pre> <%= request.getAttribute("content") %> </pre> <form name="chatForm" action="chat" method="post"> <input type="text" name="ligne" value=""/> <input type="submit" name="action" value="submit"/> <input type="submit" name="refresh" value="refresh"/> </form> --------------------------------------------------- <br> </body> </html> ``` ### chat2.jsp: Pour chat2, nous avons également: ```java= <%@ page language="java" contentType="text/html; charset=windows-1256" pageEncoding="windows-1256"%> <!DOCTYPE html> <html> <head> <meta charset="windows-1256"> <title>Chat second person !</title> </head> <body> ${UserName2 } <pre> <%= request.getAttribute("content2") %> </pre> <form name="chatForm" action="chat" method="post"> <input type="text" name="ligne2" value=""/> <input type="submit" name="action" value="submit"/> <input type="submit" name="refresh" value="refresh"/> </form> --------------------------------------------------- <br> <form action="logoutpage" method="post"> <input type="submit" name="logout" value="Logout"/> </form> </body> </html> ``` ### LoginServlet.java: Pour saisir le nom de la première personne, nous créons cette servlet: ```java= package pr.tp.web.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * Servlet implementation class LoginServlet */ @WebServlet("/login") public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub String UserName1 = request.getParameter("uname1"); if (UserName1.equals("")) { response.sendRedirect("login.jsp"); }else { HttpSession session1 = request.getSession(); session1.setAttribute("UserName1", UserName1); response.sendRedirect("login2.jsp"); } } } ``` ### login.jsp: Comme nous l'avons montré, LoginServlet utilise un fichier JSP pour saisir le nom de l'utilisateur,et ainsi nous créons login.jsp: ```java= <%@ page language="java" contentType="text/html; charset=windows-1256" pageEncoding="windows-1256"%> <!DOCTYPE html> <html> <head> <meta charset="windows-1256"> <title>User 1</title> </head> <body> <form action="login" method="post"> Hello and Welcome What is Your Name User1?: <input type="text" name="uname1"/><br> <input type="submit" value="Login"> </form> </body> </html> ``` #### Page Web de sortie: ![](https://i.imgur.com/oThFZmd.jpg) ### LoginServlet2.java: Pour la deuxième personne nous nous servons de ce code: ```java= package pr.tp.web.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * Servlet implementation class LoginServlet */ @WebServlet("/login2") public class LoginServlet2 extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub String UserName2 = request.getParameter("uname2"); if (UserName2.equals("")) { response.sendRedirect("login2.jsp"); }else { HttpSession session2 = request.getSession(); session2.setAttribute("UserName2", UserName2); response.sendRedirect("welcome.jsp"); } } } ``` ### login2.jsp Le JSP du LoginServlet2 est: ```java= <%@ page language="java" contentType="text/html; charset=windows-1256" pageEncoding="windows-1256"%> <!DOCTYPE html> <html> <head> <meta charset="windows-1256"> <title>User 2</title> </head> <body> <form action="login2" method="post"> Hello and Welcome What is Your Name User2?: <input type="text" name="uname2"/><br> <input type="submit" value="Login"> </form> </body> </html> ``` #### page Web de sortie: ![](https://i.imgur.com/XC8xDdG.jpg) Il est à noter que si l'entrée de l'utilisateur 1 ou de l'utilisateur 2 est vide, le code reviendra au début pour reprendre les entrées. ### welcome.jsp: Comme nous l'avons vu précédemment dans LoginServlet2.java,le code utilise la méthode "response.sendRedirect (" welcome.jsp ")" pour saluer les utilisateurs, ainsi le welcome.jsp dont nous disposons: ```java= <%@ page language="java" contentType="text/html; charset=windows-1256" pageEncoding="windows-1256"%> <!DOCTYPE html> <html> <head> <meta charset="windows-1256"> <title>Welcome!</title> </head> <body> <% if((session.getAttribute("UserName1"))==null&&(session.getAttribute("UserName2"))==null){ response.sendRedirect("login.jsp"); } %> <h2>Welcome ${UserName1 } and ${UserName2 } You Are Going To Chat With Each Other Have A Fun :) </h2> <form action="logout"> <input type="submit" value="Logout"> </form> <form action="chat"> <input type="submit" value="Continue To Chat"> </form> </body> </html> ``` #### Page Web de sortie: Pour tester l'application dans ce TP, nous utilisons notre nom en tant qu'utilisateur 1 et utilisateur 2. ![](https://i.imgur.com/AeV0rLm.jpg) Dans cette page la touche "Continue To Chat", nous permet d'accéder au chat et à la page principale, avec les données qui incluent les noms des utilisateurs 1 et 2. ### LogoutServlet.java Dans la page "Welcome", nous avons également le bouton "Logout" que nous utilisons pour supprimer les "cash" et "sessions" et revenir à la page de départ. ```java= package pr.tp.web.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * Servlet implementation class LogoutServlet */ @WebServlet("/logout") public class LogoutServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub HttpSession session1 = request.getSession(); HttpSession session2 = request.getSession(); session1.removeAttribute("UserName1"); session2.removeAttribute("UserName2"); response.sendRedirect("login.jsp"); } } ``` ### LogoutPageServlet.java: A la fin, nous utilisons le bouton "Logout" pour clore le chat qui appelle la page "GoodBye" ```java= package pr.tp.web.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * Servlet implementation class LogoutServlet */ @WebServlet("/logoutpage") public class LogoutPageServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub HttpSession session1 = request.getSession(); HttpSession session2 = request.getSession(); session1.removeAttribute("UserName1"); session2.removeAttribute("UserName2"); response.sendRedirect("logout.jsp");}} ``` ### logout.jsp: Dans le servlet précédent, on utilise également le "logout.jsp" pour réaliser la fonction du Logout. ```java= <%@ page language="java" contentType="text/html; charset=windows-1256" pageEncoding="windows-1256"%> <!DOCTYPE html> <html> <head> <meta charset="windows-1256"> <title>GoodBye</title> </head> <body> <h1><b>Goodbye, We Hope That You Had A Good Time Here!</b></h1> <br> <hr /> <h3>This application has been created by: </h3> <h2><i> <ins>Shahrokh Abolhassani</ins> </i></h2> <p><h2><i>&</i></h2> <h2><i> <ins>Saeid Hosseini </ins> </i></h2> </body> </html> ``` #### Page Web de sortie: ![](https://i.imgur.com/U9gJ9gz.jpg) ## Le résultat: En définitive, nous avons obtenu la réalisation de cette page où deux personnes discutent entre elles ![](https://i.imgur.com/VdLsPiU.jpg)