Struts und Tiles
Transcrição
Struts und Tiles
Struts Praktikum – Einleitung Um zunächst mit der Entwicklung von J2EE-Anwendungen mit dem Struts-Framework beginnen zu können, müssen am Anfang zunächst einige initiale Schritte durchgeführt werden, damit die Entwicklung möglichst problemlos verlaufen kann. Folgende kurze Einleitung soll dabei helfen die korrekte Konfiguration der IDE Eclipse, den J2EE-Server Jetty sowie dem Build-Tool Maven sicherzustellen. Zunächst muss ein neues Projekt für dieses Praktikum angelegt werden, sofern die alten Ergebnisse aus dem vorherigen Praktikas nicht überschreiben werden sollen (eine andere Möglichkeit wäre natürlich den aktuellen Stand zu sichern und im bereits vorhandenen Projekt weiterzuarbeiten. Dann kann dieser Schritt übersprungen werden.) Dazu wird in Eclipse auf File-->New-->Other... geklickt und im Wizard unter Maven ein neues Maven-Projekt angelegt. Solange auf „Next“ nun klicken bis man bei der Katalog-Auswahl angekommen ist. Hier beim Filter nach „Web“ suchen und anschließend bei Artefact ID „maven-archetype-web“ auswählen und „Next“ drücken. Nun eindeutige Group und Artifact Ids für dieses Projekt vergeben und mit „Finish“ das neue Projekt erstellen. Nach dem Erstellen des neuen Projektes nun in der „pom.xml“ folgende Dependencies hinzufügen: <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>jetty</groupId> <artifactId>javax.servlet</artifactId> <version>5.1.12</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.3.16.3</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-tiles-plugin</artifactId> <version>2.3.16.3</version> <scope>compile</scope> </dependency> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> </dependencies> Anschließend die pom.xml abspeichern, damit alle wichtigen Dependencies für dieses Praktikum von Maven automatisch transitiv aufgelöst werden können. Anschließend unter src/main/resources eine neue XML-Datei namens „struts.xml“ anlegen und mit folgendem Inhalt befüllen: <?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> <constant name="struts.devMode" value="true" /> </struts> Dies ist ein Einstiegspunkt für die weiteren Aufgaben. Es werden dabei zunächst keinerlei Packages angelegt und initial der Entwicklungsmodus für ausführlichere Fehlermeldungen aktiviert. In der web.xml unter „WEB-INF“ müssen zudem folgende Filter eingefügt werden, damit Struts korrekt aufgerufen wird: <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> Anschließend unter src/main/java ein neues Package de.fh.muenster.struts anlegen und anschließend in diesem Package eine Klasse StrutsAction anlegen. Falls src/main/java nicht in Eclipse erscheinen sollte, muss dieser Ordner u.U. manuell per Terminal angelegt werden und die View in Eclipse erneuert werden. Nun folgenden Inhalt in die StrutsAction-Klasse einfügen: public class StrutsAction implements Action { public String execute() throws Exception { System.out.println("execute was called"); return SUCCESS; } } Nun folgenden Inhalt innerhalb der struts.xml passend (nach dem Aktivieren des Entwicklungsmodus) einfügen: <package name="test" namespace="/Test" extends="struts-default"> <action name="Welcome" class="de.fh.muenster.struts.StrutsAction"> <result name="success">index.jsp</result> </action> </package> Nun im Ordner „webapp“ einen neuen Ordner mit dem Namen „Test“ anlegen und innerhalb dieses Ordners eine „index.jsp“ hinzufügen. Dabei folgenden Inhalt zunächst eintragen: <%@ taglib prefix="s" uri="/struts-tags" %> <html> <body> <h1>Unsere erste Struts-Seite</h1> <ul> <li> <s:url value="http://www.google.de" var="url"> <s:param name="q">Struts 2 Tutorial</s:param> </s:url> <s:a href="%{url}">Google.de</s:a> </li> </ul> </body> </html> Nun sind die ersten Schritte abgeschlossen und das Projekt kann über Maven gebuilded und anschließend auf dem Jetty-Server als war-Archive ausgeführt werden. Anschließend ist die ersten Testseite über die folgende URL aufrufbar: http://localhost:8080/TestProjekt/Test/Welcome.action Dabei ist „TestProjekt“ der Name des Projektes in Eclipse, Test der Name des Struts-Packages und Welcome der Name der Action in Struts. Hierauf aufbauend können nun die weiteren Aufgaben mit Struts bearbeitet werden! Aufgabe 1 Das in den vorherigen Übungen begonnene Projekt soll nun in Struts umgesetzt werden. Dazu soll auf die Verwendung von Servlets vollständig verzichtet werden. Das Handling der Requests soll vollständig über Action-Klassen und Ergebnisseiten erfolgen. 1. Benutzen Sie innerhalb der JSPs die Struts Tag Library um Parameter zu übergeben. 2. Innerhalb der jeweiligen Action-Klassen können Sie die GET-Parameter auswerten und dementsprechend die dynamische Webseite verändern. 3. Verwenden Sie innerhalb der Action-Klassen den ValueStack, um die unterschiedlichen Content-Pages innerhalb der JSPs zu verwenden. Aufgabe 2 Aufbauend auf der vorherigen Aufgabe, soll nun die dynamische Webseite durch das Tiles Framework in Kombination mit Struts 2 realisiert werden. Dazu verwenden Sie Apache Tiles für die Aufteilung der Webseite in unterschiedliche Bereiche (z.B.: Header, Body, Menü, Footer) und verwenden diese Teilbereiche passend innerhalb ihrer Views. Es bietet sich hierbei sicherlich an zuerst ein Grundlayout zu definieren, welches anschließend passend von geeigneten TilesDefintionen angepasst werden kann. Um die ersten Schritte mit Apache Tiles zu vereinfachen, machen Sie bitte folgende Änderungen an Ihrem bisherigen Struts-Projekt: • Legen Sie in Ihrem WEB-INF Verzeichnis eine „tiles.xml“-Datei mit folgendem Inhalt an (Achtung, Datei ist so noch nicht korrekt und muss an Ihr Projekt angepasst werden): <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN" "http://tiles.apache.org/dtds/tiles-config_2_0.dtd"> <tiles-definitions> <definition name="baseLayout" template="/baseLayout.jsp"> <put-attribute name="title" value="Template"/> <put-attribute name="body" value="/body.jsp"/> <!-- weitere Attribute je nach Bedarf... --> </definition> <definition name="page1" extends="baseLayout"> <put-attribute name="title" value="Content Page 1"/> <put-attribute name="body" value="/page1.jsp"/> </definition> </tiles-definitions> Bitte fügen Sie innerhalb Ihrer web.xml folgende Zeilen hinzu, welche für die Integration von Tiles innerhalb von Struts notwendig sind: <context-param> <param-name> org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG </param-name> <param-value> /WEB-INF/tiles.xml </param-value> </context-param> <listener> <listener-class> org.apache.struts2.tiles.StrutsTilesListener </listener-class> </listener> In Ihrer struts.xml sollten Sie alle Packages oder sonstige Änderungen rückgängig machen und folgenden Inhalt einfügen: <package name="default" extends="struts-default"> <result-types> <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" /> </result-types> <action name="*" method="{1}" class="de.fh.muenster.hello.MenuAction"> <result name="page1" type="tiles">page1</result> </action> </package> Die einzelnen Bereiche können Sie nun nach den obigen Definitionen in der tiles.xml in Ihren JSPs verwenden. Dazu können Sie beispielsweise den Titel der Seite oder den Body mit folgenden Befehlen in der JSP hinzufügen: <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%> <%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %> <html> <head> <title><tiles:insertAttribute name="title" ignore="true" /></title> </head> <body> <tiles:insertAttribute name="body" /> </body> </html> 1. Bitte bedenken Sie, dass Sie die Aktion-Klasse MenuAction gegebenfalls noch selber anlegen müssen. Überlegen Sie sich den Inhalt dieser Klasse selber. Welche Methoden benötigt diese Klasse und wie lautet der Rückgabewert? 2. Es bietet sich an für die statischen Komponenten jeweils eigene JSP-Seiten anzulegen, welche dann jeweils im Grundlayout festgelegt werden können. 3. Jede einzelne Content-Page der dynamischen Webseite können Sie zunächst als einzelne JSP realisieren. 4. Versuchen Sie auch mit den Rückgabewerten innerhalb Ihrer Action-Klassen von Struts zu varrieren. Was hat dies für Auswirkungen auf den Content innerhalb Ihrer Seite? Machen Sie sich durch ein paar Versuche und Änderungen innerhalb der XMLs mit dem Zusammenspiel von Struts 2 und Tiles vertraut. 5. Versuchen Sie auch mal eine weitere Content-Page zum Projekt hinzuzufügen. Welche Dateien müssen Sie dazu bearbeiten? Wo müssen Sie für diesen Schritt überhaupt noch Java-Code schreiben? Aufgabe 3 (optional) Falls Sie noch genügend Zeit im Praktikum haben oder den Umgang mit Struts noch weiter ausbauen möchten, können Sie auch versuchen eine Login-Seite wie innerhalb unseres Vortrages mittels Struts und Apache Tiles zu realisieren. Dabei sollten Sie folgende Schritte durchführen: 1. Realisieren Sie mittels einer geeigneten JSP ein Formular mit zwei Text-Eingabefeldern für einen Usernamen und einen Passwort. Bitte verwenden Sie die POST-Methode. Versuchen Sie hierbei die eigene Strut-Tag-Library für die Formular-Generierung zu verwenden. 2. Schreiben Sie eine geeignete Aktion-Klasse, die Ihre Formular-Eingaben beinhaltet. Fügen Sie innerhalb der validate-Methode einigen Code hinzu, der überprüft, ob das Formular vollständig abgesendet wurde. 3. Innerhalb der execute-Methode Ihrer Aktion-Klasse können Sie überprüfen, ob der Username und das Passwort korrekt ist. Bauen Sie eine gewisse Logik herein, welche bestimmte User und Passwörter akzeptiert und auf eine Willkommens-Seite weiterleitet. 4. Falls ein falscher Login durchgeführt wurde, soll eine verständliche Fehlermeldung angezeigt werden. Wie kann dies mit Struts realisiert werden?