4 Stimmen

Migration von Struts1 zu Struts2

Ich habe meine Anwendung in Struts1 und habe Dispatch Action in allen meinen Aktionen verwendet. Bitte sag mir jetzt, wie ich zu Struts 2 wechseln kann und welche Änderungen an allen meinen Aktionen und Formulardaten vorgenommen werden müssen.

6voto

kamaci Punkte 69025

Ich werde Ihnen diese Dokumentenserie vorschlagen:

Der erste Link erklärt das Thema und es gibt ein Beispiel im zweiten Link. Ich habe hier unten eine Erklärung daraus geschrieben:

Das Framework konfigurieren

Die erste und wichtigste Konfiguration ist diejenige, die das Webanwendungsframework in der web.xml-Datei des Servlet-Containers ermöglicht.

Die Konfiguration, die jedem für Struts bekannt sein sollte, lautet:

action
org.apache.struts.action.ActionServlet

    config
    /WEB-INF/struts-config.xml

2

action
*.do

Bei Struts2 gibt es nur sehr wenige Änderungen. Die signifikanteste ist, dass der Dispatcher von einem Servlet zu einem Servlet-Filter geändert wurde. Die Konfiguration ist genauso einfach wie für ein Servlet und wird hier gezeigt:

webwork

    org.apache.struts.action2.dispatcher.FilterDispatcher

webwork
/*

Die Aktionen dekonstruieren

Im Request-Durchlauf haben wir über einige Unterschiede zwischen Struts und Struts2 auf hoher Ebene gesprochen. Lassen Sie uns nun einen Schritt tiefer gehen und die Unterschiede zwischen den Strukturen der Aktionen in jedem Framework betrachten.

Zunächst wollen wir die allgemeine Struktur der Struts-Aktion überprüfen. Die allgemeine Form der Struts-Aktion sieht folgendermaßen aus:

public class MyAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // die Arbeit erledigen return (mapping.findForward("success")); } }

Bei der Implementierung einer Struts-Aktion sollten Sie folgende Punkte beachten:

  • Alle Aktionen müssen die Action-Basisklasse erweitern.
  • Alle Aktionen müssen threadsicher sein, da nur eine einzelne Aktion-Instanz erstellt wird.
  • Weil die Aktionen threadsicher sein müssen, werden alle Objekte, die für die Verarbeitung der Aktion benötigt werden können, in der Methodensignatur übergeben.
  • Der Name der Methode, die für die Verarbeitung der Aktion aufgerufen wird, ist "execute" (es gibt eine DispatchAction-Klasse in Struts, die die Methode zur Ausführung einer anderen Methode in derselben Aktion umleiten kann, aber der ursprüngliche Einstiegspunkt vom Framework in die Aktion ist immer noch die "execute"-Methode).
  • Ein ActionForward-Ergebnis wird über eine Methode der ActionMapping-Klasse zurückgegeben, meistens über den Aufruf der Methode "findForward".

Im Gegensatz dazu bietet die Struts2-Aktion eine viel einfachere Implementierung. So sieht es aus:

public class MyAction {
   public String execute() throws Exception {
        // die Arbeit erledigen
        return "success";
   }
}

Das Erste, was Ihnen möglicherweise aufgefallen ist, ist, dass die Aktion keine Klassen oder Schnittstellen erweitert. Tatsächlich geht es noch weiter. Nach Konvention wird die Methode, die bei der Verarbeitung einer Aktion aufgerufen wird, die "execute"-Methode ist - aber es muss nicht so sein. Jede Methode, die der Methode-Signatur public String methodName() folgt, kann über die Konfiguration aufgerufen werden.

Zuletzt und vielleicht der revolutionärste Unterschied zur ursprünglichen Struts-Implementierung ist, dass die Methode, die bei der Verarbeitung einer Aktion aufgerufen wird (die "execute"-Methode), keine Parameter hat. Wie also erhalten Sie Zugriff auf die Objekte, mit denen Sie arbeiten müssen? Die Antwort liegt im "Inversion of Control"- oder "Dependency Injection"-Muster (für mehr Informationen hat Martin Fowler einen informativen Artikel unter http://www.martinfowler.com/articles/injection.html). Das Spring Framework hat dieses Muster populär gemacht, jedoch begann der Vorgänger von Struts2 (WebWork) zur gleichen Zeit, dieses Muster zu verwenden.

‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

0voto

Dave Newton Punkte 156303

Du kannst dynamische Methodenaufrufe verwenden, um die alte DispatchAction-Art des "Methodennamens übergeben" - Funktionalität vage nachzubilden (oder du könntest einen Interceptor schreiben, der einen Parameter verwendet, um so etwas Ähnliches zu tun).

Es gibt in Struts 2 an sich keine "Form-Beans", obwohl du ModelDriven implementieren kannst (einige Dokumente) und es irgendwie wie eine Form-Bean funktioniert.

Alle JSPs müssen neu geschrieben werden, aber nur wenn du die Struts 1-Tags verwendest. Wenn du nur JSTL-Tags verwendet hast, könnte es sein, dass du es nicht musst, es würde darauf ankommen.

Der von Ischin bereitgestellte Link ist ein guter Ausgangspunkt, um weitere Details zu erhalten.

0voto

Pankaj Singla Punkte 1
  • Für Struts 2.x: Legen Sie den Dispatcher-Action-Filter als *.action fest
  • Für Struts 1.x: Legen Sie den Aktionsfilter als *.do . fest

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X