[go: up one dir, main page]

0% ont trouvé ce document utile (0 vote)
10 vues17 pages

Java EE

Le document présente une révision complète de Java EE (Jakarta EE), abordant son évolution, son architecture MVC, les servlets, JSP, la gestion des sessions, la communication entre composants, la persistance des données et les design patterns. Il détaille également la structure d'un projet Java EE, les opérations CRUD, et les modèles de conception comme DAO et Singleton. Enfin, il explique le déploiement d'applications avec une structure de fichier WAR.

Transféré par

maximjunatan
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
10 vues17 pages

Java EE

Le document présente une révision complète de Java EE (Jakarta EE), abordant son évolution, son architecture MVC, les servlets, JSP, la gestion des sessions, la communication entre composants, la persistance des données et les design patterns. Il détaille également la structure d'un projet Java EE, les opérations CRUD, et les modèles de conception comme DAO et Singleton. Enfin, il explique le déploiement d'applications avec une structure de fichier WAR.

Transféré par

maximjunatan
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 17

java EE

Support de révision Java EE


Table des matières
Introduction à Java EE
Architecture MVC
Servlets
JSP (Java Server Pages)
Gestion des sessions
Communication entre composants
Persistance des données
Design Patterns
Déploiement d'applications

Introduction à Java EE
Définition et évolution
Java EE (Enterprise Edition), renommé Jakarta EE depuis 2019, est une plateforme de
développement pour applications d'entreprise.

Évolution historique:

J2EE (1999-2003): Servlet, JSP, EJB 1-2, JMS


Java EE 5 (2006): EJB 3, JPA, JSF, JAX-WS
Java EE 6 (2009): JAX-RS, Bean Validation, Web Profile
Java EE 7 (2013): JBatch, WebSocket, JSON-P, Concurrency
Java EE 8 (2017): Java SE 8, JSON-B, Security
Jakarta EE (2019+): Transfert à la Fondation Eclipse

Structure d'un projet Java EE


/src : Code source Java
/WebContent ou /webapp : Ressources web (HTML, JSP, CSS, JS)
/WEB-INF : Configuration et classes compilées (invisible au client)
web.xml : Descripteur de déploiement
/classes : Classes Java compilées
/lib : Bibliothèques JAR

Architecture MVC
Principes du MVC
Modèle (Model): Données et logique métier
Vue (View): Interface utilisateur
Contrôleur (Controller): Coordination et traitement des requêtes

Implémentation en Java EE
Modèle: Classes POJO Java
Vue: Pages JSP
Contrôleur: Servlets

Architecture en couches (n-tiers)


1. Couche présentation: Interface utilisateur (JSP, HTML)
2. Couche contrôleur: Gestion des requêtes (Servlets)
3. Couche métier: Logique business (Services)
4. Couche d'accès aux données: Persistance (DAO, Repository)
5. Couche base de données: Stockage (SGBD)

Servlets
Bases des Servlets
Composants Java qui traitent les requêtes HTTP
Héritent de HttpServlet
Configurés dans web.xml ou avec annotations ( @WebServlet )

Cycle de vie

public void init() throws ServletException { /* Initialisation */ }


public void service(HttpServletRequest req, HttpServletResponse resp) { /*
Traitement */ }
public void destroy() { /* Nettoyage */ }

Méthodes HTTP principales


protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// Traitement des requêtes GET
}

protected void doPost(HttpServletRequest req, HttpServletResponse resp)


throws ServletException, IOException {
// Traitement des requêtes POST
}

Exemple complet de Servlet

@WebServlet("/login")
public class LoginServlet extends HttpServlet {

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse
response)
throws ServletException, IOException {

String username = request.getParameter("username");


String password = request.getParameter("password");

UserService userService = new UserService();


User user = userService.authenticate(username, password);

if (user != null) {
HttpSession session = request.getSession();
session.setAttribute("user", user);
response.sendRedirect("dashboard.jsp");
} else {
request.setAttribute("errorMessage", "Identifiants invalides");
RequestDispatcher dispatcher =
request.getRequestDispatcher("login.jsp");
dispatcher.forward(request, response);
}
}
}

Manipulation des requêtes

// Récupération des paramètres


String param = request.getParameter("name");
String[] values = request.getParameterValues("options");
// Entêtes HTTP
String userAgent = request.getHeader("User-Agent");
Enumeration<String> headerNames = request.getHeaderNames();

