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?