2010-01-13 10 views
6

Ich denke über die Implementierung von Front Controller in meiner J2EE-Anwendung nach. Könnten Sie bitte das gleiche mit einigen Links vorschlagen (mit Quellcode-Beispielen) & irgendwelche Standards zu folgen?Java Front Controller

Mit freundlichen Grüßen

+0

Wie wäre es mit dem Spring MVC Framework? http://www.springsource.org/ –

+4

J2EE wird seit mehr als 3 Jahren durch Java EE ersetzt. Halten Sie sich auf dem Laufenden. – BalusC

+0

Ja, ich weiß, aber ich gehe generell mit ... trotzdem danke. – user237865

Antwort

15

Um zu starten, erstellen Sie eine Servlet, die auf einer bestimmten url-pattern, z. /pages/*. Implementieren Sie die service()-Methode zum Suchen der Aktion, die der Anforderungsmethode (GET, POST usw.) zugeordnet ist, und pathinfo (der URL-Teil nach dem Servlet url-pattern).

Grund Beispiel:

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(); 
} 

Die Action Schnittstelle eine Arbeitseinheit darstellen sollte. Sie können es implementieren, um die notwendige Business-Logik zu tun:

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

Die ActionFactory die Klassen halten sollte Action in Art Map<String, Action> Implementierung, wo die String Schlüssel repräsentieren weniger oder mehr eine Kombination aus dem Anforderungsverfahren und pathinfo. Sie könnten dann eine Action erhalten wie folgt:

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

Die View sollte den Antrag scoped Kontext darstellen, die die Action mit arbeiten können. Im navigate() könnten Sie die Anforderung an eine JSP für die Anzeige weiter:

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

Das sollten Sie beginnen (beachten Sie, dass ich alle offensichtlichen Kontrollen verlassen, wie Null-Zeiger entfernt die Beispiele weniger überladen zu machen, das ist bis zu Ihnen jetzt).

Es gibt jedoch mehr zu berücksichtigen in der ganzen Geschichte, wie Validierung, Konvertierung, Event-Handling, Eingabewert-Mappings, Lokalisierung, Dependency Injection, und so weiter. Das ist alles bei allem eine ziemliche Arbeit. Die anständigeren MVC-Frameworks berücksichtigen das meiste, wie beispielsweise Sun JSF, Apache Struts, Spring MVC, Stripes, und so weiter. Wenn du noch nie etwas davon getan hast, dann empfehle ich dringend, dies zu tun, bevor du ein Haus aufbaust, sonst würdest du Zeit verlieren.

+0

Wenn ich diese Dokumentation über Spring MVC lese, spricht es immer davon, dass die Servlet-Engine Tomcat ist. Ist es anders, wenn meine Servlet-Engine Glassfish ist? Liest Glassfish den Inhalt von web.xml? –

+0

@Harry: Frühling ist ein bisschen Anti-Sun. – BalusC

+0

ohhh Gott, traurige Nachrichten –

1

Das Web ist voll von reifem Java-Web-Frameworks. Ich kann keinen Grund sehen, einen neuen mit zwei Ausnahmen zu erstellen: 1. Sie haben einige sehr nicht standardmäßige Umgebung/Fluss und brauchen etwas sehr, sehr spezifisch für Ihre Bedürfnisse. 2. Sie möchten einfach die Erstellung eines Frameworks durchgehen, um mehr über die Entwicklung von httpservlet zu erfahren.

JSR 154 definiert die Servlet-Spezifikationen. Finden Sie es hier: http://jcp.org/en/jsr/detail?id=154

Der Frühling ist einer der aktuellen gängigen Frameworks und derjenige, der für mich arbeitet. Struts war einer der ersten sehr populären Frameworks, die an Popularität verloren haben. Finden Sie eine gute Liste von Frameworks zusammen mit der Diskussion unter http://java-source.net/open-source/web-frameworks