Skip to content
......@@ -7,6 +7,7 @@ package fr.ldnr.servelets;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
......@@ -20,6 +21,11 @@ import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "Logout", urlPatterns = {"/logout"})
public class Logout extends HttpServlet {
private static final String VIEW = "/WEB-INF/Home.jsp";
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
......@@ -32,10 +38,18 @@ public class Logout extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
if (request.getSession().getAttribute("user") == null) {
RequestDispatcher dispatcher = request.getServletContext().getRequestDispatcher(VIEW);
dispatcher.forward(request, response);
} else {
//invalidation
request.getSession().invalidate();
//redirection vers accueil
response.sendRedirect(request.getContextPath() + "/home");
}
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package fr.ldnr.servelets;
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;
/**
*
* @author stag
*/
@WebServlet(name = "Profile", urlPatterns = {"/profile"})
public class Profile extends HttpServlet {
private static final String VIEW = "/WEB-INF/Profile.jsp";
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//verifier que user est connecté
if (request.getSession().getAttribute("user") != null) {
request.getRequestDispatcher(VIEW)
.forward(request, response);
} else {
response.sendRedirect(request.getContextPath() + "/login");
}
}
/**
* Handles the HTTP <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
}
......@@ -13,11 +13,21 @@ import static sun.security.krb5.KrbException.errorMessage;
@WebServlet(name = "sign-in", urlPatterns = {"/sign-in"})
public class Signin extends HttpServlet {
private static final String VIEW = "/WEB-INF/Signin.jsp";
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/Signin.jsp");
if (request.getSession().getAttribute("user") == null) {
RequestDispatcher dispatcher = request.getServletContext().getRequestDispatcher(VIEW);
dispatcher.forward(request, response);
} else {
response.sendRedirect(request.getContextPath() + "/home");
}
}
@Override
......@@ -32,12 +42,17 @@ public class Signin extends HttpServlet {
boolean authenticated = false;
if (checker.checkForm()) {
//je met l'utilisateur en session
request.getSession().setAttribute("user", checker.getBean());
response.sendRedirect(request.getContextPath() + "/home");
} else {
//Assurer que l'utilisateur n'est plus en session
request.getSession().invalidate();
request.setAttribute("errors", checker.getErrors());
request.setAttribute("userData", checker.getUser());
request.setAttribute("userData", checker.getBean());
request.getServletContext()
.getRequestDispatcher("/WEB-INF/Signin.jsp")
.getRequestDispatcher(VIEW)
.forward(request, response);
}
}
......
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package fr.ldnr.servelets;
import Forms.CreateArticleFormChecker;
import fr.ldnr.beans.User;
import java.io.IOException;
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;
/**
*
* @author stag
*/
@WebServlet(name = "createArticle", urlPatterns = {"/back/createArticle"})
public class createArticle extends HttpServlet {
private static final String VIEW = "/WEB-INF/createArticle.jsp";
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Integer id_author = ((User) (request.getSession().getAttribute("user"))).getId_user();
if (request.getSession().getAttribute("isAdmin") != null) {
request.getServletContext()
.getRequestDispatcher(VIEW)
.forward(request, response);
} else {
response.sendRedirect(request.getContextPath() + "/login");
}
}
/**
* Handles the HTTP <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
CreateArticleFormChecker checker = new CreateArticleFormChecker(request);
if (!checker.checkForm()) {
request.setAttribute("article", checker.getBean());
request.setAttribute("errors", checker.getErrors());
request.getServletContext()
.getRequestDispatcher(VIEW)
.forward(request, response);
} else {
response.sendRedirect(request.getContextPath() + "/home");
}
}
}
<%--
Document : Article
Created on : 5 mai 2023, 06:33:42
Author : stag
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Article Page</title>
<link rel="stylesheet" href="<c:url value="/rsc/css/Style.css"/>"/>
</head>
<body>
<%@include file="/WEB-INF/jspf/Header.jsp" %>
<section id="pageArticle" class="article-container">
<h2>${requestScope.articleOrm.article.titre}</h2>
<div class="sub">Écrit par ${requestScope.articleOrm.author.pseudo} le ${requestScope.articleOrm.article.date}</div>
<div>${requestScope.articleOrm.article.contenu}</div>
<div class="pagingArticle">
<c:set var="id" scope="page" value="${requestScope.articleOrm.article.id}"/>
<a href="<c:url value="/article?id=${pageScope.id - 1}"/>"
<c:if test="${pageScope.id <= requestScope.firstId}">class="disabled"</c:if>
>Article précédent</a>
<a href="<c:url value="/article?id=${pageScope.id + 1}"/>"
<c:if test="${pageScope.id >= requestScope.lastId}">class="disabled"</c:if>
>Article suivant</a>
</div>
</section>
<%@include file="./jspf/Footer.jsp" %>
</body>
</html>
......@@ -5,25 +5,126 @@
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<link rel="stylesheet" href="<c:url value="/rsc/css/Style.css"/>"/>
<title>Blog</title>
<style>
.article {
background-color: #f7f7f7;
border: 1px solid #ccc;
border-radius: 5px;
padding: 10px;
margin-bottom: 20px;
}
.article h3 {
font-size: 24px;
margin-top: 0;
}
.article .sub {
font-size: 14px;
margin-bottom: 10px;
}
.article p {
font-size: 16px;
line-height: 1.5;
margin-bottom: 20px;
}
.article .readMore {
text-align: right;
margin-top: 0;
}
.article .readMore a {
color: #1a1aff;
text-decoration: none;
font-size: 18px;
}
.article .readMore a:hover {
text-decoration: underline;
}
.pagination {
display: flex;
justify-content: center;
margin-top: 30px;
}
.pagination ul {
list-style: none;
margin: 0;
padding: 0;
display: flex;
}
.pagination li {
margin: 0 5px;
}
.pagination li a {
display: block;
padding: 5px 10px;
color: #fff;
background-color: #1a1aff;
text-decoration: none;
border-radius: 5px;
}
.pagination li a:hover {
background-color: #0000ff;
}
.pagination li.active a {
background-color: #0000ff;
}
.pagination li.disabled a {
background-color: #ccc;
cursor: not-allowed;
}
</style>
</head>
<body>
<%@include file="/WEB-INF/jspf/Header.jsp" %>
<%@include file="/WEB-INF/jspf/Header.jsp" %>
<h1>Bienvenue sur mon blog</h1>
<h1>Voici mes articles</h1>
<h2>Voici mes articles</h2>
<section class="container">
<c:forEach var="article" items="${articles}">
<div class="box">
<h3>${article.titre}</h3>
<div class="sub">Article créé le ${article.dateCreation} par ${article.auteur}</div>
<div class="sub">${article.contenu}</div>
<c:forEach items="${requestScope.articles}" var="articleOrm">
<div class="article">
<h3>${articleOrm.article.titre}</h3>
<div class="sub">Article créé le ${articleOrm.article.date} par ${articleOrm.author.pseudo}</div>
<p>${articleOrm.article.contenu}</p>
<p class="readMore"><a href="<c:url value="/article?id=${articleOrm.article.id}"/>">Lire l'article complet</a></p>
</div>
</c:forEach>
</section>
<div class="pagination">
<ul>
<li class="<c:if test='${requestScope.page <= 2}'>disabled</c:if>">
<a href="<c:url value='/home?page=1'/>">First</a>
</li>
<li class="<c:if test='${requestScope.page <= 1}'>disabled</c:if>">
<a href="<c:url value='/home?page=${requestScope.page - 1}'/>">Prévious</a>
</li>
<c:forEach begin="${requestScope.page}" end="${requestScope.page + 2}" var="i">
<c:if test="${i ge 1 and i le requestScope.maxPage}">
<li class="<c:if test='${requestScope.page == i}'>active</c:if>">
<a href="<c:url value='/home?page=${i}'/>">${i}</a>
</li>
</c:if>
</c:forEach>
<li class="<c:if test='${requestScope.page >= requestScope.maxPage}'>disabled</c:if>">
<a href="<c:url value='/home?page=${requestScope.page + 1}'/>">Next</a>
</li>
<li class="<c:if test='${requestScope.page >= requestScope.maxPage - 1}'>disabled</c:if>">
<a href="<c:url value='/home?page=${requestScope.maxPage}'/>">Last</a>
</li>
</ul>
</div>
<%@include file="./jspf/Footer.jsp" %>
</body>
</html>
<%--
Document : Profile
Created on : 5 mai 2023, 03:35:35
Author : stag
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
<style>
table {
border-collapse: collapse;
margin: 20px;
width: 80%;
border-style : none;
}
td, th {
padding: 8px;
text-align: left;
}
th {
background-color: #f2f2f2;
font-weight: bold;
}
#password-col {
display: none;
}
/* Style the show password button */
#show-password-btn {
margin-top: 10px;
padding: 5px 10px;
background-color: #4CAF50;
color: #fff;
cursor: pointer;
}
</style>
</head>
<body>
<%@include file="/WEB-INF/jspf/Header.jsp" %>
<h1>Vos informations personnelles</h1>
<table>
<tr>
<td> Votre id : </td>
<td> ${sessionScope.user.id} </td>
</tr>
<tr>
<td> Votre Pseudo : </td>
<td> ${sessionScope.user.pseudo} </td>
</tr>
<tr>
<td> Votre adresse mail : </td>
<td> ${sessionScope.user.email} </td>
</tr>
<tr id="password-row">
<td> Votre mot de passe : </td>
<td id="password-col"> ${sessionScope.user.password} </td>
</tr>
</table>
<button id="show-password-btn" onclick="showPassword()">Afficher le mot de passe</button>
<%@include file="./jspf/Footer.jsp" %>
<script>
function showPassword() {
var passwordCol = document.getElementById("password-col");
var showPasswordBtn = document.getElementById("show-password-btn");
// Toggle the display of the password column
if (passwordCol.style.display === "none") {
passwordCol.style.display = "table-cell";
showPasswordBtn.textContent = "Cacher le mot de passe";
} else {
passwordCol.style.display = "none";
showPasswordBtn.textContent = "Afficher le mot de passe";
}
}
</script>
</body>
</html>
<%--
Document : createArticle
Created on : 5 mai 2023, 00:52:37
Author : stag
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="<c:url value="/rsc/css/Style.css"/>"/>
<title>Page de création d'article</title>
</head>
<body>
<%@include file="/WEB-INF/jspf/Header.jsp" %>
<h1>Créer un article</h1>
<c:if test="${not empty errorMessage}">
<p class="error-message">${errorMessage}</p>
</c:if>
<form action="<c:url value="/back/createArticle"/>" method="post">
<div>
<label for="title">Titre</label>
<input type="text" id="title" name="title" placeholder="Le titre de l'article" value="<c:out value="${requestScope.article.title}" />">
<span class="error">${requestScope.errors.title}</span>
</div>
<div>
<label for="content">Contenu</label>
<textarea id="content" name="content" rows="15" cols="25"
placeholder="Contenu de l'article" >
<c:out value="${requestScope.article.content}" />
</textarea>
<span class="error">${requestScope.errors.content}</span>
</div>
<div>
<input type="submit" value="Envoyer">
<input type="reset" value="Annuler">
</div>
</form>
</body>
</html>
......@@ -3,7 +3,26 @@
Created on : 27 avr. 2023, 12:59:37
Author : stag
--%>
<style>
#MonFooter{
position: fixed;
bottom: 0;
left: 0;
right: 0;
background-color: #333;
color: #fff;
padding: 10px;
text-align: center;
}
</style>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<h3>Ceci est un footer que je veut include!</h3>
<div id="MonFooter">
<c:choose>
<c:when test="${!empty sessionScope.user}"> Vous etes connecté avec le id: ${sessionScope.user.id} pseudo:
${sessionScope.user.pseudo} et l'adresse mail : ${sessionScope.user.email}</c:when>
<c:otherwise>
vous n'êtes pas connecté.
</c:otherwise>
</c:choose>
<c:if test="${sessionScope.user.id == 1}"> et vous êtes administrateur</c:if>
</div>
......@@ -49,8 +49,18 @@
<nav>
<ul>
<li><a href="<c:url value='/home'/>">Home</a></li>
<c:choose>
<c:when test="${empty sessionScope.user}">
<li><a href="<c:url value='/sign-in'/>">Inscription</a></li>
<li><a href="<c:url value='/login'/>">Connexion</a></li>
</c:when>
<c:otherwise>
<li><a href="<c:url value='/logout'/>">Se deconnecter</a></li>
<li><a href="<c:url value='/profile'/>">Mon compte</a></li>
</c:otherwise>
</c:choose>
<c:if test="${sessionScope.user.id == 1}">
<li><a href="<c:url value='/back/createArticle'/>">Créer un article</a></li>
</c:if>
</ul>
</nav>
......@@ -40,7 +40,7 @@ input[type=text],input[type=email], input[type=password] {
font-size: 1.2rem;
}
input[type=submit] {
input[type=submit], input[type=reset] {
background-color: #F7DC6F;
color: #2B3A42;
padding: 15px 30px;
......@@ -50,7 +50,7 @@ input[type=submit] {
cursor: pointer;
}
input[type=submit]:hover {
input[type=submit]:hover , input[type=reset]:hover{
background-color: #34495E;
color: #F7DC6F;
}
......@@ -77,7 +77,7 @@ input[type=submit]:hover {
}
.container {
.containerArticle {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 20px;
......@@ -132,7 +132,7 @@ input[type=text],input[type=email], input[type=password] {
font-size: 1.2rem;
}
input[type=submit] {
input[type=submit] , input[type=reset]{
background-color: #F7DC6F;
color: #2B3A42;
padding: 15px 30px;
......@@ -142,7 +142,7 @@ input[type=submit] {
cursor: pointer;
}
input[type=submit]:hover {
input[type=submit]:hover , input[type=reset]:hover{
background-color: #34495E;
color: #F7DC6F;
}
......@@ -151,17 +151,120 @@ input[type=submit]:hover {
color: red;
font-weight: bold;
}
input[type=submit] {
background-color: #F7DC6F;
color: #2B3A42;
padding: 15px 30px;
textarea {
padding: 15px;
border: none;
border-radius: 10px;
margin-bottom: 20px;
width: 100%;
height: 150px; /* Hauteur du textarea */
background-color: #F7DC6F;
color: #2B3A42;
font-size: 1.2rem;
cursor: pointer;
resize: vertical; /* Permet à l'utilisateur de redimensionner verticalement le textarea */
}
.footer {
background-color: #333;
color: #fff;
padding: 20px;
text-align: center;
}
.pagination {
display: flex;
justify-content: center;
margin-top: 20px;
padding-bottom: 40px;
}
input[type=submit]:hover {
background-color: #34495E;
color: #F7DC6F;
.pagination ul {
display: flex;
list-style: none;
padding: 0;
margin: 0;
}
.pagination ul li {
margin-right: 5px;
}
.pagination ul li.disabled a {
color: #ccc;
cursor: not-allowed;
text-decoration: none;
}
.pagination ul li.active a {
color: #fff;
background-color: #007bff;
border-color: #007bff;
text-decoration: none;
}
.pagination ul li a {
display: block;
padding: 5px 10px;
color: #007bff;
background-color: #fff;
border: 1px solid #007bff;
text-decoration: none;
}
.pagination ul li a:hover {
background-color: #007bff;
color: #fff;
text-decoration: none;
}
.article-container {
text-align: center;
max-width: 800px;
margin: 0 auto;
padding: 20px;
border: 1px solid #ccc;
}
#pageArticle > h2 {
font-size: 2.5rem;
font-weight: bold;
margin-bottom: 1rem;
}
#pageArticle > .sub {
font-size: 1rem;
color: gray;
margin-bottom: 1rem;
}
#pageArticle > div {
font-size: 1.2rem;
line-height: 1.5;
margin-bottom: 2rem;
}
#pageArticle > .pagingArticle {
display: flex;
justify-content: space-between;
margin-top: 2rem;
}
#pageArticle > a {
font-size: 1.2rem;
color: black;
text-decoration: none;
border: 1px solid black;
padding: 0.5rem 1rem;
border-radius: 5px;
transition: all 0.2s ease-in-out;
}
#pageArticle > a:hover {
background-color: black;
color: white;
}
#pageArticle > .disabled {
color: gray;
border-color: gray;
pointer-events: none;
opacity: 0.6;
}
\ No newline at end of file
#Generated by Maven
#Tue Apr 25 17:03:54 CEST 2023
#Fri May 05 03:13:49 CEST 2023
groupId=fr.ldnr.mycompany
artifactId=mavenproject3
version=1.0-SNAPSHOT
fr/ldnr/servelets/SteackServelet.class
fr/ldnr/servelets/Burger.class
Carotte.class
fr/ldnr/servelets/Logout.class
Forms/LoginFormChecker.class
fr/ldnr/servelets/createArticle.class
Forms/CreateArticleFormChecker.class
fr/ldnr/beans/Article.class
Forms/SigninFormChecker.class
Forms/FormChecker.class
fr/ldnr/servelets/Signin.class
fr/ldnr/beans/Personne.class
fr/ldnr/beans/User.class
fr/ldnr/servelets/Login.class
fr/ldnr/servelets/Home.class
Forms/Checkable.class
/home/stag/NetBeansProjects/mavenproject3/src/main/java/fr/ldnr/servelets/Home.java
/home/stag/NetBeansProjects/mavenproject3/src/main/java/fr/ldnr/servelets/Carotte.java
/home/stag/NetBeansProjects/mavenproject3/src/main/java/fr/ldnr/servelets/Burger.java
/home/stag/NetBeansProjects/mavenproject3/src/main/java/fr/ldnr/servelets/SteackServelet.java
/home/stag/Desktop/tester/java-web-td/src/main/java/fr/ldnr/servelets/Logout.java
/home/stag/Desktop/tester/java-web-td/src/main/java/fr/ldnr/beans/Article.java
/home/stag/Desktop/tester/java-web-td/src/main/java/fr/ldnr/beans/User.java
/home/stag/Desktop/tester/java-web-td/src/main/java/Forms/SigninFormChecker.java
/home/stag/Desktop/tester/java-web-td/src/main/java/Forms/LoginFormChecker.java
/home/stag/Desktop/tester/java-web-td/src/main/java/fr/ldnr/beans/Personne.java
/home/stag/Desktop/tester/java-web-td/src/main/java/fr/ldnr/servelets/createArticle.java
/home/stag/Desktop/tester/java-web-td/src/main/java/Forms/CreateArticleFormChecker.java
/home/stag/Desktop/tester/java-web-td/src/main/java/fr/ldnr/servelets/Login.java
/home/stag/Desktop/tester/java-web-td/src/main/java/Forms/FormChecker.java
/home/stag/Desktop/tester/java-web-td/src/main/java/fr/ldnr/servelets/Signin.java
/home/stag/Desktop/tester/java-web-td/src/main/java/Forms/Checkable.java
/home/stag/Desktop/tester/java-web-td/src/main/java/fr/ldnr/servelets/Home.java
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>accueil.html</welcome-file>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
<welcome-file>home</welcome-file>
</welcome-file-list>
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<include-prelude>/WEB-INF/taglibs.jsp</include-prelude>
</jsp-property-group>
</jsp-config>
</web-app>
......@@ -9,13 +9,56 @@ and open the template in the editor.
<title>TODO supply a title</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="MainStyle" type="text/css" href="rsc/css/style.css">
</head>
<body>
<style>
body {
background-color: #f2f2f2;
font-family: Arial, sans-serif;
}
/* Style the header */
h1 {
text-align: center;
color: #333;
}
/* Style the navigation bar */
nav {
background-color: #333;
color: #fff;
}
nav ul {
list-style-type: none;
margin: 0;
padding: 0;
overflow: hidden;
}
nav li {
float: left;
}
nav li a {
display: block;
color: white;
text-align: center;
padding: 14px 16px;
text-decoration: none;
}
nav li a:hover {
background-color: #111;
}
</style>
<nav>
<ul>
<li><a href="home">Home</a></li>
<li><a href="sign-in">Inscription</a></li>
<li><a href="login">Connexion</a></li>
</ul>
</nav>
<h1>Ma page d'accueil</h1>
<div>test div</div>
<a href="home">la page Home</a>
<br>
<a href="steack">la page steack</a>
</body>
</html>