IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

Architecture MVC


Sujet :

Servlets/JSP Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Architecture MVC
    Bonjour à toutes et à tous.

    J'ai un projet avec mon école pour un client où l'on doit développer une photothèque accessible via l'intranet...
    Un prof nous a conseillé une architecture MVC, c'est à dire avec une Servlet de contrôle qui gère le traitement et l'affichage séparement.
    Je suis parti là-dessus mais hier un autre prof m'a dit que ce que j'ai fait été à jeter à la poubelle...
    Pourquoi ?
    Vu que les servlets faisaient du Multithread, il pouvait y avoir des risques de bugs lorsque plusieurs utilisateurs seraient connectés en meme temps sur l'appli car les variables seraient partagées...
    Il a dit qu'il y avait un moyen de corriger ce problème en implémentant l'interface SingleThreadModel mais que cela baisserait les performances...
    Avez vous un avis là dessus ???
    Car là c grosse dépression
    Merci d'avance...

  2. #2
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    hello,

    L'architecture MVC est preconisée pour le developpement d'une application.
    (d'ailleur cette architecture ne s'applique pas uniquement au application web).
    Maintenant la remarque de ton deuxieme prof concernant les riques de bugs est valable dans le cas d'utilisation de variable d'instance ou de classe dans une servlet.
    Chose qui est efffectivement peut recommandée.
    Aussi, je ne sais quelle version de servlet tu utilises , mais l'interface SingleThreadModel est déclarée deprecated depuis la version 2.4 de l'API.

    Le modele MCV preconise la separation des couches (modele, vue controleur). Dans cette architecture tu peux avoir une mutiplication des controleurs (servlet) Maintenant il y le modele MVC2 qui préconise l'utilisation d'une seul servlet qui est le seul point d'entrée de la couche vue sur le controleur. Le framework Struts est basé sur ce modele MVC2. Si tu regardes la javadoc de Struts tu verras que la servlet ActionServlet, de struts n'implemente pas cette interface.

    En conclusion, je pense que tu devrais suivre les conseilles du premier prof, et dire au 2eme de reprendre des cours concernant Java-J2EE


    J'espere que cela t'aidera, si tu as des questions, n'hesite pas!
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup pour ta reponse.
    J'utilise en effet une seule servlet controller.
    Par contre je suis assez léger en therminologie, qu'est ce qu'une variable d'instance ou de classe dans une servlet ?

    Voici le source de ma servlet controller.
    C'est juste pour savoir si je l'utilise bien...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
     
    public class ControllerServlet extends HttpServlet
    {
    	Hashtable actions;
    	public void init() throws ServletException
    	{
    		initActions();
    	}
     
    	public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException
    	{
    		doPost(req,resp);
    	}
     
    	public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException
    	{
                                    // Recupération de l'action
    		String actionName = req.getParameter("action");
     
    		if(actionName == null)
    		{
    			resp.sendError(HttpServletResponse.SC_NOT_ACCEPTABLE);
    			return;
    		}
     
                                    // Instanciation de l'action à effectuer
    		Action action = (Action) actions.get(actionName);
    		if(action == null)
    		{
    			resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED);
    			return;
    		}
     
                                    // Lancement de l'action
    		action.perform(this, req, resp);
    	}
     
    	private void initActions()
                    // Table de hashage comprenant toutes les actions à effectuer
                    // Chacune de ces actions implémente l'interface Action
    	{
    		actions = new Hashtable();
    		actions.put("authenticate",new AuthenticateAction());
    		actions.put("logout",new LogoutAction());
    		actions.put("login",new LoginAction());
    		actions.put("indexation",new IndexationAction());
    	}
     
    }

  4. #4
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    Regardes comment est fait le framework SPRING, voir utilises ce framework tout simplement
    http://www.springframework.org

  5. #5
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello

    Une variable membre : C'est une variable ayant comme porté la classe. Ta hashtable actions est un très bonne exemple.
    Une variable de classe : une variable declarée static, donc commune à toutes les instances de ta classe.

    Les variables que l'on peux utiliser sans trop se soucier de cette aspect de Multihread sont les constances (variable declarées : static final)

    Dans ton cas, la variable que tu utilises ne devrait pas poser de problème car un hashtable est déclarée threadSafe, donc elle ne peut etre modifier que par un seul thread à la fois.

    Par contre , c'est une impression , ou tu reimplementes le controleur de struts : ActionsServlet?

    Aussi, ce que tu pourrais faire, declarer dans un bloc static l'initialisation de ta Hashtable. Car son contenu ne change jamais( si j'ai bien compris ce que tu voulais faire). J'imagine que à terme tu mettras les differentes actions à initialiser dans un fichier xml. .

    Je ne sais pas si tu connais les blocs static. Ils permettent d'effectuer un traitement au moment de l'instanciation de ta classe et juste à ce moment là. Remarque, c'est ce que tu fais avec la methode init() qui est appelé à ce moment là!


    voila, j'espere que cela t'aidera, si tu as des questions n'hesite pas!
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci pour ces réponses.

    En fait oui je réimplémentes la class ActionServlet, enfin je pense voilà ce que j'ai :


    public interface Action
    {
    public void perform(etc...


    et j'ai par exemple ma classe IndexationAction qui implémente cette classe du genre :


    public class IndexationAction implements Action
    {
    public void perform(etc...


    J'ai chopé ca sur une doc de mon premier prof...
    Après je n'ai aps de fichier XML mais la méthode perform de ma classe IndexationAction récupères les données d'une base pour les passer à une page jsp grace aux usebeans.

  7. #7
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    Oui c'est exactement ca pour l'implementation de la classe ServletAction.
    Sauf que Action n'est pas une interface mais une classe.
    Cette classe permet d'ajouter des comportements ...

    Mais le principe tu as tout juste!

    En ce qui concerne le fichier XML, je voulais parler de la definition des differentes classes action que tu definis dans ton application web.

    En fait, ce fichier XML t'évites d'ecrire en dur l'instanciation des classes actions comme tu l'as fait dans ta methode initAction().

    Voila, bon courage pour la suite de ton implementation!
    N'oublie pas le tag résolu si tu penses que ton problème est resolu.. si tu as d'autres questions n'hesite pas!
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup pour tes réponses
    Cela me rassure que je n'ai aps passé mes soirées pour du vent

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. architecture mvc etxml/xsl
    Par kiko2005 dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 14/08/2009, 14h52
  2. Architecture MVC sous Access ?
    Par samtheh dans le forum Modélisation
    Réponses: 1
    Dernier message: 28/04/2007, 11h00
  3. Architecture MVC & C++ Builder ?
    Par zi_omnislasher dans le forum C++Builder
    Réponses: 5
    Dernier message: 14/12/2006, 23h24
  4. Utiliser une architecture MVC
    Par misterniark dans le forum MVC
    Réponses: 5
    Dernier message: 03/11/2006, 22h35
  5. [Spring MVC] Architecture MVC dans spring
    Par Alec6 dans le forum Spring Web
    Réponses: 4
    Dernier message: 11/10/2006, 12h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo