slam4:tp4

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
slam4:tp4 [2012/10/04 00:45] – [Missions] jcheronslam4: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 ======
 +<html>
 +<div class="info">
 +Modalités :
 +<ul><li>1 étudiant implémente "au tableau"</li>
 +<li>Implémentation en solo</li>
 +</ul></div></html>
 +===== 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 26: Ligne 37:
   * Concevoir et réaliser les tests nécessaires pour éprouver le fonctionnement dans les différentes situations possibles   * Concevoir et réaliser les tests nécessaires pour éprouver le fonctionnement dans les différentes situations possibles
   * Sécuriser le site en empêchant les requêtes vers les autres URL que *.do   * Sécuriser le site en empêchant les requêtes vers les autres URL que *.do
 +  * Créer une classe de gestion d'un fichier de mappings (mappingList). Intégrer cette gestion sur l'application web du tp4MVC.
  
 ===== Annexes ===== ===== Annexes =====
  
 Package **web.controller** Package **web.controller**
 +==== Servlet SController ====
 +Servlet centralisant toutes les requêtes effectuées vers le serveur
  
 {{:slam4:mvc-servletcontroller.png}} {{:slam4:mvc-servletcontroller.png}}
Ligne 85: Ligne 99:
  
 } }
 +</code>
 +=== Classe Mapping et interface IMappingControl ===
 +La classe Mapping représente une redirection possible, à partir d'une requête, vers une réponse, en utilisant éventuellement une instance de IMappingControl pour vérifier la validité de la requête.
 +
 +{{:slam4:mvc-mapping.png}}
 +
 +
 +<code java |h IMappingControl>
 +package web.controller;
 +
 +import javax.servlet.http.HttpServletRequest;
 +import javax.servlet.http.HttpServletResponse;
 +
 +/**
 + * @author jc
 + *
 + */
 +public interface IMappingControl {
 + /**
 + * Contrôle la validité d'une requête
 + * @param request requête
 + * @param response réponse
 + * @return vrai si la requête est valide
 + */
 + public boolean isValid(HttpServletRequest request,HttpServletResponse response);
 +
 + /**
 + * 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,HttpServletResponse response);
 +
 + /**
 + * 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,HttpServletResponse response);
 +}
 +
 +</code>
 +
 +<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'interpréter une requête, et de fournir une réponse
 + * @author jc
 + *
 + */
 +public class Mapping {
 + protected String requestURL;
 + protected String responseURL;
 + protected Class<IMappingControl> controllerClass;
 +
 + public Mapping(String requestURL, String responseURL) {
 + //TODO à implémenter
 + }
 +
 + public Mapping(String requestURL, String responseURL, Class<IMappingControl> controllerClass) {
 + //TODO à implémenter
 + }
 +
 + /**
 + * @return l'instance de la classe de contrôle
 + */
 + 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,HttpServletResponse response){
 + //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'appel des méthode sur l'instance IMappingControl
 + * Dans l'ordre : si beforeProcessAction alors (si isValid, process sinon onInvalidControl) 
 + * @param request requête
 + * @param response réponse
 + * @return vrai si le mapping a été effectué sans erreur
 + */
 + public boolean execute(HttpServletRequest request,HttpServletResponse response){
 + //TODO à implémenter
 + return false;
 + }
 +}
 +
 +</code>
 +
 +==== Classe MappingList ====
 +Représente une collection de mappings intégrée dans une application.
 +
 +{{:slam4:mvc-mappinglist.png}}
 +
 +<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'application
 + * @author jc
 + *
 + */
 +public class MappingList {
 + private ArrayList<Mapping> items;
 +
 +
 + 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, Class<IMappingControl> controllerClass) {
 + //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é en paramètre à la liste des mappings
 + * @param mapping
 + */
 + public void add(Mapping mapping){
 + //TODO à implémenter
 + }
 +
 + /**
 + * Supprime le mapping dont l'index est passé en paramètre
 + * @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'exécute. Ne fait rien si aucun mapping ne correspond
 + * @param request
 + * @param response
 + */
 + public void process(HttpServletRequest request,HttpServletResponse response){
 + //TODO à implémenter
 + }
 +}
 +
 +</code>
 +
 +==== Sécurisation ====
 +
 +Le contrôleur redirige les requêtes en *.do. Si nécessaire, il peut être judicieux de restreindre les autres requêtes, pour des raisons de sécurité par exemple.\\
 +Le fichier **web.xml** de configuration d'une application web associée à Tomcat permet de poser des restrictions d'accès (comme les htaccess avec Apache).\\
 +Dans l'exemple suivant, les requêtes vers les jsp sont interdites, ainsi que l'accès au dossier config du serveur, et à tout son contenu.
 +
 +<code xml|h WEB-INF/web.xml>
 +<?xml version="1.0" encoding="UTF-8"?>
 +<web-app>
 + <security-constraint>
 + <web-resource-collection>
 + <web-resource-name>no-access</web-resource-name>
 + <url-pattern>*.jsp</url-pattern>
 + <url-pattern>/config/*</url-pattern>
 + </web-resource-collection>
 + <auth-constraint>
 + <description>No direct access to files</description>
 + </auth-constraint>
 + </security-constraint>
 +</web-app>
 </code> </code>
  • slam4/tp4.1349304333.txt.gz
  • Dernière modification : il y a 6 ans
  • (modification externe)