Skip to content
Commits on Source (16)
......@@ -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>
......
/*
* 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 Forms;
/**
*
* @author stag
*/
public interface Checkable {
boolean checkForm();
}
/*
* 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 Forms;
import fr.ldnr.beans.Article;
import fr.ldnr.beans.User;
import fr.ldnr.dao.DaoFactory;
import java.time.Instant;
import java.sql.Date;
import java.time.LocalDate;
import javax.servlet.http.HttpServletRequest;
/**
*
* @author stag
*/
public class CreateArticleFormChecker extends FormChecker<Article> {
private static final String TITLE_FIELD = "title";
private static final String CONTENT_FIELD = "content";
public CreateArticleFormChecker(HttpServletRequest request) {
super(request);
}
@Override
public boolean checkForm() {
boolean isFormOk = true;
String title = request.getParameter(TITLE_FIELD);
String content = request.getParameter(CONTENT_FIELD);
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) {
errors.put(TITLE_FIELD, "Le titre ne doit pas être vide");
}
if (content == null || content.length() < 25) {
errors.put(CONTENT_FIELD, "Le contenu doit faire 25 caractères au moins");
}
// Ajouter l'article à la DB s'il est valide
if (errors.isEmpty()) {
DaoFactory.getArticleDao().insert(bean);
}
return errors.isEmpty();
}
}
......@@ -12,7 +12,7 @@ import javax.servlet.http.HttpServletRequest;
*
* @author stag
*/
public abstract class FormChecker<T> {
public abstract class FormChecker<T> implements Checkable{
protected final HttpServletRequest request;
protected final HashMap<String, String> errors;
protected T bean;
......
......@@ -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> {
......@@ -18,38 +19,38 @@ public class LoginFormChecker extends FormChecker<User>{
private static final String PSEUDO_FIELD = "pseudo";
private static final String PWD_FIELD = "pwd";
public LoginFormChecker(HttpServletRequest request) {
super(request);
}
@Override
public boolean checkForm() {
String pseudo = request.getParameter(PSEUDO_FIELD);
String pwd = request.getParameter(PWD_FIELD);
bean = new User(pseudo, pwd);
boolean isFormOK = true;
bean = new User(23, null, pseudo, pwd);
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> {
......@@ -24,8 +24,8 @@ public class SigninFormChecker extends FormChecker<User>{
super(request);
}
@Override
public boolean checkForm() {
boolean isValid = true;
String email = request.getParameter(EMAIL_FIELD);
String password = request.getParameter(PWD_FIELD);
......@@ -36,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 String auteur;
private Date dateCreation;
private Integer id_auteur;
public Article() {
}
public Article(String titre, String contenu, String dateCreation, String auteur) {
public Article(String titre, String contenu, Date dateCreation, Integer auteur) {
this.titre = titre;
this.contenu = contenu;
this.dateCreation = dateCreation;
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.auteur = auteur;
this.id_auteur = id_auteur;
}
public String getTitre() {
......@@ -44,26 +55,48 @@ public class Article implements Serializable{
this.contenu = contenu;
}
public String getDateCreation() {
public Date getDateCreation() {
return dateCreation;
}
public void setDateCreation(String dateCreation) {
this.dateCreation = dateCreation;
public String getDate() {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
return sdf.format(dateCreation);
}
public String getAuteur() {
return auteur;
public void setDateCreation(Date dateCreation) {
this.dateCreation = dateCreation;
}
public void setAuteur(String auteur) {
this.auteur = auteur;
public Integer getId_auteur() {
return id_auteur;
}
public void setId_auteur(Integer id_auteur) {
this.id_auteur = id_auteur;
}
@Override
public String toString() {
return super.toString(); //To change body of generated methods, choose Tools | Templates.
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 String id;
public class User implements Identifiable {
private Integer id_user;
private String email;
private String pseudo;
private String password;
......@@ -18,8 +19,8 @@ public class User {
public User() {
}
public User(String id, String email, String pseudo, String password) {
this.id = id;
public User(Integer id, String email, String pseudo, String password) {
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 String getId() {
return id;
}
// getters and setters
public String getEmail() {
return email;
......@@ -62,12 +58,26 @@ public class User {
this.password = password;
}
public void setId(String 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;
......@@ -13,23 +11,31 @@ import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "home", urlPatterns = {"/home"})
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", "Auteur 1"));
articles.add(new Article("Article 2", "Contenu de l'article 2", "2023-04-28", "Auteur 2"));
articles.add(new Article("Article 3", "Contenu de l'article 3", "2023-04-29", "Auteur 3"));
articles.add(new Article("Article 4", "Contenu de l'article 4", "2023-04-30", "Auteur 4"));
request.setAttribute("articles", articles);
request.getRequestDispatcher("/WEB-INF/Home.jsp")
.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() {
......
......@@ -11,11 +11,24 @@ import static jdk.internal.org.jline.utils.Log.error;
@WebServlet(name = "login", urlPatterns = {"/login"})
public class Login extends HttpServlet {
private static final String VIEW = "/WEB-INF/Login.jsp";
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
RequestDispatcher dispatcher = request.getServletContext().getRequestDispatcher("/WEB-INF/Login.jsp");
if (request.getSession().getAttribute("user") == null) {
RequestDispatcher dispatcher = request.getServletContext().getRequestDispatcher(VIEW);
dispatcher.forward(request, response);
} else {
response.sendRedirect(request.getContextPath() + "/home");
}
}
@Override
......@@ -23,12 +36,18 @@ public class Login extends HttpServlet {
throws ServletException, IOException {
LoginFormChecker checker = new LoginFormChecker(request);
if (!checker.checkForm()) {
//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/Login.jsp")
.getRequestDispatcher(VIEW)
.forward(request, response);
} else {
//je met l'utilisateur en session
request.getSession().setAttribute("user", checker.getBean());
response.sendRedirect(request.getContextPath() + "/home");
}
......