In diesem Tutorial zeigen wir Ihnen, wie Sie eine Struts 2 - Webanwendung in einer Google App Engine (GAE) -Umgebung entwickeln.
Verwendete Werkzeuge und Technologien:
-
JDK 1.6
-
Eclipse 3.7 Google Plugin für Eclipse
-
Google App Engine Java SDK 1.6.3.1
-
Streben 2.3.1.2
1. Neues Webanwendungsprojekt
Erstellen Sie in Eclipse ein neues Webanwendungsprojekt mit dem Namen "Struts2GoogleAppEngine".
Das Google Plugin für Eclipse generiert ein Muster der GAE-Projektstruktur. Später zeigen wir Ihnen, wie Sie Struts2 in dieses generierte GAE-Projekt integrieren.
2. Struts 2 Bibliotheken integrieren
Erhalten Sie die folgenden Abhängigkeitsbibliotheken von Struts 2, download Struts2 hier .
-
asm-3.3.jar
-
asm-commons-3.3.jar
-
asm-tree-3.3.jar
-
commons-fileupload-1.2.2.jar
-
commons-io-2.0.1.jar
-
commons-lang-2.5.jar
-
freemarker-2.3.18.jar
-
javassist-3.11.0.GA.jar
-
ognl-3.0.4.jar
-
struts2-core-2.3.1.2.jar
-
xwork-core-2.3.1.2.jar
Legen Sie alle in den Ordner " war/WEB-INF/lib ".
Klicken Sie mit der rechten Maustaste auf den Projektordner, wählen Sie " Properties " → " Java Build Path " → " Libraries ", klicken Sie auf " Add Jars " und wählen Sie über 11 Jar aus " war/WEB -INF/lib ”Ordner in den Erstellungspfad.
3. Struts 2 Code integrieren
3.1 Löschen Sie die generierte
Struts2GoogleAppEngineServlet.java
, die Sie nicht benötigen.
3.2 Erstellen Sie eine neue Struts 2 Action-Klasse.
Datei: src/com/mkyong/user/action/WelcomeUserAction.java
package com.mkyong.user.action; public class WelcomeUserAction { private String username; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String execute() { return "SUCCESS"; } }
3.3 Erstellen Sie eine Listener-Klasse und setzen Sie die Erkennungssicherheit auf null.
-
Hinweis ** + Struts 2 benötigen diesen Listener, um in der GAE-Umgebung ausgeführt zu werden. Lesen Sie dies - http://struts.apache.org/2.2.1/docs/google-app-engine-gae.html [Issues, wenn Sie Struts 2 auf GAE bereitstellen 2-on-gae-error-result-null-not-found/[Fehler:
Ergebnis 'null' nicht gefunden]
Datei: src/com/mkyong/listener/Struts2ListenerOnGAE.java
package com.mkyong.listener; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.http.HttpSessionAttributeListener; import javax.servlet.http.HttpSessionBindingEvent; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; import ognl.OgnlRuntime; public class Struts2ListenerOnGAE implements ServletContextListener, HttpSessionListener, HttpSessionAttributeListener { public void contextInitialized(ServletContextEvent sce) { OgnlRuntime.setSecurityManager(null); } @Override public void contextDestroyed(ServletContextEvent arg0) { //TODO Auto-generated method stub } @Override public void sessionCreated(HttpSessionEvent arg0) { //TODO Auto-generated method stub } @Override public void sessionDestroyed(HttpSessionEvent arg0) { //TODO Auto-generated method stub } @Override public void attributeAdded(HttpSessionBindingEvent arg0) { //TODO Auto-generated method stub } @Override public void attributeRemoved(HttpSessionBindingEvent arg0) { //TODO Auto-generated method stub } @Override public void attributeReplaced(HttpSessionBindingEvent arg0) { //TODO Auto-generated method stub } }
3.4 Um das Struts2-Projekt in einer lokalen GAE-Umgebung ausführen zu können, müssen Sie eine
TextBlock
-Klasse erstellen und die ursprüngliche` TextBlok`-Klasse überladen. Andernfalls werden Sie die Fehlermeldung ‘javax.swing.tree.TreeNode ist eine eingeschränkte Klasse’-Fehlermeldung drücken. Hope Struts2-Team kann dies in Zukunft veröffentlichen.
-
TextBlock-Quellcode ** Gehen Sie zu dieser URL://google-app-engine/javax-swing-tree-treenode-is-a-restricted-class/[download TextBlock-Quellcode].
3.5 Überprüfen Sie die Verzeichnisstruktur des Projekts.
4. Struts 2 Pages integrieren
4.1 Erstellen Sie eine Seite "login.jsp", um Benutzereingaben zu akzeptieren.
Datei: war/Benutzer/pages/login.jsp
<%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head></head> <body> <h1>GAE + Struts 2 Example</h1> <s:form action="Welcome"> <s:textfield name="username" label="Username"/> <s:password name="password" label="Password"/> <s:submit/> </s:form> </body> </html>
4.2 Erstellen Sie eine `welcome__user.jsp'-Seite.
Datei: war/Benutzer/pages/welcome user.jsp__
<%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head></head> <body> <h1>GAE + Struts 2 Example</h1> <h2>Hello <s:property value="username"/></h2> </body> </html>
4.3 Überprüfen Sie die Projektverzeichnisstruktur erneut.
5. Struts XML-Konfiguration
Erstellen Sie eine
struts.xml
-Datei und geben Sie„
src/struts.xml
“ein.
Datei: struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="user" namespace="/User" extends="struts-default"> <action name="Login"> <result>pages/login.jsp</result> </action> <action name="Welcome" class="com.mkyong.user.action.WelcomeUserAction"> <result name="SUCCESS">pages/welcome__user.jsp</result> </action> </package> </struts>
6. web.xml
Aktualisieren Sie
web.xml
, integrieren Sie Struts2 und konfigurieren Sie den ognl-Sicherheitslistener.
Datei: web.xml
<?xml version="1.0" encoding="utf-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app__2__5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app__2__5.xsd" version="2.5"> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/** </url-pattern> </filter-mapping> <listener> <listener-class> com.mkyong.listener.Struts2ListenerOnGAE </listener-class> </listener> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> </web-app>
7. Verzeichnisstruktur
Überprüfen Sie die endgültige Verzeichnisstruktur.
8. Auf lokaler Ebene ausführen
Fertig, Zeit zum Testen. Klicken Sie mit der rechten Maustaste auf das Projekt und führen Sie es als " Web Application " aus.
URL: http://localhost : 8888/Benutzer/Login.aktion
9. Bereitstellen auf GAE
Aktualisieren Sie
appengine-web.xml
und geben Sie Ihre App Engine-Anwendungs-ID ein.
<?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>mkyong-struts2gae</application> <version>1</version> <!-- Configure java.util.logging --> <system-properties> <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/> </system-properties> </appengine-web-app>
Wählen Sie ein Projekt aus und klicken Sie auf das Google-Symbol „ Auf App Engine bereitstellen “. Google Plugin für Eclipse stellt alle erforderlichen Dateien automatisch für die GAE-Produktion bereit.
Während der Bereitstellung werden ähnliche Meldungen in der Eclipse-Konsolenansicht angezeigt.
------------ Deploying frontend ------------ Bereitstellung vorbereiten: Das Staging-Verzeichnis wurde unter "C: \ Users \ mkyong \ AppData \ Local \ Temp \ appcfg7432687551.tmp" erstellt. JSP-Dateien kompilieren Scannen von Dateien auf lokaler Festplatte. Update wird gestartet. Klonen von 2 statischen Dateien. 46 Anwendungsdateien klonen. Bereitstellen: 12 Dateien werden hochgeladen. 3 Dateien hochgeladen. 6 Dateien hochgeladen. 9 Dateien hochgeladen. 12 Dateien hochgeladen. Vorkompilierung wird initialisiert ... Stapelversand mit 11 Dateien insgesamt 44KB. Sendebatch mit 1 Blob (s), insgesamt 1 KB. Neue Version bereitstellen. Verfügbarkeit prüfen: Wird in 1 Sekunden erneut geprüft. Wird in 2 Sekunden erneut geprüft. Wird in 4 Sekunden erneut geprüft. Abschluss des Updates: Die neue Version kann jetzt bereitgestellt werden Aktualisieren des Datastores: Indexdefinitionen hochladen Die Bereitstellung wurde erfolgreich abgeschlossen
Hinweis
Endlich ist dieser lange Artikel fertig. Die Gesamtintegration ist nicht viel
schwierig, nur die Probleme mit Struts2 ognl Security und TextBlock müssen behoben werden,
Ich hoffe, dass das Team von Struts2 dies in Zukunft beheben kann.
Quellcode herunterladen
Aufgrund der großen Dateigröße sind alle Struts2-Gläser ausgeschlossen Laden Sie es manuell herunter.
Herunterladen - Struts2GoogleAppEngine.zip (23 KB)