Dieser Artikel beginnt mit einem Online -Einkaufszentrum -Projekt, beginnend mit dem Bau der Umwelt und der Integration von S2SH -Projekt. Dieser Blog -Beitrag fasst hauptsächlich die Integration von Struts2, Hibernate4.3 und Spring4.2 zusammen.
Um die drei Hauptrahmen zu integrieren, müssen Sie zunächst verschiedene Umgebungen aufbauen, dh zuerst müssen Sie die Umgebungen von Frühlings-, Winterschlaf- und Struts2 -Umgebungen aufbauen, um sicherzustellen, dass sie keine Probleme haben und diese dann integrieren. Die Reihenfolge, in der dieser Blog -Beitrag folgt, lautet: Erstellen Sie zuerst die Frühlingsumgebung -> dann die Hibernate -Umgebung aufbauen -> integrieren Sie Frühling und Hibernate -> Erstellen Sie die Struts2 -Umgebung -> Integrieren Sie Frühling und Struts2.
1. Management des gesamten Projekts JAR -Paket
Der Frühling hat viele Glaspakete. Es wird empfohlen, sie in einer Kategorie zu klassifizieren und sie dann wieder in die Benutzerbibliothek hinzuzufügen, um ein leichtes Management zu erzielen und auf einen Blick zu klären. Hier fasse ich die grundlegenden JAR -Pakete zusammen, die für den gesamten SSH erforderlich sind, und sehen Sie das folgende Bild:
Wie aus der Figur ersichtlich ist, sind die Frühlingsgläser zunächst in vier Kategorien unterteilt: Spring-4.2.4-Core, Spring-4.2.4-AOP, Spring-4.2.4-Persistenz und Spring-4.2.4-Web. Setzen Sie alle Kernpakete des Frühlings in den Kern ein, setzen Sie alle mit AOP in AOP zusammen, setzen Sie alle mit Persistenz (in Hibernate integriert) in die Persistenz zusammen und setzen Sie alle mit dem Web (mit Struts2 integriert) in das Web zusammen. Welche Glaspakete haben jedes Teil? Bitte beachten Sie den Screenshot unten:
Hinweis: Die Pakete in jeder obigen Kategorie enthalten nicht alle Gläser im Originalpaket. Einige Glasdateien werden nicht verwendet. Fügen Sie sie einfach hinzu, wenn das spezifische Projekt es benötigt. Das obige Bild ist das grundlegendste JAR -Paket, das erforderlich ist, um sicherzustellen, dass die Projektumgebung das grundlegendste JAR -Paket erstellen kann.
2. Bauen Sie eine Frühlingsumgebung
Der obige Screenshot des JAR -Pakets sind alle JAR -Pakete, die zum letzten Mal integriert wurden. Wenn Sie die Umgebung zum ersten Mal aufbauen, müssen Sie sie nicht alle auf einmal hinzufügen. Sie können sie Stück für Stück hinzufügen. Dies ist auch förderlicher, um zu verstehen, was die JAR -Pakete in jedem Teil haben. Natürlich ist es auch möglich, sie alle gleichzeitig hinzuzufügen.
2.1 Fügen Sie Konfigurationsdatei beans.xml und entsprechende JAR -Pakete hinzu
Erstellen Sie ein neues Projekt und fügen Sie dann Ihre eigene Bibliothek zur Benutzerbibliothek hinzu. Hier sind zwei wichtigste, nämlich Spring-4.2.4-Core und Spring4.2.4-aop. Ich werde nicht auf Details über das Hinzufügen von Glaspaketen eingehen. Fügen Sie nach dem Hinzufügen die Bean.xml -Datei im SRC -Verzeichnis hinzu. Es gibt viele Vorlagen für diese Datei online, und es gibt auch Beispiele von Spring. Nehmen Sie einfach eine Kopie, sehen Sie sich das folgende Bild an:
2.2 IOC -Umgebung von Test Spring
Schreiben wir eine normale Java -Klasse Java.util.Date -Klasse, um zu testen, ob das Frühlings -IOC normal ist. Wenn es normalerweise in das Testprogramm injiziert werden kann, bedeutet dies, dass die IOC -Umgebung von Spring erfolgreich erstellt wird. Schreiben wir unten einen Testfall:
/** * @Description Todo (mit dem Annotations-Debugging von Spring unterstützt nur Spring3.1 und höher) * @author ni shengwu * * / / * * Nach Spring3.1 gibt es ein zusätzliches Spring-Test-4.2.4.Release.jar-Paket. Dieses JAR-Paket wird speziell zur Unterstützung von Annotations-basierten Tests für junge verwendet. Das JAR-Paket befindet sich im Spring-4.2.4-Core * Es gibt eine Springjunit4ClasRunner.Class in diesem JAR-Paket, und Sie können es mit der Annotation @runwith * * Annotation @ContextConfiguration hinzufügen bedeutet, das Anwendungscontext-Objekt nicht zu injizieren. @ContextConfiguration (Standorte = "ClassPath: beans.xml") öffentliche Klasse SSHTEST {@resource Private Datum; @Test // Testen Sie die Entwicklungsumgebung von Spring ioc public void Springioc () {System.out.println (Datum); }} Schließlich kann es normal ausgeben: Do 2 28. April 22:45:13 CST 2016. Dies zeigt, dass das Datumsobjekt von der Feder injiziert wurde, was überprüft, dass die Feder -IOC -Funktion normal ist. Aus diesem Grund wird die Frühlingsumgebung gebaut.
3. Bauen Sie eine Hibernate -Umgebung auf
Der Umgebungskonstruktion von Hibernate ist komplizierter als Frühling, da es Reverse Engineering in MyeClipse verwendet. Wir befolgen die folgenden Schritte, um die Umgebung zur Entwicklung von Hibernate -Entwicklungen aufzubauen:
3.1 Fügen Sie das entsprechende JAR -Paket hinzu
Hier fügen wir der Benutzerbibliothek hauptsächlich zwei JAR-Pakete hinzu: Hibernate4.3.11 und das MySQL-Treiberpaket MySQL-Connector-Java-5.1.26, das nicht ausführlich beschrieben wird.
3.2 Erstellen Sie eine neue Datenbank und Tabelle
Datenbank fallen lassen, wenn der Laden existiert; Erstellen Sie den Datenbank Shop Standard Zeichenset UTF8; Shop verwenden; Droptabelle, wenn eine Kategorie existiert; Tabellenkategorie erstellen ( /* Kategoriennummer, automatisches Wachstum* / id int nicht null auto_increment, /* Kategorie Name* / Typ varchar (20), /* Ob die Kategorie eine heiße Kategorie ist, kann die heiße Kategorie auf der Startseite* / Hot BOOL -Standard -False, /* die Kategoriennummer auf den Primärschlüssel einstellen* / primärer Schlüssel (ID));
3.3 dB Browser stellt eine Verbindung zur MySQL -Datenbank her
Der DB -Browser bezieht sich auf ein Ansichtsfenster in MyeClipse. Sie können intuitiv sehen, welche Datenbanken und Tabellen in MySQL sind. Die Methode zum Öffnen des DB-Browsers: Fenster-> Perspektive-> DB-Browser öffnet das DB-Browser-Arbeitsfenster. Wenn kein DB-Browser vorhanden ist, folgen Sie Folgendes: Fenster-> Ansichts-> Other-> DB-Browser eingeben und finden Sie ihn, um es zu öffnen.
Nach dem Öffnen beginnen wir eine Verbindung zur MySQL -Datenbank. Klicken Sie mit der rechten Maustaste -> Neu im leeren Bereich des DB -Browserfensters, und das folgende Dialogfeld wird angezeigt:
Klicken Sie nach dem Ausfüllen auf Testfahrer, um es zu testen. Der Test besteht den Test und zeigt an, dass der Datenbankverbindungs -Treiber konfiguriert wurde und ihn dann beendet. Auf diese Weise können wir die Datenbank MySQL 5.6 im DB -Browserfenster sehen. Klicken Sie mit der rechten Maustaste, um es zu öffnen, um die vorhandenen Bibliotheken und Tabellen in der Datenbank zu sehen, wie folgt:
3.4 Erstellen Sie die XML -Zuordnungsdatei und SessionFactory
SessionFactory wird zum Erstellen von Sitzungen verwendet. Wir erstellen sie folgendermaßen: Klicken Sie mit der rechten Maustaste auf den Projektnamen-> MyeClipse-> Hibernate-Funktionen hinzufügen. Wenn keine Hibernate-Funktionen hinzufügen, klicken Sie auf Projekt Facetten-> Installieren Sie Hibernate Facetten, und das folgende Fenster wird angezeigt:
Fügen Sie als Nächstes Hibernate -Unterstützung hinzu, dh hibernate.cfg.xml Mapping -Datei und SessionFactory in MyeClipse. Hier erstellen wir hauptsächlich ein Paket für SessionFactory, und das Standardpaket kann nicht verwendet werden.
Als nächstes fügen Sie einen Fahrer hinzu. Da wir zuvor einen Treiber konfiguriert haben, können wir hier direkt den neu konfigurierten Treiber auswählen.
Da wir zuvor unsere eigene Jar -Reservierung hinzugefügt haben, müssen Sie hier nicht wählen. Beenden Sie sie einfach direkt.
Auf diese Weise vervollständigen wir die Erstellung der Hibernate -Konfigurationsdatei und der SessionFactory. Schauen wir uns einen kurzen Blick darauf an, was in der von MyeClipse erstellten Sitzung in SessionFactory ist:
public class hibernateSessionFactory {private statische endgültige ThreadLocal <Sesion> threadLocal = new ThreadLocal <Sesion> (); // SessionFactory wird in SessionFactory Private static org.hiNNATE.SessionFactory SessionFactory verwendet; // SessionFactory: Erstellen Sie eine Fabrik für die Sitzung Private Static Configuration Configuration = New Configuration (); private statische Serviceregistry Serviceregistry; static {// SessionFactory try {configuration.configure (); serviceregistry = new ServiceregistryBuilder (). AppletStings (configuration.getProperties ()). BuildServiceregistry (); SessionFactory = configuration.buildSessionFactory (Serviceregistry); // Methode zum Erstellen von SessionFactory in Hibernate4} catch (Ausnahme E) {System.err.println ("%%%% bezüglich der SessionFactory %%%%%"); E. printstacktrace (); }} private hiberNateSessionFactory () {// Private Constructor -Methode verhindert, dass neue Objekte veröffentlicht werden, um sicherzustellen, dass SessionFactory Singleton} öffentliche statische Sitzung getSession () hibernateException {session session = (session) threadLocal.get () auslöst; // Sitzung aus dem Thread -Pool abrufen if (session == null ||! Sesopen.isopen ()) {// Wenn der Thread -Pool leer ist oder die Sitzungsöffnung fehlschlägt, wenn (sessionfactory == null) {rebuildSessionFactory (); // Wenn SessionFactory leer ist, erstellen Sie es erneut, das gleiche wie der statische Teil} session = (sessionfactory! = Null)? SessionFactory.OpenSession (): NULL; // SessionFactory ist nicht leer, erstellen Sie eine Sitzung threadLocal.set (Sitzung); // Dann diese Sitzung in den Thread -Pool einfügen und das nächste Mal} Rückgabesitzung erhalten; } public static void rebuildSessionFactory () {try {configuration.configure (); serviceregistry = new ServiceregistryBuilder (). AppletStings (configuration.getProperties ()). BuildServiceregistry (); SessionFactory = configuration.buildSessionFactory (Serviceregistry); } catch (Ausnahme e) {System.err.println ("%%%% Fehler erstellen SessionFactory %%%%%"); E. printstacktrace (); }} public static void closession () löscht HibernateException {session session = (session) threadLocal.get (); threadLocal.set (null); if (session! = null) {session.close (); }} public static org.hiberNate.SessionFactory GetSessionFactory () {// eine öffentliche Schnittstelle zur Verfügung gestellt, damit der äußeren Welt diese Singleton SessionFactory Return SessionFactory erhalten kann; } öffentliche statische Konfiguration getConfiguration () {Rückgabekonfiguration; }} Es ist aus der HibernateSessionFactory zu erkennen, dass die Singleton -Muster und die Fadenbadetechnologie hauptsächlich verwendet werden. Es ist nicht schwer zu verstehen.
3.5 Generieren Sie Modell- und ORM -Mapping -Dateien über Reverse Engineering
Als nächstes werden wir Reverse Engineering verwenden, um ein Instanzobjekt zu erstellen, dh dem Modell, das der Datenbanktabelle entspricht. Klicken Sie im DB-Browsera-Fenster mit der rechten Maustaste auf den Tischladen, den wir gerade erstellt haben, und wählen Sie Hibernate Reverse Engineering aus, um zu erstellen:
Es gibt zwei Möglichkeiten, es zu erstellen, basierend auf Konfigurationsdateien und basierend auf Anmerkungen. Es hängt von der Stimmung des Entwicklers ab. Sie können wählen:
Wählen Sie dann im nächsten Schritt die automatische PRIMAL -Taste AutoIncrement -Methode aus und vervollständigen Sie dann das Reverse Engineering, um Modell- und ORM -Mapping zu erstellen.
Nach Abschluss wird das Modell der Kategorie generiert und entsprechende Zuordnungen werden auch in der Hibernate.cfg.xml -Datei generiert. Die vorherigen Zuordnungen basieren auf Konfigurationsdateien und Anmerkungen, die auf Anmerkungen basieren, sind unterschiedlich.
3.6 Testen von Hibernate Persistente Datenbank
Da es nicht in den Frühling integriert wurde, ist es nur eine einfache Konstruktion der Umgebung zur Hibernate -Entwicklung, sodass wir keine Anmerkungen verwenden müssen. Wir führen die Dateneingabe in die Datenbank mit einem direkt neuen Dienst aus.
Schreiben Sie zuerst die Kategorie -Service -Schnittstelle und die Implementierungsklasse:
öffentliche Schnittstelle Kategorieservice {public void Save (Kategorie Kategorie); // Verwenden Sie, um die Hibernate -Umgebung zu testen. try {// Manuelle Transaktionssitzung.Gettransaction (). begin (); // Business Logic Session.save (Kategorie) ausführen; // manuell mangeln } catch (Ausnahme e) {session.getTransaction (). Rollback (); neue runimeexception (e) werfen; } endlich {hibernateSessionFactory.Closession (); }}} Im Folgenden ist der Test von Hibernate im Testfall jetzt hinzugefügt:
@Runwith (SpringJunit4ClASSRunner.class) @ContextConfiguration (SOPOLATIONS = "CLASSPATH: Beans.xml") öffentliche Klasse SSHTEST {@Resource Private Datum; @Test // Testen Sie die Entwicklungsumgebung von Spring ioc public void Springioc () {System.out.println (Datum); } @Test // testen /testen Sie die Entwicklungsumgebung von Hibernate, da es keine Integration gibt. Kategorie Kategorie = neue Kategorie ("Herren's Casual", Richtig); categoryService.save (Kategorie); }}Wir haben die Datenbank überprüft und festgestellt, dass gerade zu viele Elemente eingefügt wurden, was bedeutet, dass es kein Problem mit der Hibernate -Umgebung gab. Zu diesem Zeitpunkt haben wir die Hibernate -Entwicklungsumgebung aufgebaut.
4. Integrieren Sie Frühling und Winterschlaf.
Nachdem wir die Entwicklungsumgebung für Frühling und Winterschlaf aufgebaut hatten, begannen wir, die beiden zu integrieren. Nach der Integration von Frühling und Winterschlaf können Sie AOP verwenden, um den Feder -Hibernate -Transaktionen verwalten zu lassen. Die Integration von Frühling und Winterschlaf startet hauptsächlich aus zwei Aspekten: Einer besteht darin, die erforderlichen JAR -Pakete zu importieren, und das andere ist die Konfiguration der Bean.xml -Datei. Im Folgenden integrieren wir Schritt für Schritt Frühlings- und Hibernate.
4.1 Importieren Sie das entsprechende JAR -Paket
Es gibt zwei wichtige JAR-Pakete, die bei der Integration von Frühling und Winterschlaf importiert werden müssen, Spring4.2.4-Persistenz und C3P0-0.9.5.1. Für die spezifischen JAR -Dateien in jedem JAR -Paket finden Sie im obigen Screenshot und werden hier nicht beschrieben. Jetzt werden wir die Bean.xml -Datei konfigurieren.
4.2 Konfigurieren der Datenquellendatenquelle
Konfigurieren Sie zuerst die DataSource, und dann kann der entsprechende Teil von hibernate.cfg.xml getötet werden. Da es im Frühjahr konfiguriert ist, initialisiert die Spring diese Datenquelle, was bedeutet, dass dies der Feder zum Fertigstellen überlassen bleibt, und der entsprechende Teil in Hibernate.cfg.xml kann gelöscht werden. wie folgt:
<!-com.mchange.v2.c3p0.combopooledDataSource-Klasse befindet sich im Paket com.mchange.v2.c3p0 von C3P0-0.9.1.jar Paket-> <bean id = "DataSource"> <Property name = "Driverclass" value = "com.mysql.jdbc.ddbc.driver" /< value = "jdbc: mysql: // localhost: 3306/shode"/> <Eigenschaft name = "Benutzer" value = "root"/> <Eigenschaft name = "Passwort" value = "root"/> </bean>
Der Teil, der in Hibernate.cfg.xml getötet werden muss:
4.3 SessionFactory konfigurieren
Die SessionFactory ist so konfiguriert, dass sie eine Sitzung generiert. Darüber hinaus ist auch Hibernatetemplate möglich. Die SessionFactory wird hier jedoch anstelle von Hibernatetemplate verwendet, da Hibernatetemplate von Spring bereitgestellt wird und von der Feder abhängt. Wenn der Frühling eines Tages nicht verwendet wird, wird ein Fehler gemeldet. Und die SessionFactory wird von Hibernate bereitgestellt, kein Problem. Hibernatetemplate ist zu abhängig. Schauen wir uns die spezifische Konfiguration an:
<!-org.springframework.orm.hibernate4.LocalsessionFactoryBean-Klasse in org.springframework.orm.HiberNate4 Paket von Spring-orm-4.2.4.Release.jar Paket-> <bean id = "sessionfactory"> <Property name = "dataSource" dataSource "dataSource" dataSource " /> < value = "classPath: hibernate.cfg.xml" /> <!-Hibernate-Konfigurationsdatei laden-> < /bean>
Wir haben gerade die DataSource im SessionFactory verwendet, um die DataSource mit dem Ref -Attribut zu verweisen. Wir verwenden die Konfiguration hier nicht mehr. Wir laden direkt die Hibernate.cfg.xml -Datei und verwenden die Konfiguration in der Hibernate -Konfigurationsdatei, um sie prägnanter und bequemer zu gestalten.
4.4 Konfigurieren des Transaktionsmanagers
Der Konfigurations -Transaktionsmanager wird verwendet, um SessionFactory zu verwalten, damit alle von SessionFactory generierten Sitzungen deklarativ verwaltet werden. Die Konfiguration ist wie folgt:
<!-org.springframework.orm.hibernate4.hibernatetransactionManager Klasse Spring-orm-42.4.release.jar Paket in org.springFramework.OrM.HiberNate4 Paket-> <bean id = "transactionManager"> <Property name = "SessionFactory" Ref = "Sessionfactory" /> < /ban>
In ähnlicher Weise können wir das gerade konfigurierte SessionFactory verwenden und es mit dem Ref -Attribut verweisen. Zu diesem Zeitpunkt werden Sie feststellen, dass der gesamte Weg von oben eine Reihe von Operationen ist und sie einzeln zitiert.
4.5 Beratung konfigurieren (Benachrichtigung)
Der Zweck der Konfiguration von Ratschlägen besteht darin, festzulegen, welche Methoden welche Art von Transaktionsmodus erforderlich sind. Siehe die Konfiguration:
<tx: Ratschläge id = "Ratschläge" Transaction-Manager = "TransactionManager"> <tx: Attribute> <tx: method name = "savagation
Erforderlich bedeutet, dass bei einer Transaktion die aktuelle Transaktion unterstützt wird. Wenn es nicht gibt, wird eine neue Transaktion erstellt. Dieser Transaktionsmodus wird auf alle Methoden angewendet, beginnend mit Speichern, Aktualisieren und Löschen, dh Transaktionsunterstützung ist beim Hinzufügen, Löschen und Ändern der Datenbank erforderlich. Unterstützt bedeutet, dass bei einer Transaktion die aktuelle Transaktion unterstützt wird, und wenn es niemanden gibt, wird dies in Ordnung sein.
4.6 AOP -Facetten konfigurieren
<AOP: config> <!-Konfigurieren Sie, welche Paketklassen die Transaktion eingeben-> <AOP: pointcut id = "pointcut" Expression = "Ausführung (*cn.it.shop.Service.impl. style = "Schriftfamilie: Microsoft Yahei;"> und der Punkt oben-> <!-AOP: Pointcut muss auf den AOP: Berater geschrieben werden, andernfalls wird ein Fehler gemeldet-> </AOP: config>
AOP ist die tangentorientierte Programmierung. AOP: Pointcut definiert eine Tangente. Die Konfiguration in der Expressionseigenschaft bedeutet, dass alle Methoden unter dem Paket cn.it.shop.service.impl, unabhängig vom Rückgabewert und den Parametern, die Transaktion eingeben müssen. Dieses Paket gehört zur DAO -Ebene und betreibt die Datenbank direkt. AOP: Ratschläge kombiniert Benachrichtigungen und Abschnitte. Wir können die oben konfigurierten Ratschläge und Pointcut direkt verwenden, um sie einzuführen. Nach dieser Konfiguration bedeutet dies, dass alle Methoden unter dem Paket cn.it.shop.service.impl die Transaktionsmanagement eingeben müssen. Insbesondere Methoden, die mit Speichern, Aktualisieren und Löschen der erforderlichen Methode und anderen Methoden verwenden, verwenden die Unterstützungsmethode. Dies erleichtert es leicht, die Bedeutung dieser Konfiguration zu verstehen.
4.7 Ergebnisse der Testintegration
Als wir zuvor die Hibernate -Umgebung erstellt haben, haben wir getestet, dass wir einen Dienst direkt neu für den Betrieb der Datenbank haben, da sie zu diesem Zeitpunkt nicht in den Frühling integriert worden war. Nach der Konfiguration von beans.xml darf die Frühling Hibernate -Transaktionen verwalten. Daher muss der aktuelle Test den Service an das Frühlingsmanagement übergeben, ihn durch den Frühling injizieren und sich auf SessionFactory verlassen. Wenn Daten in die Datenbank eingefügt werden können, bedeutet dies, dass die Transaktion in Ordnung ist.
Zunächst müssen wir diesen Dienst in den Konfigurationsdateis von Spring anpassen.xml:
Kopieren Sie den Code wie folgt: <bean id = "categoryService">
<Eigenschaft name = "sessionfactory" ref = "sessionfactory" /> <!
</bean>
Zweitens müssen wir der Kategorieservice -Schnittstelle und ihrer Implementierungklassen -CategoryServiceImpl eine Methode hinzufügen, um die Integrationssituation zu testen:
öffentliche Schnittstelle Kategorieservice {public void Save (Kategorie Kategorie); // verwendet, um die Hibernate Environment Public Void Update (Kategorie Kategorie) zu testen; // Wird verwendet, um die Integration von Frühlings- und Hibernate} -Kategorie -ServiceImpl zu testen, um Kategorienservice {@Override // Die Situation, in der es keine Integration mit Spring Public void Save (Kategorie Kategorie) {// Sitzungssitzung = HibernateSessionFactory.getSession () erhalten; try {// Manuelle Transaktionssitzung.Gettransaction (). begin (); // Business Logic Session.save (Kategorie) ausführen; // manuell mangeln } catch (Ausnahme e) {session.getTransaction (). Rollback (); neue runimeexception (e) werfen; } endlich {hibernateSessionFactory.Closession (); }} /*Spring und Hibernate das gesamte* / private SessionFactory SessionFactory; // Definieren Sie ein SessionFactory // Wenn Sie SessionFactory verwenden müssen, injiziert Spring SessionFactory in öffentliche void setSessionFactory (SessionFactory SessionFactory) {this.SessionFactory = sessionFactory; } Protected Session getSession () {// Session aus dem aktuellen Thread abrufen. Wenn nicht, erstellen Sie eine neue Sitzungsrückgabe -Sitzungs -SessionFactory.getCurrentSession (); } @Override // Die Situation nach Frühling und Ruhezustand ist integriert public void Update (Kategorie Kategorie) {getSession (). Update (Kategorie); }} Jetzt können wir der Testklasse Testmethoden hinzufügen, um die Ergebnisse nach der Integration von Spring und Winterschlaf zu testen:
@Runwith (SpringJunit4ClASSRunner.class) @ContextConfiguration (SOPOLATIONS = "CLASSPATH: Beans.xml") öffentliche Klasse SSHTEST {@Resource Private Datum; @Resource private categoryService categoryService; @Test // testen Sie Spring IOC Development Environment public void Springioc () {System.out.println (Datum); } @Test // test // testen Sie die Entwicklungsumgebung von Hibernate, da es keine Integration gibt. Kategorie Kategorie = neue Kategorie ("Herren's Casual", Richtig); categoryService.save (Kategorie); } @Test // public void hibernateAndSpring () {categoryService.Update (neue Kategorie (1, "Casual Women's", True)); // CategoryService von oben bis zum Frühjahr injiziert}}}Dann haben wir die Datenbank überprüft und festgestellt, dass die Kategorie mit ID = 1 in den Stil einer lässigen Frau modifiziert wurde, was bedeutet, dass das Update erfolgreich war. Zu diesem Zeitpunkt wurden Frühling und Winterschlaf erfolgreich integriert.
5. Bauen Sie eine Struts2 -Umgebung auf
5.1 Fügen Sie die entsprechenden Konfigurations- und JAR -Pakete hinzu
Ich habe das JAR -Paket gesetzt, das für Struts2 benötigt wird, um in der Bibliothek von Struts2.3.41 zu laufen, damit ich es einfach direkt vorstellen kann, und ich werde es nicht wiederholen. Darüber hinaus muss die Datei web.xml wie folgt konfiguriert werden:
<? XSI: Schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app-app-app-app-app- = <diageinenname> e_shop </display-name> <Welcome-File-List> <Welcome-Filter> Index.jsp </Welcome-File> </Welcome-Filter-List> <Filter> <filter-name> Struts2 </filter-name> <Filter-Class> org.apache.struts2.Dispather.ng.Filter.struter.struter.struter.struter.struter.struter.struter.struter.struter.struspareAnDexDexexexexa.-Filter.struter.struter.struter.struter.strussprüge. </filter> <filter-mapping> <filter-name> struts2 </filter-name> <URL-puftern>*. Aktion </url-pattern> </filter-mapping> </web-App>
Wie oben haben wir einen StrutsprepareAndexecuteFilter-Filter konfiguriert und das URL-Muster des Filters auf *.Action festgelegt, dh alle .Action-Suffixe werden zuerst durch diesen Filter gelangen, was auch der Eingang zu Struts2 ist.
5.2 Aktion erstellen und konfigurieren Sie sie in Struts.xml -Datei
Wir erstellen eine Aktion wie folgt:
Die Kategorie der öffentlichen Klassen erweitert die AktionSverpackung {private categoryService categoryService; // CategoryService wird so eingestellt, dass die Unterschiede vor und nach der Integration mit Spring Public void setCategoryService (categoryService categoryService) {this.categoryService = categoryService; } public String update () {System.out.println ("---- Update ----"); System.out.println (categoryService); // unterschiedliche Rückgabe "Index" ausgeben; } public String Save () {System.out.println ("---- Save ----"); System.out.println (categoryService); // Verschiedene Rückgaben "Index" vor und nach der Integration; }} Anschließend konfigurieren wir die Struts.xml -Datei, die im SRC -Verzeichnis platziert ist:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="shop" extends="struts-default"> <!-- category_update.actiocan: Access-Update-Methode-> <Aktion Name = "Category_*" method = "{1}"> <result name = "index">/index.jsp </result> </action> </package> </struts> 5.3 Testen der Struts2 -Umgebung
Die Testmethode lautet: Schreiben Sie eine JSP -Zugriffsaktion, und wenn die Aktion erstellt werden kann, bedeutet dies, dass die Struts2 -Umgebung in Ordnung ist. Das heißt, eine Reihe von Prozessen in Struts2 kann normal abgeschlossen werden: JSP-> Struts.xml-> Aktion-> Struts.xml-> JSP, so dass die Umgebung von Struts2 fertig ist. Schreiben wir einen einfachen Index.jsp
<%@ page Language = "java" import = "java.util. Zugriff auf-> </span> <a href = "$ {pageContext.request.contextPath} /category_update.action"> Zugriffs-Update </a> <a href = "category_save.action"> Zugriffsspeicher </a> </body> </html>> </html>> </html> Dann stellen wir das folgende Projekt bereit, öffnen den Tomcat -Server, geben Sie ein: http: // localhost: 8080/e_shop/index.jsp im Browser, die normale JSP -Seite wird angezeigt, dann klicken Sie auf zwei Schaltflächen und springen trotzdem zu index.jsp.
---aktualisieren---
NULL
---speichern---
NULL
Dies zeigt, dass eine Linie von Struts2 abgeschlossen wurde und es kein Problem mit der Umgebung gibt. Zu diesem Zeitpunkt wurde die Struts2 -Entwicklungsumgebung gebaut.
Wir sehen, dass die Konsole NULL ausgibt, was bedeutet, dass der Kategorieservice leer ist, was bedeutet, dass wir den Kategorienservice überhaupt nicht in den Frühling integriert haben und nicht injiziert wurden, so dass Null normal ist. Wir drehen die Informationsausgabe aus der Konsole auf und finden eine Nachricht: Bean (Struts) für (com.opensymphony.xwork2.ObjectFactory). Die Klammern sagen, dass Streben von Struts2 erzeugt werden, bevor sie in die Feder integriert werden.
6. Feder- und Struts2 -Integration
6.1 Fügen Sie das entsprechende JAR -Paket hinzu
Wenn Feder und Struts2 integriert sind, ist das JAR-Paket hauptsächlich im Frühjahr 4.2.4-Web, einschließlich Struts2-Spring-Plugin-2.3.24.1.Jar. Das Leitfadenpaket wird nicht erneut beschrieben.
6.2 Action und seine Abhängigkeiten vom Frühlingsmanagement verlassen
Konfigurieren Sie die Aktion und seine Abhängigkeiten in den Konfigurationsdatei von Spring .xml. Wir haben derzeit nur eine Aktion, die wie folgt konfiguriert ist:
<bean id = "date" /> <bean id = "categoryAction" scope = "prototype"> <Eigenschaft name = "categoryService" ref = "categoryService" /> <!
6.3 Ändern Sie die Konfiguration in Struts.xml
Es stellt sich heraus, dass das Klassenattribut in Struts.xml dem vollständig qualifizierten Namen der spezifischen Aktion entspricht. Ändern Sie nun den Wert des Klassenattributs auf den ID -Wert der konfigurierten Aktion im Frühjahr, dh Kategorie, wie folgt:
<Struts> <package name = "shop" extends = "struts-default"> <!
6.4 Konfigurieren Sie den Hörer
Konfigurieren Sie den Listener ContextloaderListener in web.xml so, dass Spring -Konfigurationsdateien geladen werden können, wenn der Server startet. wie folgt:
<? XSI: Schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app-app-app-app-app- = <diageinenname> e_shop </display-name> <Welcome-File-List> <Welcome-Filter> Index.jsp </Welcome-File> </Welcome-Filter-List> <Filter> <filter-name> Struts2 </filter-name> <Filter-Class> org.apache.struts2.Dispather.ng.Filter.struter.struter.struter.struter.struter.struter.struter.struter.struter.struspareAnDexDexexexexa.-Filter.struter.struter.struter.struter.strussprüge. </filter> <filter-mapping> <filter-name> struts2 </filter-name> <url-pattern>*. Aktion </url-pattern> </filter-mapping> <! <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:beans.xml</param-value> </context-param> </web-app>
6.5 Ergebnisse der Testintegration
Wir fügen der Aktion eine neue Erklärung hinzu, um die Datenbank wie folgt zu aktualisieren:
Die Kategorie der öffentlichen Klassen erweitert die Kategorie "private Kategorie" // Setzen Sie eine private Mitgliedsvariable, um Parameter zu erhalten, die von der URL eingeführt wurden. Beachten Sie, dass die Get and Set -Methoden unten geschrieben werden sollten. Privater Kategoriedienste Kategorieservice; public void setCategoryService (categoryService categoryService) {this.categoryService = categoryService; } public String update () {System.out.println ("--- Update ---"); System.out.println (CategoryService); // Da es in den Frühling integriert wurde, können Sie diesen Kategorieservice erhalten. Es ist nicht null, nachdem es Kategorienservice (Kategorie) ausdruiert hat. // Fügen Sie eine neue Anweisung hinzu, um den Datenbankrendite "Index" zu aktualisieren. } public String Save () {System.out.println (categoryService); Rückgabe "Index"; } öffentliche Kategorie getCategory () {Rückgabekategorie; } public void setCategory (Kategorie Kategorie) {this.category = category; }} Anschließend ändern wir die Datei index.jsp wie folgt:
<%@ page Language = "java" import = "java.util. href = "$ {pageContext.request.contextpath} /category_update.action?category.id=2&category.type=gga&category.hot=false"> Zugriffs -Update </a> <a href = "category_save.action.action"> Save Save </a> </body> </html> </body> </html> </body> </html> Dann stellen wir das folgende Projekt bereit, öffnen den Tomcat -Server, geben Sie ein: http: // localhost: 8080/e_shop/index.jsp im Browser, die normale JSP -Seite wird angezeigt. Anschließend klicken Sie auf die Taste "Access Update" und springen trotzdem zu index.jsp.
. Wo id =?
Wir können die Informationen des CategoryService -Objekts ausgeben und die SQL -Anweisung auch bei der Ausführung der Aktualisierungsanweisung ausgeben. Dann fragen wir die Datenbank und stellen fest, dass der Typ der Daten mit ID = 2 auf GGA aktualisiert wurde und Hot auf False aktualisiert wurde. Wir drehen die Informationsausgabe von der Konsole nach oben und finden eine Nachricht: Bean (Frühling) für (com.opensymphony.xwork2.ObjectFactory) mit den Klammern. Im Vergleich zur obigen Situation können wir sehen, dass nach Struts2 in die Frühling integriert wird, die Aktion für das Management an den Frühling übergeben wird.
Zu diesem Zeitpunkt wurde die Integration von Struts2, Hibernate4 und Spring4 abgeschlossen, und wir können sie als nächstes in der SSH -Umgebung entwickeln!
Das komplette JAR -Paket, das für die SSH -Integration in diesem Artikel eingeführt wird: Kostenloser Download
Die Quellcode -Download -Adresse des gesamten Projekts: //www.vevb.com/article/86099.htm
Originaladresse: http://blog.csdn.net/eson_15/article/details/51277324
(Hinweis: Am Ende wird der Quellcode -Download des gesamten Projekts bereitgestellt! Jeder ist herzlich eingeladen, zu sammeln oder zu folgen).
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.