Skip to content
Commits on Source (5)
......@@ -27,6 +27,12 @@
<version>1.2</version>
</dependency>
<!-- import Mariadb-jdbc-driver -->
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>3.1.4</version>
</dependency>
</dependencies>
<build>
......
......@@ -7,8 +7,10 @@ package Forms;
import fr.ldnr.beans.Article;
import fr.ldnr.beans.User;
import fr.ldnr.dao.DaoFactory;
import java.time.Instant;
import java.util.Date;
import java.sql.Date;
import java.time.LocalDate;
import javax.servlet.http.HttpServletRequest;
/**
......@@ -29,20 +31,23 @@ public class CreateArticleFormChecker extends FormChecker<Article> {
boolean isFormOk = true;
String title = request.getParameter(TITLE_FIELD);
String content = request.getParameter(CONTENT_FIELD);
Integer id_author = ((User) (request.getSession().getAttribute("user"))).getId();
bean = new Article(title, content, Date.from(Instant.now()).toString(), id_author);
Integer id_author = ((User) (request.getSession().getAttribute("user"))).getId_user();
bean = new Article(title, content, Date.valueOf(LocalDate.now()), id_author);
System.out.println(bean);
// Les tests
if (title == null) {
isFormOk = false;
errors.put(TITLE_FIELD, "Le titre ne doit pas être vide");
}
if (content == null || content.length() < 50) {
isFormOk = false;
errors.put(CONTENT_FIELD, "Le contenu doit faire 50 caractères au moins");
if (content == null || content.length() < 25) {
errors.put(CONTENT_FIELD, "Le contenu doit faire 25 caractères au moins");
}
return isFormOk;
// Ajouter l'article à la DB s'il est valide
if (errors.isEmpty()) {
DaoFactory.getArticleDao().insert(bean);
}
return errors.isEmpty();
}
......
......@@ -9,8 +9,9 @@ package Forms;
*
* @author stag
*/
import static com.sun.tools.javac.tree.TreeInfo.name;
import fr.ldnr.beans.User;
import java.util.HashMap;
import fr.ldnr.dao.DaoFactory;
import javax.servlet.http.HttpServletRequest;
public class LoginFormChecker extends FormChecker<User> {
......@@ -29,27 +30,27 @@ public class LoginFormChecker extends FormChecker<User> {
bean = new User(23, null, pseudo, pwd);
boolean isFormOK = true;
if (pseudo == null || pseudo.trim().length() < 3) {
errors.put(PSEUDO_FIELD, "Doit faire au moins 3 caractères");
isFormOK = false;
}
if (pwd.length() < 6) {
errors.put(PWD_FIELD, "Doit faire au moins 6 caractères");
isFormOK = false;
}
// if (errors.isEmpty()) {
// // Si les champs sont valides, on peut créer l'utilisateur
// user = new User(pseudo, pwd);
// // isFormOK = true
// return true;
// } else {
// return false;
// }
return isFormOK;
if (errors.isEmpty()) {
User user = DaoFactory.getUserDao().getByName(pseudo);
// Vérifications de l'existence de l'utilisateur
if (user == null || !user.getPassword().equals(pwd)) {
errors.put(PSEUDO_FIELD, "Utilisateur ou mot de passe erroné");
} else {
// L'utilisateur est le bon
bean = user;
}
}
return errors.isEmpty();
}
}
......@@ -10,8 +10,8 @@ package Forms;
* @author stag
*/
import fr.ldnr.beans.User;
import fr.ldnr.dao.DaoFactory;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
public class SigninFormChecker extends FormChecker<User> {
......@@ -26,7 +26,6 @@ public class SigninFormChecker extends FormChecker<User>{
@Override
public boolean checkForm() {
boolean isValid = true;
String email = request.getParameter(EMAIL_FIELD);
String password = request.getParameter(PWD_FIELD);
......@@ -37,39 +36,35 @@ public class SigninFormChecker extends FormChecker<User>{
//traitement de la saisie email = pas necessaire
if (email == null || email.trim().isEmpty()) {
errors.put(EMAIL_FIELD, "L'adresse email est obligatoire.");
isValid = false;
} else if (!email.contains("@")) {
errors.put(EMAIL_FIELD, "L'adresse email n'est pas valide.");
isValid = false;
}
if (password == null || password.trim().isEmpty()) {
errors.put(PWD_FIELD, "Le mot de passe est obligatoire.");
isValid = false;
} else if (password.length() < 6) {
errors.put(PWD_FIELD, "Le mot de passe doit contenir au moins 6 caractères.");
isValid = false;
}
if (confirmPassword == null || confirmPassword.trim().isEmpty()) {
errors.put(CONFIRM_PWD_FIELD, "La confirmation du mot de passe est obligatoire.");
isValid = false;
} else if (!confirmPassword.equals(password)) {
errors.put(CONFIRM_PWD_FIELD, "La confirmation du mot de passe ne correspond pas.");
isValid = false;
}
if (pseudo == null || pseudo.trim().isEmpty()) {
errors.put(PSEUDO_FIELD, "Le pseudo est obligatoire.");
isValid = false;
} else if (pseudo.length() < 3) {
errors.put(PSEUDO_FIELD, "Le pseudo doit contenir au moins 3 caractères.");
isValid = false;
}
return isValid;
if (errors.isEmpty()) { // Si le formulaire est correct
// Créer l'utilisateur en DB
DaoFactory.getUserDao().insert(bean);
}
return errors.isEmpty();
}
}
/*
* 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 filters;
import fr.ldnr.beans.User;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
/**
*
* @author stag
*/
public class ConnectFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpSession session = ((HttpServletRequest) request).getSession();
// Travail avant l'appel à la servlet
if (session.getAttribute("user") != null && ((User) session.getAttribute("user")).getId() == 1) {
session.setAttribute("isAdmin", true);
}
// Appel à la servlet
chain.doFilter(request, response);
// Travail après la servlet mais avant la réponse
}
@Override
public void destroy() {
}
}
/*
* 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 filters;
import fr.ldnr.beans.User;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
/**
*
* @author stag
*/
@WebFilter(urlPatterns = "/*")
public class isAdminFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// À l'aller : je travaille sur la requête
HttpSession session = ((HttpServletRequest) request).getSession();
User user = (User) session.getAttribute("user");
if (user != null && user.getId() == 1) {
session.setAttribute("isAdmin", true);
} else {
session.removeAttribute("isAdmin");
}
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
......@@ -5,27 +5,38 @@
*/
package fr.ldnr.beans;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.sql.Date;
import java.util.Locale;
/**
*
* @author stag
*/
public class Article implements Serializable {
public class Article implements Identifiable {
private Integer id_article;
private String titre;
private String contenu;
private String dateCreation;
private Integer auteur;
private Date dateCreation;
private Integer id_auteur;
public Article() {
}
public Article(String titre, String contenu, String dateCreation, Integer auteur) {
public Article(String titre, String contenu, Date dateCreation, Integer auteur) {
this.titre = titre;
this.contenu = contenu;
this.dateCreation = dateCreation;
this.auteur = auteur;
this.id_auteur = auteur;
}
public Article(Integer id_article, String titre, String contenu, Date dateCreation, Integer id_auteur) {
this.id_article = id_article;
this.titre = titre;
this.contenu = contenu;
this.dateCreation = dateCreation;
this.id_auteur = id_auteur;
}
public String getTitre() {
......@@ -44,25 +55,48 @@ public class Article implements Serializable {
this.contenu = contenu;
}
public String getDateCreation() {
public Date getDateCreation() {
return dateCreation;
}
public void setDateCreation(String dateCreation) {
public String getDate() {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
return sdf.format(dateCreation);
}
public void setDateCreation(Date dateCreation) {
this.dateCreation = dateCreation;
}
public Integer getAuteur() {
return auteur;
public Integer getId_auteur() {
return id_auteur;
}
public void setAuteur(Integer auteur) {
this.auteur = auteur;
public void setId_auteur(Integer id_auteur) {
this.id_auteur = id_auteur;
}
@Override
public String toString() {
return "Article{" + "titre=" + titre + ", contenu=" + contenu + ", dateCreation=" + dateCreation + ", auteur=" + auteur + '}';
return "Article{" + "titre=" + titre + ", contenu=" + contenu + ", dateCreation=" + dateCreation + ", auteur=" + id_auteur + '}';
}
@Override
public Integer getId() {
return id_article;
}
@Override
public void setId(Integer id) {
this.id_article = id;
}
public Integer getId_article() {
return id_article;
}
public void setId_article(Integer id_article) {
this.id_article = id_article;
}
}
/*
* 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.beans;
import fr.ldnr.dao.DaoFactory;
/**
*
* @author stag
*/
public class ArticleOrm {
private Article article;
private User author;
public ArticleOrm(Article article) {
this.article = article;
}
public Article getArticle() {
return article;
}
public void setArticle(Article article) {
this.article = article;
}
public User getAuthor() {
if (author == null) {
this.author = DaoFactory.getUserDao().getById(article.getId_auteur());
}
return author;
}
public void setAuthor(User author) {
this.author = author;
}
}
/*
* 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.beans;
/**
*
* @author stag
*/
public interface Identifiable {
Integer getId();
void setId(Integer id);
}
......@@ -9,8 +9,9 @@ package fr.ldnr.beans;
*
* @author stag
*/
public class User {
private Integer id;
public class User implements Identifiable {
private Integer id_user;
private String email;
private String pseudo;
private String password;
......@@ -19,7 +20,7 @@ public class User {
}
public User(Integer id, String email, String pseudo, String password) {
this.id = id;
this.id_user = id;
this.email = email;
this.pseudo = pseudo;
this.password = password;
......@@ -31,16 +32,11 @@ public class User {
this.password = password;
}
public User(String pseudo, String password) {
this.pseudo = pseudo;
this.password = password;
}
public Integer getId() {
return id;
}
// getters and setters
public String getEmail() {
return email;
......@@ -62,12 +58,26 @@ public class User {
this.password = password;
}
public void setId(Integer id) {
this.id = id;
}
public void setEmail(String email) {
this.email = email;
}
public Integer getId_user() {
return id_user;
}
public void setId_user(Integer id_user) {
this.id_user = id_user;
}
@Override
public Integer getId() {
return id_user;
}
@Override
public void setId(Integer id_user) {
this.id_user = id_user;
}
}
/*
* 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.dao;
import java.util.*;
/**
*
* @author stag
*/
public interface Crudable<T> {
Collection<T> getAll();
int count();
T getById(int id);
void insert(T obj);
void update(T obj);
void delete(T obj);
void delete(int id);
}
/*
* 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.dao;
import fr.ldnr.beans.Identifiable;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
/**
*
* @author stag
*/
public abstract class Dao<T extends Identifiable> implements Crudable<T> {
protected Connection connection;
private String url;
private final String user = "blog";
private final String pwd = "blog";
private final String DBType = "mariadb";
private final String DBip = "localhost";
private final int DBPort = 3306;
private final String DBName = "blog";
protected String tableName;
public Dao(String tableName) {
this.tableName = tableName;
try {
Class.forName("org.mariadb.jdbc.Driver");
url = "jdbc:" + DBType + "://" + DBip + ":" + DBPort + "/" + DBName;
connection = DriverManager.getConnection(url, user, pwd);
} catch (ClassNotFoundException | SQLException ex) {
JOptionPane.showMessageDialog(null, "Connexion à la DB impossible", "Erreur", JOptionPane.ERROR_MESSAGE);
System.exit(1);
}
}
@Override
public int count() {
String req = "SELECT COUNT(*) AS total FROM " + tableName;
int count = 0;
try {
PreparedStatement pstmt = connection.prepareStatement(req);
ResultSet rs = pstmt.executeQuery();
if (rs.first()) {
count = rs.getInt("total");
}
} catch (SQLException ex) {
Logger.getLogger(Dao.class.getName()).log(Level.SEVERE, null, ex);
}
return count;
}
@Override
public void delete(T obj) {
String req = "DELETE FROM " + tableName + " WHERE id_" + tableName + "=?";
try {
PreparedStatement pstmt = connection.prepareStatement(req);
pstmt.setInt(1, obj.getId());
int nbLignesImpactees = pstmt.executeUpdate();
} catch (SQLException ex) {
Logger.getLogger(Dao.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public void delete(int id) {
String req = "DELETE FROM " + tableName + " WHERE id_" + tableName + "=?";
try {
PreparedStatement pstmt = connection.prepareStatement(req);
pstmt.setInt(1, id);
int nbLignesImpactees = pstmt.executeUpdate();
} catch (SQLException ex) {
Logger.getLogger(Dao.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
/*
* 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.dao;
import fr.ldnr.beans.Article;
import fr.ldnr.beans.ArticleOrm;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author stag
*/
public class DaoArticle extends Dao<Article> {
public DaoArticle() {
super("article");
}
@Override
public Collection<Article> getAll() {
ArrayList<Article> objects = new ArrayList<>();
String req = "SELECT * FROM " + tableName;
try {
PreparedStatement pstmt = connection.prepareStatement(req);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
objects.add(
new Article(
rs.getInt("id_" + tableName),
rs.getString("titre"),
rs.getString("content"),
rs.getDate("creationDate"),
rs.getInt("id_author")
)
);
}
} catch (SQLException ex) {
Logger.getLogger(DaoUser.class.getName()).log(Level.SEVERE, null, ex);
}
return objects;
}
@Override
public Article getById(int id) {
Article obj = null;
String req = "SELECT * FROM " + tableName + " WHERE id_" + tableName + "=?";
try {
PreparedStatement pstmt = connection.prepareStatement(req);
pstmt.setInt(1, id);
ResultSet rs = pstmt.executeQuery();
if (rs.first()) {
obj = new Article(
rs.getInt("id_" + tableName),
rs.getString("titre"),
rs.getString("content"),
rs.getDate("creationDate"),
rs.getInt("id_author")
);
}
} catch (SQLException ex) {
Logger.getLogger(DaoUser.class.getName()).log(Level.SEVERE, null, ex);
}
return obj;
}
@Override
public void insert(Article obj) {
String req = "INSERT INTO " + tableName + " ( titre, content, creationDate, id_author) VALUES (?, ?, ?, ?)";
try {
PreparedStatement pstmt = connection.prepareStatement(req, PreparedStatement.RETURN_GENERATED_KEYS);
pstmt.setString(1, obj.getTitre());
pstmt.setString(2, obj.getContenu());
pstmt.setDate(3, (Date) obj.getDateCreation());
pstmt.setInt(4, obj.getId_auteur());
int nbLignesImpactees = pstmt.executeUpdate();
ResultSet generatedKeys = pstmt.getGeneratedKeys();
if (generatedKeys.first()) {
obj.setId(generatedKeys.getInt(1));
}
} catch (SQLException ex) {
Logger.getLogger(DaoArticle.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public void update(Article obj) {
String req = "UPDATE " + tableName + " SET titre=?, content=?, creationDate=?, id_author=? WHERE id_" + tableName + "=?";
try {
PreparedStatement pstmt = connection.prepareStatement(req);
pstmt.setString(1, obj.getTitre());
pstmt.setString(2, obj.getContenu());
pstmt.setDate(3, (Date) obj.getDateCreation());
pstmt.setInt(4, obj.getId_auteur());
pstmt.setInt(5, obj.getId());
int nbLignesImpactees = pstmt.executeUpdate();
} catch (SQLException ex) {
Logger.getLogger(DaoUser.class.getName()).log(Level.SEVERE, null, ex);
}
}
public Collection<ArticleOrm> getBatchFrom(int qty, int offset) {
ArrayList<ArticleOrm> objects = new ArrayList<>();
String req = "SELECT * FROM " + tableName + " ORDER BY creationDate DESC LIMIT ? OFFSET ?";
try {
PreparedStatement pstmt = connection.prepareStatement(req);
pstmt.setInt(1, qty);
pstmt.setInt(2, offset);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
objects.add(
new ArticleOrm(
new Article(
rs.getInt("id_" + tableName),
rs.getString("titre"),
rs.getString("content"),
rs.getDate("creationDate"),
rs.getInt("id_author")
)
)
);
}
} catch (SQLException ex) {
Logger.getLogger(DaoUser.class.getName()).log(Level.SEVERE, null, ex);
}
return objects;
}
public Integer getFirstId() {
Integer id = null;
String req = "SELECT * FROM " + tableName + " ORDER BY id_" + tableName + " ASC";
try {
PreparedStatement pstmt = connection.prepareStatement(req);
ResultSet rs = pstmt.executeQuery();
if (rs.first()) {
id = rs.getInt("id_" + tableName);
}
} catch (SQLException ex) {
Logger.getLogger(DaoUser.class.getName()).log(Level.SEVERE, null, ex);
}
return id;
}
public Integer getLastId() {
Integer id = null;
String req = "SELECT * FROM " + tableName + " ORDER BY id_" + tableName + " DESC";
try {
PreparedStatement pstmt = connection.prepareStatement(req);
ResultSet rs = pstmt.executeQuery();
if (rs.first()) {
id = rs.getInt("id_" + tableName);
}
} catch (SQLException ex) {
Logger.getLogger(DaoUser.class.getName()).log(Level.SEVERE, null, ex);
}
return id;
}
}
/*
* 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.dao;
/**
*
* @author stag
*/
public class DaoFactory {
public static DaoUser getUserDao() {
return new DaoUser();
}
public static DaoArticle getArticleDao() {
return new DaoArticle();
}
}
/*
* 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.dao;
import fr.ldnr.beans.User;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author stag
*/
public class DaoUser extends Dao<User> {
public DaoUser() {
super("user");
}
@Override
public Collection<User> getAll() {
ArrayList<User> objects = new ArrayList<>();
String req = "SELECT * FROM " + tableName;
try {
PreparedStatement pstmt = connection.prepareStatement(req);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
objects.add(
new User(
rs.getInt("id_" + tableName),
rs.getString("email"),
rs.getString("pseudo"),
rs.getString("pwd")
)
);
}
} catch (SQLException ex) {
Logger.getLogger(DaoUser.class.getName()).log(Level.SEVERE, null, ex);
}
return objects;
}
@Override
public User getById(int id) {
User obj = null;
String req = "SELECT * FROM " + tableName + " WHERE id_" + tableName + "=?";
try {
PreparedStatement pstmt = connection.prepareStatement(req);
pstmt.setInt(1, id);
ResultSet rs = pstmt.executeQuery();
if (rs.first()) {
obj = new User(
rs.getInt("id_" + tableName),
rs.getString("email"),
rs.getString("pseudo"),
rs.getString("pwd")
);
}
} catch (SQLException ex) {
Logger.getLogger(DaoUser.class.getName()).log(Level.SEVERE, null, ex);
}
return obj;
}
@Override
public void insert(User obj) {
String req = "INSERT INTO " + tableName + " (email, pseudo, pwd) VALUES (?, ?, ?)";
try {
PreparedStatement pstmt = connection.prepareStatement(req, PreparedStatement.RETURN_GENERATED_KEYS);
pstmt.setString(1, obj.getEmail());
pstmt.setString(2, obj.getPseudo());
pstmt.setString(3, obj.getPassword());
int nbLignesImpactees = pstmt.executeUpdate();
ResultSet generatedKeys = pstmt.getGeneratedKeys();
if (generatedKeys.first()) {
obj.setId(generatedKeys.getInt(1));
}
} catch (SQLException ex) {
Logger.getLogger(DaoUser.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public void update(User obj) {
String req = "UPDATE " + tableName + " SET email=?, pseudo=?, pwd=? WHERE id_" + tableName + "=?";
try {
PreparedStatement pstmt = connection.prepareStatement(req);
pstmt.setString(1, obj.getEmail());
pstmt.setString(2, obj.getPseudo());
pstmt.setString(3, obj.getPassword());
pstmt.setInt(4, obj.getId());
int nbLignesImpactees = pstmt.executeUpdate();
} catch (SQLException ex) {
Logger.getLogger(DaoUser.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
*
* methode de recherche
*
*
*/
public User getByName(String pseudo) {
User obj = null;
String req = "SELECT * FROM " + tableName + " WHERE pseudo=?";
try {
PreparedStatement pstmt = connection.prepareStatement(req);
pstmt.setString(1, pseudo);
ResultSet rs = pstmt.executeQuery();
if (rs.first()) {
obj = new User(
rs.getInt("id_" + tableName),
rs.getString("email"),
rs.getString("pseudo"),
rs.getString("pwd")
);
}
} catch (SQLException ex) {
Logger.getLogger(DaoUser.class.getName()).log(Level.SEVERE, null, ex);
}
return obj;
}
//par Pseudo
public User getByName(User user) {
User obj = null;
String req = "SELECT * FROM " + tableName + " WHERE pseudo=?";
try {
PreparedStatement pstmt = connection.prepareStatement(req);
pstmt.setString(1, user.getPseudo());
ResultSet rs = pstmt.executeQuery();
if (rs.first()) {
obj = new User(
rs.getInt("id_" + tableName),
rs.getString("email"),
rs.getString("pseudo"),
rs.getString("pwd")
);
}
} catch (SQLException ex) {
Logger.getLogger(DaoUser.class.getName()).log(Level.SEVERE, null, ex);
}
return obj;
}
}
/*
* 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 fr.ldnr.beans.ArticleOrm;
import fr.ldnr.dao.DaoFactory;
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;
/**
*
* @author stag
*/
@WebServlet(urlPatterns = "/article")
public class Article extends HttpServlet {
private static final String VIEW = "/WEB-INF/Article.jsp";
/**
* 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 {
try {
int id = Integer.parseInt((String) request.getParameter("id"));
Integer firstId = DaoFactory.getArticleDao().getFirstId();
Integer lastId = DaoFactory.getArticleDao().getLastId();
if (firstId == null || lastId == null || id > lastId || id < firstId) {
throw new NumberFormatException();
}
request.setAttribute("firstId", firstId);
request.setAttribute("lastId", lastId);
request.setAttribute("articleOrm", new ArticleOrm(DaoFactory.getArticleDao().getById(id)));
request.getServletContext()
.getRequestDispatcher(VIEW)
.forward(request, response);
} catch (NumberFormatException nfe) {
response.sendRedirect(request.getContextPath() + "/home");
}
}
}
package fr.ldnr.servelets;
import fr.ldnr.beans.Article;
import fr.ldnr.dao.DaoFactory;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
......@@ -15,24 +13,29 @@ public class Home extends HttpServlet {
private static final String VIEW = "/WEB-INF/Home.jsp";
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// a remplacer par une base de donnees
List<Article> articles = new ArrayList<>();
articles.add(new Article("Article 1", "Contenu de l'article 1", "2023-04-27", 1));
articles.add(new Article("Article 2", "Contenu de l'article 2", "2023-04-28", 3));
articles.add(new Article("Article 3", "Contenu de l'article 3", "2023-04-29", 2));
articles.add(new Article("Article 4", "Contenu de l'article 4", "2023-04-30", 1));
request.setAttribute("articles", articles);
request.getRequestDispatcher(VIEW)
.forward(request, response);
// On récupère les articles depuis la DB
//request.setAttribute("articles", DaoFactory.getArticleDao().getAll());
int page;
try {
page = Integer.parseInt(request.getParameter("page"));
} catch (NumberFormatException nfe) {
page = 1;
}
int offset = (page - 1) * 10;
request.setAttribute("articles", DaoFactory.getArticleDao().getBatchFrom(10, offset));
request.setAttribute("page", page);
request.setAttribute("maxPage", 1 + (DaoFactory.getArticleDao().count() - 1) / 10);
// On appelle la vue
request.getServletContext()
.getRequestDispatcher("/WEB-INF/Home.jsp")
.forward(request, response);
}
@Override
public String getServletInfo() {
......
......@@ -19,7 +19,7 @@ import javax.servlet.http.HttpServletResponse;
*
* @author stag
*/
@WebServlet(name = "createArticle", urlPatterns = {"/createArticle"})
@WebServlet(name = "createArticle", urlPatterns = {"/back/createArticle"})
public class createArticle extends HttpServlet {
private static final String VIEW = "/WEB-INF/createArticle.jsp";
......@@ -36,9 +36,9 @@ public class createArticle extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Integer id_author = ((User) (request.getSession().getAttribute("user"))).getId();
Integer id_author = ((User) (request.getSession().getAttribute("user"))).getId_user();
if (request.getSession().getAttribute("user") != null && id_author == 1) {
if (request.getSession().getAttribute("isAdmin") != null) {
request.getServletContext()
.getRequestDispatcher(VIEW)
.forward(request, response);
......
<%--
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>