# 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:

### 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:

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.

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:

## Le résultat:
En définitive, nous avons obtenu la réalisation de cette page où deux personnes discutent entre elles
