# 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 if (b != null) { 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</title> <link rel="stylesheet" href="styles/chat.css"> </head> <body> <div id="name">${UserName1 }:</div> <pre> <div id="user"> ${content} </pre> </div> <form name="chatForm" action="chat" method="post"> <input type="text" name="ligne" value="" id="text" /> <input type="submit" name="action" value="Submit" id="submit" /> <input type="submit" name="refresh" value="Refresh" id="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</title> <link rel="stylesheet" href="styles/chat.css"> </head> <body> <div id="name">${UserName2 } :</div> <pre> <div id="user"> <%=request.getAttribute("content2")%> </pre> </div> <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 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"); } } ``` ### 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>Login Of User 1</title> <link rel="stylesheet" href="styles/login.css"> <link rel="icon" href="images/log.ico" type="image/gif" sizes="16*16"> </head> <body> <div id="main"> <img alt="log1" src="images/log1.jpg"> <form action="login" method="post"> Hello and Welcome What is Your Name User1?: <input type="text" name="uname1" id="text"><br> <input type="submit" value="Login" id="login"> </form> </div> </body> </html> ``` #### Page Web de sortie: ![](https://i.imgur.com/GdaK8R9.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>Login Of User 2</title> <link rel="stylesheet" href="styles/login.css"> <link rel="icon" href="images/log.ico" type="image/gif" sizes="16*16"> </head> <body> <div id="main"> <img alt="log2" src="images/log1.jpg"> <form action="login2" method="post"> Hello and Welcome What is Your Name User2?: <input type="text" name="uname2" id="text"><br> <input type="submit" value="Login" id="login"> </form> </div> </body> </html> ``` #### page Web de sortie: ![](https://i.imgur.com/x0Hsv6U.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> <link rel="stylesheet" href="styles/welcome.css"> </head> <body> <% if ((session.getAttribute("UserName1") == null) && (session.getAttribute("UserName2")) == null) { response.sendRedirect("login.jsp"); } %> <div id="main"> <div id="text"> <h2> Welcome ${UserName1 } and ${UserName2 } !<br> You Are Going To Chat With Each Other, Have A Fun :) </h2> </div> <form action="logout"> <input type="submit" value="Logout"> </form> <form action="chat"> <input type="submit" value="Continue To Chat"> </form> </div> </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/Ak8Z8a7.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> <link rel="stylesheet" href="styles/logout.css"> </head> <body> <h1> <b>Goodbye, We Hope That You Had A Good Time Here!</b> </h1> <br> <div id="titre">This application has been created by:</div> <div id="autors"> <ul> <li><a href="https://www.linkedin.com/in/shahrokh-abolhassani/">Shahrokh Abolhassani Bavili</a></li> <li><a href="https://www.linkedin.com/in/seyed-saeid-hosseini-272809175/">Seyyed Saeid Hosseini</a></li> </ul> </div> </body> </html> ``` #### Page Web de sortie: ![](https://i.imgur.com/w3Opnww.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/BRqGTPy.jpg)