Tuto pour installer un environnement de développement JavaEE
- Télécharger Eclipse JavaEE
- Ouvrir
- Installer Eclipse JavaEE
- Télécharger Tomcat 9
- Extraire
- Stocker dans son dossier d'outils (ex : "C://tools/)
- Télécharger Oracle
- Extraire
- Exécuter et suivre le programme d'installation -> Attention bien se rappeller le mot de passe admin qu'on a miss
- Ouvrir SQL plus
- Se connecter le compte system et le mot de passe que vous avez setup dans l'installation
- Exécuter la commande suivante :
Exec DBMS_XDB.SETHTTPPORT(3010);
- Créer votre compte utilisateur :
CREATE USER nom_utilisateur IDENTIFIED BY mot_de_passe;
GRANT DBA TO nom_utilisteur;
- Dans Eclipse JavaEE faire New > Other > Web > Dynamique Web Project
- Donner un nom au projet
- Sous Target runntime > New Runtime
- Apace Tomcat > Apache Tomcat v9.0
- Dans Tomcat Installation Directory Mettre le chemin de notre installation de Tomcat via le bouton Browse
- Créer une page html dans le dossier WebContent avec un Hello World dedans
- Clic droit sur le projet > Run as > Run on server
- Cocher toujours utiliser ce serveur et valider
- Eclipse vous ouvre un navigateur embarqué
- Vous pouvez voir votre Hello World à la racine de votre application
- Télécharger le Driver ODBC
- Le placer dans le dossier WebContent > WEB-INF > lib
- Référencer le JAR dans le classpath : clic droit sur le projet > Propriétés > Java Build Path > Libraries > Add JAR > Ajouter le JAR ODBC
- Connexion :
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection c = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "nom_utilisateur", "mot_de_passe");
Une servelet est un controleur JavaEE qui sert à gérer les requêtes HTTP
@WebServlet("/HelloWorld")
public class HelloWorld extends HttpServlet {
public HelloWorld() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
- Le routage se fait avec l'annotation @WebServlet("/route") la Servlet sera ainsi servie à la route /route
- Les méthodes doGet et doPost servent à gérer respectivement les méthodes HTTP GET et POST. On utilise GET pour les pages et POST pour les formulaires (car les requêtes de méthode POST ont un RequestBody)
Dans les Servlets ce qu'on va faire c'est :
- Récupérer/Stocker des infos dans la Session
HttpSession session = request.getSession();
Utilisateur u = (Utilisateur) session.getAttribute("utilisateur");
- Récupérer/Stocker des infos dans la Base de donnée (via une Classe de DAO)
- Récupérer des infos depuis la requête (des paramètres de requête soit en GET soit en POST)
String numDocParam = request.getParameter("numero");
- Envoyer des informations à la vue
request.setAttribute("erreur", "Ce document est déjà emprunté");
- Envoyer une vue
this.getServletContext().getRequestDispatcher("/WEB-INF/emprunt.jsp").forward(request, response);
- Rediriger vers une autre route
response.sendRedirect("/projet-app-web-java/Abonne");
Les Java Server Pages sont des templates de vues qui sont rendus coté serveur. Ces vues sont templatables par du code Java mais c'est une mauvaise pratique car ça rend le code full Spaghetti bordélique et illlisible. C'est pourquoi il est recommandé d'utilise JSTL, la Java Standard Tag Library
- Télécharger JSTL
- Le placer dans le dossier WebContent > WEB-INF > lib
- Référencer le JAR dans le classpath : clic droit sur le projet > Propriétés > Java Build Path > Libraries > Add JAR > Ajouter le JAR ODBC
- Dans toutes les JSP mettre en entête :
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="j"%>
Dans une JSP on peut faire plein de choses, surtout avec la JSTL :
- Des includes d'autres JSP (utile pour factoriser les headers, les footers, etc ...)
<%@ include file="header.jsp" %>
- Afficher une variable :
<p><j:out value="${ variable }">Valeur par défaut</j:out></p>
- Rendu conditionnel avec un if :
<j:if test="${ variable = '1' }">
C'est vrai !
</j:if>
- Rendu conditionnel avec un switch :
<j:choose>
<j:when test="${ variable }">Du texte</c:when>
<j:when test="${ autreVariable }">Du texte</c:when>
<j:when test="${ encoreUneAutreVariable }">Du texte</c:when>
<j:otherwise></c:otherwise>
</j:choose>
- Itération sur une liste :
<j:forEach items="${ titres }" var="titre" varStatus="status">
<p>N°<j:out value="${ status.count }" /> : <j:out value="${ titre }" /> !</p>
</j:forEach>
Le Tp consiste au développement d'un système de login
Voilà le script pour créer le schéma de la base
CREATE SEQUENCE app_users_seq START WITH 1;
CREATE TABLE app_users(
u_id INT PRIMARY KEY,
u_login VARCHAR(50),
u_password VARCHAR(50)
);
/
CREATE OR REPLACE TRIGGER app_users_bir
BEFORE INSERT ON app_users
FOR EACH ROW
BEGIN
SELECT app_users_seq.NEXTVAL
INTO :new.u_id
FROM dual;
END;
/
Créer une classe Connexion responsable dans la connexion à la base de donnée
Insérer une ligne pour un utilisateur de test
Créer une classe de POJO ApplicationUser avec les champs nécessaires.
Créer une classe abstract DAO qui fait appelle à la classe connexion qui contient une méthode :
public boolean connect(String login, String password){}
Implémenter la méthode.
Pour faire une formulaire il faut une servlet avec une méthode doGet et une méthode doPost. Le formulaire en lui même sera servit par la méthode doGet. La soumission du formulaire se fera par la méthode doPost.
// TODO : Remplir le code manquant :
Formulaire de connexion simple :
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="j"%>
<body>
<form method="post">
<input type="text" name="login" id="login"/>
<input type="password" name="password" id="password"/>
... affichage de l'erreur ...
<input type="submit" value="Connexion"/>
</form>
</body>
La servlet correspondante :
@WebServlet("/Login")
public class Login extends HttpServlet {
private static final long serialVersionUID = 1L;
public Login() {
super();
}
// Sert la JSP du formulaire
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
...
}
// Gère la soumission du formulaire
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
... Récupération des informations du formulaire ...
if(... logique d'authentification ...){
... Stockage du profile dans la session...
... Redirection vers l'accueil ...
} else {
... Gérer l'erreur...
... Retourner la vue de login avec l'erreur ...
}
}
}
- Implémenter l'inscription : un autre formulaire et une méthode insert dans la DAO
- Chiffrer les mots de passe dans la base de donnée pour une meilleure sécurité : Utiliser la bibliothèque BCrypt
- Un peu de front : Rendre les formulaires jolis à l'aide d'un framework CSS de son choix (Bootstrap, Materialize, MS Design Lite ... )