2010-01-13 20 views
6

Je pense implémenter Front Controller dans mon application J2EE. Pourriez-vous s'il vous plaît suggérer la même chose avec quelques liens (avec des exemples de code source) & des normes à suivre?Java Front Controller

Meilleures salutations

+0

Qu'en est-il du framework Spring MVC? http://www.springsource.org/ –

+4

J2EE est remplacé par Java EE depuis plus de 3 ans. Restez à jour. – BalusC

+0

Ouais, je sais mais je vais généralement avec ça ... de toute façon merci. – user237865

Répondre

15

Pour commencer, créez un Servlet qui écoute un certain url-pattern, par ex. /pages/*. Implémentez la méthode service() pour rechercher l'action associée à la méthode de requête (GET, POST, etc.) et pathinfo (la partie d'URL après url-pattern de la servlet).

exemple de base:

protected void service(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
    View view = new View(request, response); 
    Action action = ActionFactory.getAction(request); 
    action.execute(view); 
    view.navigate(); 
} 

L'interface Action devrait représenter une unité de travail. Vous pouvez la mettre en œuvre pour faire la logique métier nécessaire:

public interface Action { 
    void execute(View view); 
} 

Le ActionFactory devrait maintenir les cours de mise en œuvre Action dans une sorte de Map<String, Action> où la clé String représente moins ou plus une combinaison de la méthode de demande et pathinfo. Vous pouvez alors obtenir un Action comme suit:

public static Action getAction(HttpServletRequest request) { 
    return actions.get(request.getMethod() + request.getPathInfo()); 
} 

Le View devrait représenter la demande SCOPED contexte que le Action peut travailler avec. Dans le navigate() vous pourriez transmettre la demande à un JSP pour l'affichage:

public void navigate() { 
    String path = "/WEB-INF" + request.getPathInfo() + ".jsp"; 
    request.getRequestDispatcher(path).forward(request, response); 
} 

Cela devrait vous commencer (notez que je suis parti tous les contrôles évidents tels que les pointeurs nuls à l'extérieur pour rendre les exemples moins encombrés, c'est à vous à présent).

Il y a cependant plus à prendre en compte dans toute l'histoire, comme la validation, la conversion, la gestion des événements, les mappages de valeurs d'entrée, la localisation, l'injection de dépendances, et cetera. C'est tout avec tout un travail. Les cadres MVC les plus décents prennent en compte la plupart de tout cela, tels que Sun JSF, Apache Struts, Spring MVC, Stripes, etcetera. Si vous n'en avez jamais fait, alors je vous recommande fortement de le faire avant d'en cultiver une, sinon vous finirez avec une perte de temps.

+0

Lorsque je lis cette documentation sur Spring MVC, il est toujours question de moteur Tomcat. Cela rend-il différent si mon moteur de servlet est Glassfish? Est-ce que glassfish lit le contenu de web.xml? –

+0

@Harry: Le printemps est un peu anti-soleil. – BalusC

+0

ohhh dieu, triste nouvelles –

1

Le web est plein de frameworks web java matures. Je ne vois pas de raison d'en créer une nouvelle à deux exceptions près: 1. Vous avez un environnement/flux très inhabituel et avez besoin de quelque chose de très, très spécifique à vos besoins. 2. Vous voulez simplement faire l'exercice de créer un cadre pour en apprendre davantage sur les tenants et les aboutissants du développement de httpservlet. JSR 154 définit les spécifications de la servlet.

Trouvez-le ici: http://jcp.org/en/jsr/detail?id=154

Le printemps est l'un des cadres populaires actuels et celui qui fonctionne pour moi. Struts était l'un des premiers cadres très populaires qui a commencé à décliner en popularité. Trouvez une bonne liste de frameworks avec une discussion à http://java-source.net/open-source/web-frameworks