Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
| slam4:tp4 [2012/10/03 23:47] – [Contraintes techniques] jcheron | slam4:tp4 [2019/08/31 14:21] (Version actuelle) – modification externe 127.0.0.1 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| ====== Mise en place de MVC ====== | ====== Mise en place de MVC ====== | ||
| + | < | ||
| + | <div class=" | ||
| + | Modalités : | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | ===== Activités du référentiel concernées : ===== | ||
| + | |||
| + | * D4.1 - Conception et réalisation d’une solution applicative | ||
| + | * A4.1.4 Définition des caractéristiques d’une solution applicative | ||
| ===== Contexte ===== | ===== Contexte ===== | ||
| Il s'agit du même contexte que dans le TP précédent.\\ | Il s'agit du même contexte que dans le TP précédent.\\ | ||
| Le développement à effectuer le sera dans le cadre d'une architecture applicative de type client serveur Web... | Le développement à effectuer le sera dans le cadre d'une architecture applicative de type client serveur Web... | ||
| - | Il s'agit de mettre en place un contrôleur unique dans le cadre de MVC2. | + | Il s'agit de mettre en place un contrôleur unique dans le cadre de MVC2,\\ |
| + | d'en comprendre la logique, et les intérêts. | ||
| Ligne 23: | Ligne 34: | ||
| - Elle est ensuite renvoyée vers le client | - Elle est ensuite renvoyée vers le client | ||
| ===== Missions ===== | ===== Missions ===== | ||
| - | * Réaliser | + | * Implémenter les classes décrites ci dessous |
| - | * Concevoir | + | * Concevoir et réaliser les tests nécessaires pour éprouver le fonctionnement dans les différentes situations possibles |
| - | * Implémenter | + | * Sécuriser le site en empêchant les requêtes vers les autres URL que *.do |
| - | * faire évoluer | + | * Créer une classe de gestion d'un fichier de mappings (mappingList). Intégrer cette gestion sur l'application web du tp4MVC. |
| + | |||
| + | ===== Annexes ===== | ||
| + | |||
| + | Package **web.controller** | ||
| + | ==== Servlet SController ==== | ||
| + | Servlet centralisant toutes les requêtes effectuées vers le serveur | ||
| + | |||
| + | {{: | ||
| + | |||
| + | <code java |h SController.java> | ||
| + | package web.controller; | ||
| + | |||
| + | 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; | ||
| + | |||
| + | /** | ||
| + | * Servlet implementation class SController | ||
| + | */ | ||
| + | @WebServlet(" | ||
| + | public class SController extends HttpServlet { | ||
| + | private static final long serialVersionUID = 1L; | ||
| + | |||
| + | /* (non-Javadoc) | ||
| + | * @see javax.servlet.http.HttpServlet# | ||
| + | */ | ||
| + | /** | ||
| + | * Appelle | ||
| + | */ | ||
| + | @Override | ||
| + | protected void service(HttpServletRequest request, HttpServletResponse response) | ||
| + | throws ServletException, | ||
| + | // TODO à implémenter | ||
| + | super.service(request, | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | * @see HttpServlet# | ||
| + | */ | ||
| + | public SController() { | ||
| + | super(); | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | * @see HttpServlet# | ||
| + | */ | ||
| + | protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, | ||
| + | |||
| + | } | ||
| + | |||
| + | /** | ||
| + | * @see HttpServlet# | ||
| + | */ | ||
| + | protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, | ||
| + | |||
| + | } | ||
| + | |||
| + | } | ||
| + | </ | ||
| + | === Classe Mapping et interface IMappingControl === | ||
| + | La classe Mapping représente une redirection possible, à partir d'une requête, vers une réponse, | ||
| + | |||
| + | {{: | ||
| + | |||
| + | |||
| + | < | ||
| + | package web.controller; | ||
| + | |||
| + | import javax.servlet.http.HttpServletRequest; | ||
| + | import javax.servlet.http.HttpServletResponse; | ||
| + | |||
| + | /** | ||
| + | * @author jc | ||
| + | * | ||
| + | */ | ||
| + | public interface IMappingControl { | ||
| + | /** | ||
| + | * Contrôle la validité | ||
| + | * @param request requête | ||
| + | * @param response réponse | ||
| + | * @return vrai si la requête est valide | ||
| + | */ | ||
| + | public boolean isValid(HttpServletRequest request, | ||
| + | |||
| + | /** | ||
| + | * Méthode appelée si la requête n'est pas valide | ||
| + | * @param request requête | ||
| + | * @param response réponse | ||
| + | */ | ||
| + | public void onInvalidControl(HttpServletRequest request, | ||
| + | |||
| + | /** | ||
| + | * Contrôle la requête avant toute action | ||
| + | * @param request requête | ||
| + | * @param response réponse | ||
| + | * @return vrai si l'exécution peut continuer | ||
| + | */ | ||
| + | public boolean beforeProcessAction(HttpServletRequest request, | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | <code java |h Mapping> | ||
| + | package web.controller; | ||
| + | |||
| + | import javax.servlet.http.HttpServletRequest; | ||
| + | import javax.servlet.http.HttpServletResponse; | ||
| + | |||
| + | /** | ||
| + | * Représente un mapping d'URL, permettant d' | ||
| + | * @author jc | ||
| + | * | ||
| + | */ | ||
| + | public class Mapping { | ||
| + | protected String requestURL; | ||
| + | protected String responseURL; | ||
| + | protected Class< | ||
| + | |||
| + | public Mapping(String requestURL, String responseURL) { | ||
| + | //TODO à implémenter | ||
| + | } | ||
| + | |||
| + | public Mapping(String requestURL, String responseURL, | ||
| + | //TODO à implémenter | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | * @return l' | ||
| + | */ | ||
| + | public IMappingControl getMappingControl(){ | ||
| + | //TODO à implémenter | ||
| + | return null; | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | * Retourne l'url de réponse associée à la requête | ||
| + | * @param request requête | ||
| + | * @return url de réponse | ||
| + | */ | ||
| + | protected String getResponseURL(HttpServletRequest request){ | ||
| + | //TODO à implémenter | ||
| + | return ""; | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | * Effectue la redirection vers la requête appropriée | ||
| + | * @param request | ||
| + | * @param response | ||
| + | * @return | ||
| + | */ | ||
| + | protected boolean process(HttpServletRequest request, | ||
| + | //TODO à implémenter | ||
| + | return false; | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | * Vérifie que la requête correspond à requestURL du mapping courant | ||
| + | * @param request requête | ||
| + | * @return vrai si la requête correspond au mapping courant | ||
| + | */ | ||
| + | public boolean matches(HttpServletRequest request){ | ||
| + | //TODO à implémenter | ||
| + | return false; | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | * Appelle le process en tenant compte de l' | ||
| + | * Dans l' | ||
| + | * @param request requête | ||
| + | * @param response réponse | ||
| + | * @return vrai si le mapping a été effectué sans erreur | ||
| + | */ | ||
| + | public boolean execute(HttpServletRequest request, | ||
| + | //TODO à implémenter | ||
| + | return false; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | ==== Classe MappingList ==== | ||
| + | Représente une collection de mappings intégrée dans une application. | ||
| + | |||
| + | {{: | ||
| + | |||
| + | <code java |h MappingList> | ||
| + | package web.controller; | ||
| + | |||
| + | import java.util.ArrayList; | ||
| + | |||
| + | import javax.servlet.http.HttpServletRequest; | ||
| + | import javax.servlet.http.HttpServletResponse; | ||
| + | |||
| + | /** | ||
| + | * Classe contenant la liste des mappings de l' | ||
| + | * @author jc | ||
| + | * | ||
| + | */ | ||
| + | public class MappingList { | ||
| + | private ArrayList< | ||
| + | |||
| + | |||
| + | public MappingList(){ | ||
| + | //TODO à implémenter | ||
| + | } | ||
| + | |||
| + | |||
| + | |||
| + | /** | ||
| + | * Crée et ajoute un mapping dont les paramètres sont passés à la méthode | ||
| + | * @param requestURL URL de la requête | ||
| + | * @param responseURL URL de la réponse | ||
| + | * @param controllerClass Classe de contrôle | ||
| + | */ | ||
| + | public void add(String requestURL, String responseURL, | ||
| + | //TODO à implémenter | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | * Crée et ajoute un mapping dont les paramètres sont passés à la méthode | ||
| + | * @param requestURL URL de la requête | ||
| + | * @param responseURL URL de la réponse | ||
| + | */ | ||
| + | public void add(String requestURL, String responseURL) { | ||
| + | //TODO à implémenter | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | * Ajoute le mapping passé | ||
| + | * @param mapping | ||
| + | */ | ||
| + | public void add(Mapping mapping){ | ||
| + | //TODO à implémenter | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | * Supprime le mapping dont l' | ||
| + | * @param index index du mapping à supprimer | ||
| + | * @return vrai si le mapping a été supprimé | ||
| + | */ | ||
| + | public Mapping remove(int index){ | ||
| + | //TODO à implémenter | ||
| + | return null; | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | * Supprime le mapping passé en paramètre | ||
| + | * @param mapping mapping à supprimer | ||
| + | * @return vrai si le mapping a été supprimé | ||
| + | */ | ||
| + | public boolean remove(Mapping mapping){ | ||
| + | //TODO à implémenter | ||
| + | return false; | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | * Retourne le premier mapping correspondant à la requête | ||
| + | * @param request requête | ||
| + | * @return le mapping correspondant à la requête | ||
| + | */ | ||
| + | public Mapping getFirstMatches(HttpServletRequest request){ | ||
| + | //TODO à implémenter | ||
| + | return null; | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | * Recherche le mapping correspondant à la requête dans la liste des mappings | ||
| + | * puis l' | ||
| + | * @param request | ||
| + | * @param response | ||
| + | */ | ||
| + | public void process(HttpServletRequest request, | ||
| + | //TODO à implémenter | ||
| + | } | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | ==== Sécurisation ==== | ||
| + | |||
| + | Le contrôleur redirige | ||
| + | Le fichier **web.xml** de configuration d'une application web associée à Tomcat permet de poser des restrictions d' | ||
| + | Dans l' | ||
| + | <code xml|h WEB-INF/ | ||
| + | <?xml version=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||