// Attributs de requête
request.setAttribute("message", "Bonjour");
String message = (String) request.getAttribute("message");

Manipulation des réponses

// Type de contenu
response.setContentType("text/html;charset=UTF-8");

// Redirection
response.sendRedirect("autre-page.jsp");

// Envoi de données
PrintWriter out = response.getWriter();
out.println("<html><body>Bonjour</body></html>");

JSP (Java Server Pages)


Structure d'une JSP

<%@ page language="java" contentType="text/html; charset=UTF-8"


pageEncoding="UTF-8" %>
<%@ page import="java.util.Date, com.example.model.User" %>
<!DOCTYPE html>
<html>
<head>
<title>Ma page JSP</title>
</head>
<body>
<h1>Bienvenue sur ma page</h1>
<p>Date actuelle: <%= new Date() %></p>
</body>
</html>

Types de tags JSP


1. Directives: <%@ ... %>
<%@ page import="java.util.List" %>
<%@ include file="header.jsp" %>

2. Scriptlets: <% ... %>

<%
for (int i = 0; i < 5; i++) {
out.println("<p>Ligne " + i + "</p>");
}
%>

3. Expressions: <%= ... %>

<p>Bonjour, <%= user.getName() %></p>

4. Déclarations: <%! ... %>

<%!
private int compteur = 0;
public String formatName(String name) {
return name.toUpperCase();
}
%>

5. Commentaires: <%-- ... --%>

<%-- Ce commentaire n'apparaîtra pas dans le HTML --%>

Objets implicites en JSP


request : L'objet HttpServletRequest
response : L'objet HttpServletResponse
session : L'objet HttpSession
application : L'objet ServletContext
out : L'objet JspWriter (pour écrire dans la réponse)
pageContext : L'objet PageContext (pour accéder à d'autres objets)
config : L'objet ServletConfig
page : Référence à l'instance de servlet (équivalent à this )
exception : L'objet Exception (disponible dans les pages d'erreur)

Affichage des données dans JSP

<%-- Récupération des données depuis la requête --%>


<%
User user = (User) request.getAttribute("user");
List<Product> products = (List<Product>) request.getAttribute("products");
%>

<%-- Affichage des données --%>


<h2>Informations utilisateur</h2>
<p>Nom: <%= user.getName() %></p>
<p>Email: <%= user.getEmail() %></p>

<h2>Liste des produits</h2>


<ul>
<% for (Product product : products) { %>
<li><%= product.getName() %> - <%= product.getPrice() %> €</li>
<% } %>
</ul>

Gestion des sessions


Création et récupération

// Création d'une session ou récupération si elle existe


HttpSession session = request.getSession();

// Récupération uniquement si elle existe (sinon null)


HttpSession session = request.getSession(false);

Manipulation des attributs

// Ajout d'attributs
session.setAttribute("user", user);
session.setAttribute("lastAccess", new Date());

// Récupération d'attributs
User user = (User) session.getAttribute("user");
Date lastAccess = (Date) session.getAttribute("lastAccess");
// Suppression d'attributs
session.removeAttribute("temporaryData");

Gestion du cycle de vie

// Informations sur la session


String sessionId = session.getId();
long creationTime = session.getCreationTime();
long lastAccessTime = session.getLastAccessedTime();

// Configuration du timeout (en secondes)


session.setMaxInactiveInterval(1800); // 30 minutes

// Destruction de la session
session.invalidate();

Utilisation dans JSP

<%-- Vérifie si l'utilisateur est connecté --%>


<% User sessionUser = (User) session.getAttribute("user"); %>

<% if (sessionUser != null) { %>


<p>Bienvenue, <%= sessionUser.getName() %></p>
<a href="logout">Se déconnecter</a>
<% } else { %>
<p>Vous n'êtes pas connecté</p>
<a href="login.jsp">Se connecter</a>
<% } %>

Communication entre composants


Forward vs Redirect
Forward (transfert interne au serveur)

RequestDispatcher dispatcher = request.getRequestDispatcher("/page.jsp");


dispatcher.forward(request, response);

Redirect (nouvelle requête du navigateur)

response.sendRedirect("page.jsp");
Différences principales

Forward Redirect
Même requête Nouvelle requête
URL ne change pas URL change
Les attributs de requête sont conservés Les attributs de requête sont perdus
Plus rapide (une seule requête) Moins rapide (deux requêtes)
request.getRequestDispatcher().forward() response.sendRedirect()

