Dieser Artikel hat Ihnen die Methode zum Anpassen von Struts2 -MVC -Framework für Ihre Referenz geteilt. Der spezifische Inhalt ist wie folgt
Benutzerdefinierte MVC: (Verstehen Sie zuerst die Konzepte von Modell1 und Modell2)
Modell1 und Modell2:
Modell1: Es ist eine reine JSSP -Entwicklungstechnologie, die Geschäftslogikcode und View -Rendering -Code kombiniert.
Modell 2: Modell2 basiert auf Modell1, trennt den Geschäftslogikcode und bildet allein ein Servlet. Modell2 wird auch basierend auf MVC entwickelt.
Die Eigenschaften von MVC werden wie folgt zusammengefasst:
(1) Datenerfassung und Anzeige -Trennung
(2) Der Controller kombiniert verschiedene Modelle und Ansichten miteinander
(3) Die Anwendung ist in drei Teile unterteilt, locker gekoppelt und zusammenarbeiten, wodurch die Skalierbarkeit und Wartbarkeit der Anwendung verbessert wird
(4) Jede Schicht ist für verschiedene Funktionen verantwortlich und erfüllt ihre eigenen Aufgaben. Die Komponenten jeder Schicht haben die gleichen Eigenschaften, was die Erzeugung von Programmcode durch Engineering und Werkzeug erleichtert.
MVC -Gedanke und seine Vorteile (sehr stark)
MVC ist ein Architekturmodell. Ziel ist es, das Modell (Geschäftslogik) und die Ansicht (Präsentationsschicht) zu trennen, damit das Modell und die Ansicht unabhängig geändert werden können, ohne sich gegenseitig zu beeinflussen. Die meisten Software übernehmen dieses Muster beim Entwerfen von Architekturen. Es gibt viele Möglichkeiten, den MVC -Modus zu verwenden. Wenn ein System, das durch einen Browser stöbert, eine mobile Version entwickeln möchte, müssen Sie die Ansicht nur sanieren und die Geschäftslogik des Modellteils wiederverwendet werden. Viele Software müssen gleichzeitig B/S- und C/S -Versionen starten und den MVC -Modus übernehmen, das Modellteil kann wiederverwendet werden und nur verschiedene Ansichten müssen entwickelt werden. MVC -Idee unterteilt eine Anwendung in drei Grundteile: M (Modell, Modell) V (Ansicht, Ansicht) C (Controller, Controller). Wenn M den Teil darstellt, der die Geschäftslogik verarbeitet, stellt V den Teil dar, der Daten anzeigt und Benutzereingaben erhält. C ähnelt einem Vermittler und stellt sicher, dass m und v nicht direkt interagieren.
Die grundlegenden Schritte sind wie folgt:
1. Erstellen Sie XML Dokument Framework.xml
2. Definieren Sie die Aktionsschnittstelle
3. Definieren Sie eine ActionMapping -Klasse und behandeln Sie sie als Aktionsknoten
4. Definieren Sie die ActionMappingManage -Klasse, um ActionMapping -Klassen zu verwalten (Aktionsknoten)
5. Definieren Sie die ActionManager -Klasse mithilfe des Reflexionsmechanismus, um bestimmte Klassen basierend auf dem Klassennamen des String -Typs (Schreiben von Web.xml -Tags) zu erhalten.
6. Schreiben Sie Servlets für die Laufzeitkontrolle
7. Definieren Sie die Anmeldungsklasse zum Testen
1. Erstellen Sie XML Dokument Framework.xml
<!-? xml Version = "1.0" coding = "utf-8"?-> <!-Definitionsbeschränkungsdatei-> (Anmerkung) <!-Element zeigt Element an-> <!-Attribut an, die Attribut anzeigt-> <!-CDATA zeigt String-Typ an-> <!-Erforderlich zeigt diese Attribut an-> <!- *- *-rot. Weiterleiten-> <!-Elementaktionen (Aktion)-> <!-Element-Aktion (Ergebnis*)-> (* bedeutet mehrere) <!-Attlist-Aktion Name CDATA #-Required Class CDATA #Required-> <!-Attlist-Ergebnisname CDATA #implied Redirect (wahr | false) "false". Name = "Erfolg"> success.jsp </result> <result name = "login"> index.jsp </result> </action> </actions> </Framework>
Hinweis: Die Schreibspezifikationen von Räumen und <>.
Die Hierarchie des Knotens.
2. Definieren Sie die Aktionsschnittstelle
HINWEIS: Excute -Parameter werden geschrieben, angefordert und geantwortet.
3. Definieren Sie eine ActionMapping -Klasse und behandeln Sie sie als Aktionsknoten (schreiben Sie die Beschriftung des Aktionsknotens).
Kapuliert Daten in die Felder und Ergebnissesammlungen.
Hinweis: Fügen Sie Daten zum Schreiben hinzu. (Kartensammlung)
4. Definieren Sie die ActionMappingManage -Klasse, um ActionMapping -Klassen zu verwalten (Aktionsknoten)
/** Es gibt mehr als einen Aktionsknoten* zum Verwalten von ActionMapping -Klasse*/public Class ActionMappingManager {// Sammlung von ActionMapping -Klassen private Karte <String, ActionMapping> Maps = new HashMap <String, ActionMapping> (); public actionMapping getActActionMapping (String -Name) {return maps.get (name); } // Alle Konfigurationsdateien unter dem SRC -Projekt analysieren // Analyse After Instantiation public actionMapPingManager (String [] Datei) {für (String -Dateiname: Datei) {init (Dateiname); }} // Initialisierungsmethode // Das XML -Dokument public void init (String Pfad) {try {inputStream is = this.getClass (). getResourceAsStream ("/"+Pfad); // xml document doc = new SAXReader (). Read (IS); // das Root Node Element root = doc.getrootelement () abrufen; // Erhalten Sie die Aktionen Knotenelementaktionen = (Element) root.elementiterator ("Aktionen"). Weiter (); // Verwenden Sie die for -Schleife, um alle Aktionsknoten unter dem Aktionsknoten für (Iterator <element> action = actions.elementiterator ("action"); action.hasnext ();) {// das <Aktion> -Knotenelement -ActionNext = Action.Next () zu durchqueren. // das Namensattribut und das Klassenattribut des Namens im Aktionsknoten erhalten String name = actionNext.attributeValue ("Name"); String className = actionNext.attributeValue ("Klasse"); // Speichern Sie die beiden oben genannten Attribute in der ActionMapping Class ActionMapping map = new ActionMapping (); mapapp.setClassName (className); mapapp.setName (name); // Da es mehrere Ergebnisknoten unter einem Aktionsknoten gibt, das alle Ergebnisknoten unter der Aktion für (Iterator <element> result = actionNext.elementiterator ("Ergebnis") durchquert. // den Namensattributwert des Ergebnisknotens und den Wert im Ergebnisknoten String resultName = resultNext.attributeValue ("Name") extrahieren; String resultValue = resultNext.getText (); // Speichern Sie sie in den in Action-Mapping festgelegten Doppelspalt, um das Aufrufen der ActionMapping-Klasse zu erleichtern (es gibt Daten in der ActionMapping-Klasse!) Mapp.adDresult (resultName, resultValue); System.out.println (mapp.getName ()); } // Erhalten Sie die Sammlung aller Action -Knoten Maps.put (mapp.getName (), map); }} catch (Exception E) {// Todo: Handle -Ausnahme}}}Zusammenfassung:
Analysieren Sie die Konfigurationsdatei von Framework.xml über DOM4J. Dadurch wird der Root -Knoten und den Aktionsknoten erhalten und dann die Aktionsknoten unter dem Aktionsknoten durch die for -Schleife durchquert, um die Attributwerte von Namen und Klasse zu erhalten. Da es unter einem Aktionsknoten und allen Ergebnisknoten unter der Aktion mehrere Ergebnisknoten gibt, werden sie im doppelten Spalt in actionMapping gespeichert und erhalten schließlich den Satz aller Aktionsknoten.
HINWEIS: Das Schreiben der Init -Methode und das Schreiben des ActionMappingManagers mit Parametergruppen.
5. Definieren Sie die ActionManager -Klasse unter Verwendung des Reflexionsmechanismus, um bestimmte Klassen basierend auf dem Klassennamen des String -Typs zu erhalten.
public Class ActionManager {public static action getActionClass (String className) {class clazz = null; Aktion Aktion = null; // Erhalten Sie den Klassenlader des aktuellen Thread -Versuchs {// Wenn sich im Thread eine Klasse befindet, erhalten Sie direkt den Typ der Klasse gemäß dem Klassennamen clazz = thread.currentThread (). } catch (classNotFoundException e) {// Todo automatisch generierter Catch-Block e.printstacktrace (); } if (clazz == null) {try {// wenn es keinen im Thread gibt, dann verwenden Sie die class.forname -Methode, um Clazz = class.forname (className) zu erhalten; } catch (classNotFoundException e) {// Todo automatisch generierter Catch-Block e.printstacktrace (); }} if (action == null) {try {// den erhaltenen Typ in Aktion konvertieren und den parameterlosen Konstruktor aufrufen, der zu einem gewissen Grad neu entspricht, aber neue Bedürfnisse des Typs Action = (action) clazz.newinstance (); } catch (InstantiationException e) {// Todo automatisch generierter Catch-Block e.printstacktrace (); } catch (illegalAccessException e) {// Todo automatisch generierter Fangblock E. printstacktrace (); }} Rückgabeaktion; }}Knotenkonfiguration für web.xml:
6. Schreiben Sie Servlets, um die Laufzeit zu steuern (Servlets, initialisieren Sie alle Klassen)
Die öffentliche Klasse MyServlet erweitert HttpServlet { / ***Sie sind so ungezogen* / public void dagget (httpServletRequest Request, httpServletResponse -Antwort). } <br> / ***arbeiten weiter hart* / actionMapingManager Man = null; public void dopost (httpServletRequest request, httpServletResponse -Antwort) löst ServletException aus, iOException {// ActionMapping -Objekt -ActionMapping ActionMapping = Man.GetactactactactactionMapping (GetPath (Anfrage)); // Erhalten Sie den Reflexionsmechanismus von Action Interface Action Action = ActionManager.getActionManager (ActionMapPing.getClassName ()); try {String message = action.execute (Anfrage, Antwort); String -Ergebnisse = actionMapping.getResults (Nachricht); Antwort.Sendredirect (Ergebnisse); } catch (Ausnahme e) {// Todo automatisch generierter Block E. printstacktrace (); }} /** Den Pfadnamen der Anforderung abrufen* /public String getPath (httpServletRequest -Anforderung) {// Project + Request Adress String Requesturi = Anrequenz.getRequesturi (); // Projektname String contextPath = request.getContextPath (); // Spezifische Anforderungsstring path = requesturi.substring (contextPath.length ()); String Dateiname = path.substring (1, path.lastIndexof (".")); Rückgabe Dateiname; } / * * Umschreiben init, Programm läuft und lädt alle Klassen * * /@Override public void init (servletConfig config) löscht servletException {// config -Objekt ein Objekt von javax.servlet.servletConfig. Die Funktion besteht darin, die Initialisierungskonfigurationsinformationen zu erhalten. String [] Dateinamen = NULL; if (fileName == null) {// wenn es leer ist, fileNames = new String [] {"Framework.xml"}; } else {// Wenn andere Konfigurationsparameterinformationen vorhanden sind, wird es im Array gespeichert, indem Dateinamen = Dateiname.split (",") getrennt wird; } // Verwenden Sie die Init -Methode für Initialisierung mAN = new ActionMappingManager (Dateinamen); }}Hinweis: Die Ebene und die Kommentare des Code.
7. Definieren Sie die Anmeldungsklasse zum Testen
öffentliche Klasse LoginAction implementiert eine Aktion (@Override public String execute (httpServletRequest -Anforderung, httpServletResponse -Antwort) Ausnahme {String name = request.getParameter ("Name"); String pwd = request.getParameter ("pwd"); if (name.equals ("1") && pwd.equals ("1") {return Erfolg; } else {return login; }}}JSP -Code:
Den Effekt erkennen:
Egal wie lange die Straße ist, Sie können Schritt für Schritt gehen und egal wie kurz die Straße ist, Sie können sie nicht erreichen, ohne einen Schritt zu tun.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.