1.
Une application doit être ouverte à l'extension et fermée à la
modification. Expliquer.
Ce principe fait partie des SOLID principles, spécifiquement le principe
d'ouverture/fermeture (Open/Closed Principle).
Ouvert à l'extension : Une application doit permettre l'ajout de nouvelles
fonctionnalités sans modifier son code existant.
Fermé à la modification : Une fois une classe ou un module testé et
déployé, il ne devrait pas être modifié directement pour ajouter des
fonctionnalités.
Exemple :
Une classe de calcul de formes géométriques peut être étendue via des sous-
classes pour ajouter de nouvelles formes, mais le code d'origine ne doit pas être
modifié.
2. Quelles sont les méthodes utilisées pour stocker un objet dans un objet
HttpServletRequest ?
Les méthodes pour manipuler les attributs d'une requête sont :
setAttribute(String name, Object value) : Ajoute ou
remplace un attribut dans l'objet HttpServletRequest.
removeAttribute(String name) : Supprime un attribut existant.
3. Est-ce qu'une adresse IP du client est incluse dans une URL ?
Non, une adresse IP n'est pas incluse dans une URL.
Une URL (Uniform Resource Locator) spécifie l'adresse d'une ressource
sur le Web.
Une adresse IP identifie un dispositif connecté au réseau.
Cependant, le serveur peut récupérer l'adresse IP du client via la méthode
getRemoteAddr() de l'objet HttpServletRequest.
4. Quelles sont les méthodes permettant d'obtenir une ou plusieurs valeurs
d'un objet HttpServletRequest ?
Pour une valeur unique :
getParameter(String name) : Récupère la valeur d'un paramètre
unique passé dans la requête.
Pour plusieurs valeurs :
getParameterValues(String name) : Retourne un tableau de
toutes les valeurs associées à un paramètre avec le même nom.
5. Citer les différentes couches d'une plateforme .NET.
Les couches principales sont :
1. CLR (Common Language Runtime) : Fournit un environnement
d'exécution pour le code.
2. BCL (Base Class Library) : Bibliothèques de classes pour des
fonctionnalités courantes (collections, fichiers, etc.).
3. Framework and Tools : API et outils de développement pour les
applications.
6. Le .NET Framework comporte trois parties principales. Quelles sont ces
parties ?
1. CLR (Common Language Runtime) : Gère l'exécution des applications.
2. Framework Class Library (FCL) : Contient des bibliothèques de
classes pour le développement.
3. Langages pris en charge : Fournit la prise en charge de divers langages
comme C#, [Link], etc.
7. Quel type d'application le .NET Framework prend-t-il en charge ?
Le .NET Framework prend en charge :
Applications Windows : Desktop, Windows Forms.
Applications Web : [Link].
Services Web : Services SOAP/RESTful.
Applications mobiles et cloud.
8. Expliquer le concept d'Inversion of Control (IoC) en JEE par un
exemple.
Concept : IoC est un principe de conception où le contrôle de la création
des objets et des dépendances est inversé.
o Dans JEE, IoC est souvent implémenté via Dependency Injection
(DI).
Exemple :
Au lieu de créer une instance d'une classe dépendante avec new, l'objet
est injecté par un conteneur (comme Spring).
Exemple de code avec CDI (Contexts and Dependency Injection) en JEE :
// Classe de service
@Stateless
public class PersonService {
public void savePerson(Person person) {
// Logique de sauvegarde
}
}
// Classe contrôleur
@Inject
private PersonService personService;
public void addPerson(Person person) {
[Link](person);
}
Exercice : Application Web JEE
1. Architecture de l'application (MVC)
Modèle : Représente l'entité Person et sa gestion dans la base de
données (JPA/MySQL).
Vue : Pages JSP pour afficher les formulaires et les résultats.
Contrôleur : Servlet pour traiter les requêtes utilisateur et orchestrer les
interactions entre la vue et le modèle.
2. Classe entité
@Entity
public class Person {
@Id
private String idCard; // Numéro de carte
d'identité
private String firstName;
private String lastName;
private String gender;
private String city;
// Getters et Setters
}
3. Interface métier et implémentation
Interface :
public interface PersonService {
void addPerson(Person person);
Person findPersonById(String idCard);
List<Person> findPersonsByCity(String city);
}
Implémentation :
@Stateless
public class PersonServiceImpl implements
PersonService {
@PersistenceContext
private EntityManager em;
public void addPerson(Person person) {
[Link](person);
}
public Person findPersonById(String idCard) {
return [Link]([Link], idCard);
}
public List<Person> findPersonsByCity(String
city) {
return [Link]("SELECT p FROM Person p
WHERE [Link] = :city", [Link])
.setParameter("city", city)
.getResultList();
}
}
4. Étapes de déploiement d'une servlet
1. Créer la classe servlet et annoter avec @WebServlet.
2. Configurer [Link] (si nécessaire).
3. Compiler et empaqueter le projet dans un fichier WAR.
4. Déployer le fichier WAR sur un serveur compatible JEE (Tomcat,
WildFly).
5. Servlet
@WebServlet("/person")
public class PersonServlet extends HttpServlet {
@EJB
private PersonService personService;
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws
ServletException, IOException {
String action =
[Link]("action");
if ("add".equals(action)) {
Person person = new Person();
[Link]([Link]("idCard"));
[Link]([Link]("firstName")
);
[Link]([Link]("lastName"));
[Link]([Link]("gender"));
[Link]([Link]("city"));
[Link](person);
} else if ("search".equals(action)) {
String idCard =
[Link]("idCard");
Person person =
[Link](idCard);
[Link]("person", person);
} else if ("list".equals(action)) {
String city =
[Link]("city");
List<Person> persons =
[Link](city);
[Link]("persons", persons);
}
[Link]("/[Link]").forward(r
equest, response);
}
}
6. Pages JSP
Formulaire d'ajout :
<form action="person" method="post">
<input type="hidden" name="action" value="add">
Numéro Carte ID : <input type="text"
name="idCard"><br>
Prénom : <input type="text" name="firstName"><br>
Nom : <input type="text" name="lastName"><br>
Genre : <input type="text" name="gender"><br>
Ville : <input type="text" name="city"><br>
<input type="submit" value="Ajouter">
</form>
Formulaire de recherche :
<form action="person" method="post">
<input type="hidden" name="action"
value="search">
Numéro Carte ID : <input type="text"
name="idCard"><br>
<input type="submit" value="Rechercher">
</form>
Formulaire de liste :
<form action="person" method="post">
<input type="hidden" name="action" value="list">
Ville : <input type="text" name="city"><br>
<input type="submit" value="Lister">
</form>
Si vous avez besoin d'exemples supplémentaires ou de clarifications, faites-le-
moi savoir !