Portée des attributs


1. Request (requête)
Durée de vie: durée de la requête (conservés lors d'un forward, perdus lors d'un
redirect)

request.setAttribute("message", "Bonjour");

2. Session (session utilisateur)


Durée de vie: session utilisateur (plusieurs requêtes)

session.setAttribute("user", user);

3. Application (contexte de servlet)


Durée de vie: cycle de vie de l'application

getServletContext().setAttribute("config", appConfig);

Persistance des données


JDBC (Java Database Connectivity)

// Connexion à la base de données


Connection connection = null;
try {
connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/mydb", "username", "password");
// Création d'une requête préparée
PreparedStatement stmt = connection.prepareStatement(
"SELECT * FROM users WHERE username = ? AND active = ?");
stmt.setString(1, "john");
stmt.setBoolean(2, true);

// Exécution et traitement des résultats


ResultSet rs = stmt.executeQuery();
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
Date birthDate = rs.getDate("birth_date");
// Traitement des données...
}

// Insertion de données
PreparedStatement insertStmt = connection.prepareStatement(
"INSERT INTO users (username, email, password) VALUES (?, ?, ?)");
insertStmt.setString(1, "alice");
insertStmt.setString(2, "alice@example.com");
insertStmt.setString(3, hashedPassword);
int rowsAffected = insertStmt.executeUpdate();

} catch (SQLException e) {
e.printStackTrace();
} finally {
// Fermeture des ressources
if (connection != null) {
try { connection.close(); } catch (SQLException e) {
e.printStackTrace(); }
}
}

Opérations CRUD
Create (Création)

String sql = "INSERT INTO products (name, price, category) VALUES (?, ?, ?)";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, product.getName());
stmt.setDouble(2, product.getPrice());
stmt.setString(3, product.getCategory());
int rowsInserted = stmt.executeUpdate();

Read (Lecture)
String sql = "SELECT * FROM products WHERE id = ?";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setInt(1, productId);
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
// Lire les données du ResultSet
}

Update (Mise à jour)

String sql = "UPDATE products SET name = ?, price = ? WHERE id = ?";


PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, product.getName());
stmt.setDouble(2, product.getPrice());
stmt.setInt(3, product.getId());
int rowsUpdated = stmt.executeUpdate();

Delete (Suppression)

String sql = "DELETE FROM products WHERE id = ?";


PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setInt(1, productId);
int rowsDeleted = stmt.executeUpdate();

Design Patterns
Singleton
Garantit qu'une classe n'a qu'une seule instance et fournit un point d'accès global.

public class DatabaseConnection {


private static DatabaseConnection instance;
private Connection connection;

private DatabaseConnection() throws SQLException {


// Initialisation de la connexion
connection =
DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user",
"pass");
}

public static synchronized DatabaseConnection getInstance() throws


SQLException {
if (instance == null || instance.getConnection().isClosed()) {
instance = new DatabaseConnection();
}
return instance;
}

public Connection getConnection() {


return connection;
}
}

// Utilisation
Connection conn = DatabaseConnection.getInstance().getConnection();

DAO (Data Access Object)


Isole la logique d'accès aux données de la logique métier.

// Interface DAO
public interface UserDAO {
User findById(int id);
List<User> findAll();
boolean insert(User user);
boolean update(User user);
boolean delete(int id);
}

