Ich glaube, dass niemand nichts über SSH weiß. Struts2+Spring+Hibernate, die "grundlegende" Architektur der Enterprise -Entwicklung, warum werden die Grundlagen in Zitaten gekennzeichnet? Weil diese Stiftung genau das ist, was viele Menschen davon denken. Das grundlegendste ist Servlet. Viele Trainingsinstitutionen vermitteln nicht viele Grundlagen und haben drei Hauptrahmen direkt. SSH oder SSI, wodurch viele Menschen denken, dass die Javaweb -Entwicklung Rahmenbedingungen haben muss. Ohne einen Rahmen ist es das gleiche, wie die Hände verlieren. In den drei großen Rahmenbedingungen schadet es keinen Schaden und sie sind praktisch. Viele Unternehmen verwenden sie und können sie direkt mit der Entwicklung beginnen. Aber nach dem Abschluss dachte ich, ich hätte die drei großen Rahmenbedingungen schon lange nicht mehr benutzt. Frühling ist nützlich, insbesondere SpringMVC. Es fühlt sich viel aufregender an als Struts2. Wenn Sie darüber nachdenken, absorbiert der Frühling einige der Vorteile von Streben, und mit einigen erholsamen Dingen fühlt es sich viel angenehmer an. Aber heute werden wir SpringMVC nicht ansehen, und wir werden uns Zeit nehmen, um die eleganten Teile von SpringMVC in der Zukunft zu sehen.
Auf den Punkt kommen. SSH hat die Version aktualisiert, daher möchte ich hier immer noch über die Version sprechen, ansonsten werden mich viele Freunde beschimpfen. Ich benutze 2.3.4 für Struts2, der Frühling ist der neueste 3.2.2 und der Hibernate ist 4.1,9, was ziemlich neu ist.
Bevor Sie den Code eingeben, verstehen wir zunächst die Rollen, die die drei großen Frameworks gespielt haben.
1) Streben: Warum verwenden wir Streben? Was ist der Unterschied zwischen ihnen und Servlets? Tatsächlich können wir immer noch MVC ohne Streben durchführen, aber es ist möglicherweise in der Konfigurationsdatei etwas deprimierter. Struts hilft uns hauptsächlich, eine Funktion der Verteilung zu erkennen, unsere spezifischen Anforderungen in eine bestimmte Klasse zu unterteilen und Eigenschaften festzulegen (die durch ActionForm in Struts1.x durchgeführt werden). Struts2 hat im Vergleich zu Struts1 viel Fortschritte gemacht. Es legt automatisch Werte fest, erfordert keine Implementierungs- oder Erbschaftsklassen und verfügt über eine Reihe von Konzepten wie Anforderungsketten. Da diese nicht viel verwendet werden, werde ich Sie nicht irreführen, also werde ich nicht viel sagen.
2) Frühling: Ich glaube, dass der Spring's Daimyo nicht Java ist, weiß es nicht. Viele Menschen hätten zu Beginn etwas über das IOC erfahren sollen, oder sie wussten nichts, nur die drei großen Frameworks SSH kamen. Es ist sowieso egal, wenn wir die drei großen Frameworks verwenden, der Frühling ist größtenteils ein Werkzeug für eine Linkklasse. In Kombination mit den beiden anderen Hauptrahmen SSI und SSH sind sie gleich. Spring bietet nur Werkzeuge, mit denen wir die drei wichtigsten Frameworks bequemer sind. Natürlich beruht eine große Anzahl von Programmen in der Framework -Kombination auch auf das IOC von Spring, und wir werden natürlich Transaktionen verwenden. AOP und andere fortgeschrittenere Dinge hängen von den Bedürfnissen ab. Wenn Anforderungen an die Protokollanforderungen und Abfangen -Anforderungen vorliegen, ist es besser, AOP zu verwenden, um dies zu erreichen.
3) Hibernate: Hibernate ist auch in der Java -Welt berühmt, im Grunde der Standard von Orm. Es bietet Cache, Stufe 1 und Stufe zwei, und es gibt auch HQL. Was verwenden wir bei der Kombination der drei großen Frameworks? Natürlich ist es die Hauptfunktion der ORM -Zuordnung, daher werden wir den Cache vorerst nicht berücksichtigen. Viele Menschen haben nie darüber nachgedacht, warum sie Orm brauchen. Tatsächlich ist es hauptsächlich auf den Konflikt zwischen den Datenfeldern und der Klasse zurückzuführen. Wenn Sie JDBC verwenden, um die Felder nacheinander zu bedienen und festzulegen, werden Sie wahrscheinlich verrückt werden, nachdem Sie es für eine lange Zeit gemacht haben, sodass die ORM zu diesem Zeitpunkt erscheint.
Die drei Hauptframeworks sind für folgende Dinge verantwortlich: Struts2 - Verantwortlich für die Anfrage weiterleitet und entsprechende Verarbeitung von Formularen, Frühlingsklassenorganisation (d. H. IOC), verwaltet die von Struts2 verwaltete Aktion als Bohnen und Hibernate - ORM -Kartierung, kartiert die Klassen an Tabellen.
Nachdem wir die allgemeine Arbeitsteilung verstanden hatten, haben wir natürlich angefangen, zu codieren. Das schwierigste an den drei großen Frameworks ist das Paket. Viele Menschen verwenden gerne MyeClipse, hauptsächlich, weil es uns helfen kann, Pakete der drei Hauptrahmen zu importieren. Es wird jedoch empfohlen, dass Anfänger das nicht verwenden sollten. Erstens hat MyeClipse eine eigene Projektstruktur. Wenn Sie den Eclipse -Leitfaden erhalten, müssen Sie einige Projektfacetten einrichten, die anderen Unannehmlichkeiten verursachen. Zweitens verwendet MyeClipse es selten im Unternehmen, daher ist es besser, mit Eclipse vertraut zu sein. Oder es ist gut, wenn Sie Ideen mögen.
Die erforderlichen Pakete für Struts2 sind wie folgt: Antlr, ASM, Xwork, Struts2-Core, OGNL, Common-Logging, Common-FileUpload, Struts-Spring-Plugin. Es gibt wahrscheinlich nur wenige, und es ist möglicherweise nicht vollständig geschrieben. Sie können die Fehler beim Start hinzufügen. Es wird nicht empfohlen, alle Pakete auszuwerfen, sobald Sie beginnen. Einige Pakete in den drei Frameworks sind in Konflikt.
Die von Spring3 erforderlichen Pakete sind wie folgt: Federbecken, Spring-Core, Spring-Context, Spring-Context-Support, Spring-Expression, Spring-ARM (wir verwenden drei Hauptrahmen und erfordern eine ORM-Unterstützung), Spring-Web, Spring-TX (wir verwenden Transaktionen, aber nicht in das Beispiel involviert).
Die von Hibernate4 erforderlichen Pakete sind wie folgt: Hibernate lädt alle JAR -Pakete im erforderlichen Ordner im Paket herunter.
Genau wie diese Pakete ist es immer noch dasselbe. Es wird nicht empfohlen, alle Pakete zu setzen, sobald Sie beginnen, da einige Pakete in den drei Frameworks Konflikte haben. Fügen Sie sie daher bei Bedarf nach Bedarf hinzu. Wenn ClassNotFound angezeigt wird, legen Sie das entsprechende JAR -Paket in das Lib -Verzeichnis.
Die Vorbereitungen enden hier und wir beginnen offiziell.
1) Zunächst müssen wir Struts2 verwenden, und wir müssen die Anfrage abfangen
<Filter> <filter-name> Struts2 </filter-name> <filterklasse> org.apache.struts2.dispatcher.ng.filter.strutsprepareAnDexecuteFilter </Filterklasse> </Filter-Mapping> <Filter-NAME> Stuts2 </Filter-Name> </Filter-Name> </filter-name </filtermapping>
Dieser Code ermöglicht es Struts, alle Anforderungen abzufangen. Natürlich bedeutet dies nicht, dass alle Anfragen vom Frühling abgefangen werden. Wir können auch Struts.xml konfigurieren, um bestimmte Suffixnamen abzufangen. Im Allgemeinen handelt es sich um eine Aktion. wie folgt:
<Constant Name = "Struts.ObjectFactory" value = "Spring" /> <Constant Name = "Struts.Action.Action.Extesion" value = "action" />
Struts.Action.Extension konfiguriert den Standard -Suffix -Namen zum Abfangen, damit der Suffix -Name beim Abfangen überprüft wird, und diejenigen, die übereinstimmen, werden von Streben weitergeleitet. Die Struts.ObjectFactory bedeutet, dass die Streben -Weiterleitungsverarbeitungsklasse für das Management an Spring übergeben wird, dh sie wird als Bohne verwaltet.
2) Normalerweise, wenn wir Spring direkt verwenden, rufen wir *applicationContext an, aber wir sind jetzt im Web, sodass wir es nicht manuell anrufen können. Tatsächlich bietet Spring eine Methode für den Anruf in der Websituation mit einem Servlet (ich habe dies nicht verwendet, ich weiß nicht, wie man es benutzt), einem Hörer, einem Servlet für Anwendungsserver, die Filter nicht unterstützen, aber jetzt verwenden wir im Grunde genommen den Listener.
<Hörer> <Hörer-Klasse> org.springframework.web.context.contextloaderListener </Listener-Klasse> </Listener>
In diesem Fall müssen die meisten Fälle, in denen der Frühling mit anderen Frameworks kombiniert werden muss. Wenn wir nur SpringMVC verwenden, können wir den DispatcherServlet direkt konfigurieren, um das obige Streben -Servlet zu ersetzen. Schauen wir uns die Details an, wenn Sie SpringMVC später verwenden.
In diesem Fall wird die Datei applicationContext.xml im Web-INF-Verzeichnis im Allgemeinen geladen. Wenn Ihr Dateiname nicht so ist oder der Pfad nicht hier ist, können Sie die Eigenschaft configContextPath konfigurieren.
<Context-Param> <param-name> configContextPath </param-name> <param-value> web-inf/applicationContext.xml </param-value> </context-param>
Es unterstützt die Verwendung von ClassPath: Präfix usw., ich werde hier nicht darüber sprechen, Sie können die Konfigurationsdatei von Spring im Detail lesen. Auf diese Weise haben wir tatsächlich Streben und Frühling kombiniert, aber wir haben keine Bohnenkonfiguration und Streben weitergeleitet.
3) Als ORM wird der Winterschlaf zu diesem Zeitpunkt auch vom Frühling verwaltet. Die Frühling bietet eine Einheimische. Beachten Sie, dass diese Klasse Hibernate3 und 4 unterschiedlich sind, die Frühling zwei liefert. Die folgende Konfiguration erfolgt in applicationContext.xml
<bean id = "sessionfactory"> <Eigenschaft name = "dataSource" ref = "dataSource"/> <Eigenschaft name = "mapingResources"> <list> </list> </property> <Eigenschaft name = "hibernateProperties"> <props> </props> </property> </bean>
Tatsächlich ähnelt die Konfiguration dem in Hibernate, sodass ich hier nicht über den spezifischen Code spreche.
4) In der Vergangenheit, als der Frühling 2.5.x am meisten hibernatedaosupport verwendet wurde, hat Spring 3.x diese Unterstützung zu Beginn nicht bereitgestellt. Wir müssen die native Sitzung verwenden, um zu operieren (nur die Sitzung injizieren), aber hier gibt es tatsächlich ein Problem. Wenn wir die Verbindung für jede Anfrage öffnen und schließen, wird sie mehr Ressourcen verbrauchen, aber wenn wir die Verbindung nicht schließen, ist sie nicht sehr gut. Es gibt also eine Kompromisslösung und ein Manager, um die Verbindung zu verwalten. Hier bietet Spring eine OpenSessioninview. Jedes Mal, wenn eine Ansicht geöffnet wird (im Grunde jede Anfrage), wird die Sitzung geöffnet. Wir werden ignorieren, wie es vorerst intern verwaltet wird.
<Filter> <Filter-name> OpenSessionInviewFilter </filter-name> <filter-class> org.springframework.orm.hibernate4.Support.OpenSessioninViewfilter </Filter-Class> </Filter> <Filtermapping> <filter-name> <URL-Muster>/*</url-puster> </filtermapping>
Hier bitten wir ihn immer noch, alle Anfragen abzufangen. Natürlich kann es so konfiguriert werden, dass nur Aktionssuffixe abgefangen werden, sodass keine Ressourcen verschwenden müssen.
5) Grundsätzlich ist unser SSH -Framework eingerichtet, und das nächste ist nur ein Problem mit dem Code. Sie müssen die Bean nur in der Feder-Konfigurationsdatei konfigurieren oder wenn Sie Annotation mögen, können Sie nur @component (value = 'Bean Name') direkt, aber denken Sie daran, Komponenten-Scan in der Konfigurationsdatei zu aktivieren.
Der Code wird ungefähr wie folgt nicht ausführlich geschrieben:
@Component (value = "userAction") public class userAction {} <package name = "user" extends = "struts-default" namespace = "/user"> <!-Benutzeranmeldung-> <action name = "login" method = "login"> <result name = "error">/pages/login.jsp </result> </action> </action> </action> </action> </action> </action> </action> </action> </action> </action> </action> </action> </action> </action> </action> </action> </action> </action> </action> </action> </action> </action> Tatsächlich muss der Zeiger in der Klasse nur an Zeigerbohnen geändert werden.
Ich werde den detaillierten Code nicht veröffentlichen, es ist eine Zusammenfassung. Im Allgemeinen ist SSH für den Spezifikationscode eines Teams vorteilhafter, da der in den Framework -Spezifikationen geschriebene Code im Grunde ein spezifisches Formular enthält, was für die zukünftige Wartung besser ist. Für Anfänger wird jedoch empfohlen, sich nicht zu sehr auf den Rahmen zu verlassen. Wenn Sie es wirklich verwenden müssen, müssen Sie im Allgemeinen verstehen, was dieses Framework macht, welche Umstände Sie es verwenden müssen und welche Umstände Sie es niemals verwenden sollten.