// Implémentation
public class UserDAOImpl implements UserDAO {

@Override
public User findById(int id) {
User user = null;
try (Connection conn =
DatabaseConnection.getInstance().getConnection();
PreparedStatement stmt = conn.prepareStatement("SELECT * FROM
users WHERE id = ?")) {

stmt.setInt(1, id);
try (ResultSet rs = stmt.executeQuery()) {
if (rs.next()) {
user = new User();
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("username"));
user.setEmail(rs.getString("email"));
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return user;
}

@Override
public List<User> findAll() {
List<User> users = new ArrayList<>();
try (Connection conn =
DatabaseConnection.getInstance().getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM users")) {

while (rs.next()) {
User user = new User();
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("username"));
user.setEmail(rs.getString("email"));
users.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
}
return users;
}

@Override
public boolean insert(User user) {
try (Connection conn =
DatabaseConnection.getInstance().getConnection();
PreparedStatement stmt = conn.prepareStatement(
"INSERT INTO users (username, email, password) VALUES (?, ?,
?)")) {

stmt.setString(1, user.getUsername());
stmt.setString(2, user.getEmail());
stmt.setString(3, user.getPassword());

return stmt.executeUpdate() > 0;


} catch (SQLException e) {
e.printStackTrace();
return false;
}
}

// Autres méthodes...
}

MVC (Model-View-Controller)
Structure une application en trois composants distincts.

// Modèle (Model)
public class User {
private int id;
private String username;
private String email;
private String password;

// Getters et Setters
}

// Contrôleur (Controller)
@WebServlet("/users")
public class UserController extends HttpServlet {

private UserService userService = new UserService();

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse
response)
throws ServletException, IOException {

List<User> users = userService.getAllUsers();


request.setAttribute("users", users);

RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-


INF/views/userList.jsp");
dispatcher.forward(request, response);
}
}

// Vue (View) - userList.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<title>Liste des utilisateurs</title>
</head>
<body>
<h1>Liste des utilisateurs</h1>
<table>
<tr>
<th>ID</th>
<th>Nom d'utilisateur</th>
<th>Email</th>
</tr>
<c:forEach items="${users}" var="user">
<tr>
<td>${user.id}</td>
<td>${user.username}</td>
<td>${user.email}</td>
</tr>
</c:forEach>
</table>
</body>
</html>

Déploiement d'applications
Structure d'un fichier WAR
META-INF/ : Métadonnées
MANIFEST.MF : Informations sur l'application
WEB-INF/ : Configuration et classes
web.xml : Descripteur de déploiement
classes/ : Classes Java compilées
lib/ : Bibliothèques JAR
Ressources web: HTML, JSP, CSS, JavaScript, images

Configuration avec web.xml

<?xml version="1.0" encoding="UTF-8"?>


<web-app 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_4_0.xsd"
version="4.0">
<display-name>Mon Application</display-name>

<!-- Configuration des servlets -->


<servlet>
<servlet-name>UserServlet</servlet-name>
<servlet-class>com.example.controller.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserServlet</servlet-name>
<url-pattern>/users</url-pattern>
</servlet-mapping>

<!-- Configuration des filtres -->


<filter>
<filter-name>AuthFilter</filter-name>
<filter-class>com.example.filter.AuthenticationFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>AuthFilter</filter-name>
<url-pattern>/secure/*</url-pattern>
</filter-mapping>

<!-- Configuration des sessions -->


<session-config>
<session-timeout>30</session-timeout>
</session-config>

<!-- Page d'accueil -->


<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<!-- Pages d'erreur -->


<error-page>
<error-code>404</error-code>
<location>/error/404.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/error/error.jsp</location>
</error-page>
</web-app>

Configuration avec annotations


@WebServlet("/users")
public class UserServlet extends HttpServlet {
// ...
}

@WebFilter("/secure/*")
public class AuthenticationFilter implements Filter {
// ...
}

@WebListener
public class AppContextListener implements ServletContextListener {
// ...
}

Déploiement sur Tomcat


1. Générer le fichier WAR
Via IDE (Eclipse, IntelliJ)
Via Maven: mvn package
2. Méthodes de déploiement
Copier le WAR dans le dossier webapps de Tomcat
Utiliser l'interface d'administration Tomcat Manager
Déployer via IDE (Eclipse, IntelliJ)

Configuration de connexion à la base de données

// Fichier properties
jdbc.url=jdbc:mysql://localhost:3306/mydb
jdbc.username=user
jdbc.password=pass
jdbc.driver=com.mysql.cj.jdbc.Driver

// Chargement des propriétés


Properties props = new Properties();
try (InputStream input =
getClass().getClassLoader().getResourceAsStream("db.properties")) {
props.load(input);
String url = props.getProperty("jdbc.url");
String user = props.getProperty("jdbc.username");
String password = props.getProperty("jdbc.password");
String driver = props.getProperty("jdbc.driver");
Class.forName(driver);
connection = DriverManager.getConnection(url, user, password);
} catch (IOException | ClassNotFoundException | SQLException e) {
e.printStackTrace();
}

Ce support de révision couvre les concepts essentiels de Java EE nécessaires pour


comprendre l'architecture des applications web et mettre en œuvre les opérations CRUD.
Bonne révision !

Vous aimerez peut-être aussi