Struts: Erste Schritte

+ andere TechDocs
+ Webanwendungen
+ Taglibs
+ Eclipse
+ Apache Struts
+


Struts ist ein sehr flexibles und leistungsfähiges Open-Source-Framework für Thin-Client-Webanwendungen zur Standardisierung der Verarbeitung von Requests.

Clientseitig werden dabei HTML-Seiten (eventuell ergänzt um CSS und JavaScript) im Webbrowser eingesetzt.
Serverseitig findet Java Verwendung in Form von Servlets, JSP (Java Server Pages) und JavaBeans (eventuell auch EJB und weitere Java-EE-Komponenten).

Vorteile von Struts sind die Vereinfachung und Standardisierung von:
  + Requestverarbeitung
  + Validierung der Benutzereingaben
  + Fehlerbehandlung
  + Internationalisierung und Lokalisierung
  + Trennung der Präsentationsschicht von der Logikschicht
  + Erweiterbarkeit

Im folgenden ersten Teil wird ein einfaches Beispiel mit manueller Validierung vorgestellt (per 'validate()' in 'ActionForm').

Im "zweiten Teil" wird ein Beispiel mit dynamisch erzeugter Daten-JavaBean (DynaBean) und deklarativer Validierung (StrutsValidator) vorgestellt (per 'DynaValidatorForm' und 'validation.xml').



Inhalt

  1. Installation von Struts
  2. Überblick über die Vorgehensweise
  3. Erste Beispielanwendung
    1. web.xml
    2. index.jsp
    3. EingabeFormular.jsp
    4. ErgebnisAnzeige.jsp
    5. MeineDatenFormBean.java
    6. MeineAuswerteAction.java
    7. struts-config.xml
    8. MessageResources.properties
    9. MessageResources_de.properties
    10. Hinweise zum Build und Test
  4. Build-Vorgang mit Ant und 'build.xml'
  5. Beispielanwendung mit DynaBean und deklarativer Validierung
  6. Links auf weiterführende Informationen


Installation von Struts

Verzeichnisse und Dateien der Struts-Applikation
  1. Installieren Sie Java und Tomcat, zum Beispiel wie hier beschrieben.
    Die Environmentvariablen 'JAVA_HOME' und 'CATALINA_HOME' müssen korrekt gesetzt sein.
  2. Downloaden Sie das Struts-Archiv (z.B. 'jakarta-struts-1.2.4.zip' oder 'struts-1.2.8-bin.zip') von http://struts.apache.org.
  3. Kopieren Sie bei gestopptem Tomcat die Datei 'struts-blank.war' aus dem Verzeichnis '<struts-root>/webapps' des entpackten Struts-Archivs in das '<tomcat-root>/webapps'-Verzeichnis und benennen Sie die Datei um in 'mystrutsapp.war'.
  4. Starten Sie Tomcat neu. Unter http://localhost:8080/mystrutsapp erhalten Sie einen kurzen Begrüßungstext. Beenden Sie Tomcat wieder.
  5. Wenn Sie das Ant-Skript 'build.xml' aus dem Verzeichnis '<tomcat-root>/webapps/mystrutsapp/WEB-INF/src' benutzen wollen, lesen Sie im gleichen Verzeichnis die 'README.txt'.
  6. Verwenden Sie entweder das weiter unten erläuterte Ant-Skript 'build.xml' oder richten Sie Ihre Entwicklungsumgebung (z.B. Eclipse) so ein, dass die generierten '.class'-Dateien in Package-Unterverzeichnissen in '<tomcat-root>/webapps/mystrutsapp/WEB-INF/classes' generiert werden.


Überblick über die Vorgehensweise

  1. Installieren Sie Struts wie oben beschrieben.
    Erweitern Sie das dabei angelegte 'mystrutsapp'-Projekt iterativ um die folgenden Schritte.
  2. Passen Sie '<tomcat-root>/webapps/mystrutsapp/index.jsp' an.
  3. Erstellen Sie ihre JSPs in '<tomcat-root>/webapps/mystrutsapp/pages'.
  4. Erzeugen Sie die '<form-bean>'-Datencontainer-.java-Dateien (von 'ActionForm' abgeleitete JavaBeans) in den Package-Unterverzeichnissen in '<tomcat-root>/webapps/mystrutsapp/WEB-INF/src' (wenn Sie nicht deklarativ als 'DynaBean' erzeugt werden).
  5. Erzeugen Sie die '<action>'-.java-Dateien (von 'Action' abgeleitete Java-Klassen) in den Package-Unterverzeichnissen in '<tomcat-root>/webapps/mystrutsapp/WEB-INF/src'.
  6. Compilieren Sie die .java-Dateien. Die resultierenden .class-Dateien entstehen in den Package-Unterverzeichnissen in '<tomcat-root>/webapps/mystrutsapp/WEB-INF/classes'.
  7. Passen Sie '<tomcat-root>/webapps/mystrutsapp/WEB-INF/struts-config.xml' an (siehe struts-config User Guide).
  8. Bearbeiten Sie die Ressourcen in '<tomcat-root>/webapps/mystrutsapp/WEB-INF/src/resources' (werden beim Build kopiert nach: '.../WEB-INF/classes/resources').
  9. Zum Deployen fassen Sie alle Dateien in einem WAR-Archiv zusammen, welches dann nur noch in das '<tomcat-root>/webapps'-Verzeichnis kopiert zu werden braucht.


Erste Beispielanwendung

  1. Installieren Sie Struts wie oben beschrieben.
    Erweitern Sie das dabei angelegte 'mystrutsapp'-Projekt um die folgenden Schritte.
  2. Ersetzen Sie den Inhalt von 'web.xml' in '<tomcat-root>/webapps/mystrutsapp/WEB-INF' durch:
    <?xml version="1.0" encoding="ISO-8859-1"?>
    
    <!DOCTYPE web-app
      PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
      "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
    
    <web-app>
    
      <display-name>My Struts Application</display-name>
    
      <!-- Standard Action Servlet Configuration (with debugging) -->
      <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        <init-param>
          <param-name>config</param-name>
          <param-value>/WEB-INF/struts-config.xml</param-value>
        </init-param>
        <init-param>
          <param-name>debug</param-name>
          <param-value>2</param-value>
        </init-param>
        <init-param>
          <param-name>detail</param-name>
          <param-value>2</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
      </servlet>
    
      <!-- Standard Action Servlet Mapping -->
      <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
      </servlet-mapping>
    
      <!-- The Usual Welcome File List -->
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    
    </web-app>
    
  3. Ersetzen Sie den Inhalt von 'index.jsp' in '<tomcat-root>/webapps/mystrutsapp' durch:
    <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
    <logic:redirect forward="startForwardName" />
    
  4. Löschen Sie alle Dateien im Verzeichnis '<tomcat-root>/webapps/mystrutsapp/pages' und erstellen Sie in diesem Verzeichnis folgende Eingabeformular-JSP-Seite 'EingabeFormular.jsp':
    <%@ taglib uri="/WEB-INF/struts-bean.tld"  prefix="bean"  %>
    <%@ taglib uri="/WEB-INF/struts-html.tld"  prefix="html"  %>
    <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
    
    <html:html locale="true">
    <head>
      <title><bean:message key="welcome.title" /></title>
      <html:base />
    </head>
    <body bgcolor="white">
    
    <logic:notPresent name="org.apache.struts.action.MESSAGE" scope="application">
      <font color="red">ERROR: Application resources not loaded</font>
    </logic:notPresent>
    
    <h3><bean:message key="welcome.heading" /></h3>
    <p> <bean:message key="welcome.message" /></p>
    
    <html:form action="/htmlFormActionPath" focus="username">
    <p> <bean:message key="welcome.Name" />:
        <html:text property="username" size="40" maxlength="40" /><br/>
        <font color=red><html:errors property="username" /></font></p>
    <p> <bean:message key="welcome.Password" />:
        <html:text property="password" size="40" maxlength="40" /><br/>
        <font color=red><html:errors property="password" /></font></p>
    <p> <html:submit property="action" value="Weiter" />
        <html:submit property="action" value="Abbrechen" /></p>
    </html:form>
    
    </body>
    </html:html>
    
  5. Erstellen Sie folgende Ergebnisanzeige-JSP-Seite 'ErgebnisAnzeige.jsp' in '<tomcat-root>/webapps/mystrutsapp/pages':
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
    
    <html:html>
    <head>
      <title>Ergebnisanzeige</title>
    </head>
    <body>
    
    <h1>Eingegebene Daten</h1>
    <p> Name:
        <b><bean:write property="username"
                       name="MeinDatenFormBeanName" /></b></p>
    <p> Passwort:
        <b><bean:write property="password"
                       name="MeinDatenFormBeanName" /></b></p>
    
    </body>
    </html:html>
    
  6. Löschen Sie im Verzeichnis '<tomcat-root>/webapps/mystrutsapp/WEB-INF/src' alle Unterverzeichnisse und erstellen Sie darin das neue Unterverzeichnis 'meinpackage'. Erstellen Sie in diesem neuen Verzeichnis die folgende '<form-bean>'-Datencontainer-.java-Datei (von 'ActionForm' abgeleitete JavaBean) 'MeineDatenFormBean.java':
    package meinpackage;
    
    import javax.servlet.http.*;
    import org.apache.struts.action.*;
    
    public final class MeineDatenFormBean extends ActionForm
    {
      private String username = null;
      private String password = null;
      private String action   = null;
    
      public String getUsername() { return this.username; }
      public String getPassword() { return this.password; }
      public String getAction()   { return this.action;   }
      public void setUsername( String username ) { this.username = username; }
      public void setPassword( String password ) { this.password = password; }
      public void setAction(   String action   ) { this.action   = action;   }
    
      public void reset( ActionMapping mp, HttpServletRequest rq )
      {
        username = null;
        password = null;
        action   = null;
      }
    
      public ActionErrors validate( ActionMapping mp, HttpServletRequest rq )
      {
        ActionErrors errors = null;
        if( !"Weiter".equals( action ) ) {
          username = null;
          password = null;
        } else {
          if( username == null || username.length() < 1 ) {
            if( errors == null )  errors = new ActionErrors();
            errors.add( "username", new ActionError( "error.username.required" ) );
          }
          if( password == null || password.length() < 1 ) {
            if( errors == null )  errors = new ActionErrors();
            errors.add( "password", new ActionError( "error.password.required" ) );
          }
        }
        return errors;
      }
    
    }
    
  7. Erstellen Sie folgende '<action>'-.java-Datei (von 'Action' abgeleitete Java-Klasse) 'MeineAuswerteAction.java' in '<tomcat-root>/webapps/mystrutsapp/WEB-INF/src/meinpackage':
    package meinpackage;
    
    import javax.servlet.http.*;
    import org.apache.struts.action.*;
    
    public final class MeineAuswerteAction extends Action
    {
      public ActionForward execute( ActionMapping       mp,
                                    ActionForm          fm,
                                    HttpServletRequest  rq,
                                    HttpServletResponse rp )
      {
        MeineDatenFormBean dfb = (MeineDatenFormBean)fm;
        String sAction = dfb.getAction();
        return mp.findForward( sAction );
      }
    }
    
  8. Ersetzen Sie den Inhalt von 'struts-config.xml' in '<tomcat-root>/webapps/mystrutsapp/WEB-INF' durch:
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    
    <!DOCTYPE struts-config PUBLIC
      "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
      "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
    
    <struts-config>
    
      <form-beans>
        <form-bean
          name="MeinDatenFormBeanName"
          type="meinpackage.MeineDatenFormBean" />
      </form-beans>
    
      <global-forwards>
        <forward name="startForwardName" path="/StartActionPath.do" />
      </global-forwards>
    
      <action-mappings>
        <action
          path="/StartActionPath"
          forward="/pages/EingabeFormular.jsp" />
        <action
          path="/htmlFormActionPath"
          type="meinpackage.MeineAuswerteAction"
          name="MeinDatenFormBeanName"
          scope="request"
          input="/pages/EingabeFormular.jsp">
            <forward name="Weiter"    path="/ErgebnisanzeigeActionPath.do" />
            <forward name="Abbrechen" path="/StartActionPath.do" />
        </action>
        <action
          path="/ErgebnisanzeigeActionPath"
          forward="/pages/ErgebnisAnzeige.jsp" />
      </action-mappings>
    
      <message-resources parameter="resources.MessageResources" />
    
    </struts-config>
    
  9. Erstellen Sie im Verzeichnis '<tomcat-root>/webapps/mystrutsapp/WEB-INF/src' das Unterverzeichnis 'resources' und darin folgende englischsprachige Ressourcen-Datei 'MessageResources.properties':
    # -- standard errors --
    errors.header=<UL>
    errors.prefix=<LI>
    errors.suffix=</LI>
    errors.footer=</UL>
    # -- validator --
    errors.invalid={0} is invalid.
    errors.maxlength={0} can not be greater than {1} characters.
    errors.minlength={0} can not be less than {1} characters.
    errors.range={0} is not in the range {1} through {2}.
    errors.required={0} is required.
    errors.byte={0} must be an byte.
    errors.date={0} is not a date.
    errors.double={0} must be an double.
    errors.float={0} must be an float.
    errors.integer={0} must be an integer.
    errors.long={0} must be an long.
    errors.short={0} must be an short.
    errors.creditcard={0} is not a valid credit card number.
    errors.email={0} is an invalid e-mail address.
    # -- other --
    errors.cancel=Operation cancelled.
    errors.detail={0}
    errors.general=The process did not complete. Details should follow.
    errors.token=Request could not be completed. Operation is not in sequence.
    # -- welcome --
    welcome.title=My Struts Application
    welcome.heading=Welcome!
    welcome.message=First small Struts Application. Reads some information and displays them.
    welcome.Name=Name
    welcome.Password=Password
    error.username.required=Error: Username required!
    error.password.required=Error: Password required!
    
  10. Kopieren Sie im Verzeichnis '<tomcat-root>/webapps/mystrutsapp/WEB-INF/src/resources' die Ressourcen-Datei 'MessageResources.properties' (englischsprachig) nach 'MessageResources_de.properties' (deutschsprachig) und übersetzen Sie darin die Texte rechts von den Gleichheitszeichen, wie es der folgende Ausschnitt für die letzten Zeilen verdeutlicht:
    # -- welcome --
    welcome.title=Meine Struts Applikation
    welcome.heading=Willkommen!
    welcome.message=Erste kleine Struts-Anwendung. Liest Informationen ein und gibt sie wieder.
    welcome.Name=Name
    welcome.Password=Passwort
    error.username.required=Fehler: Benutzername wird benötigt!
    error.password.required=Fehler: Passwort wird benötigt!
    
  11. Führen Sie in Ihrer Entwicklungsumgebung (z.B. Ant-Skript 'build.xml' oder Eclipse) einen kompletten Rebuild durch (siehe dazu auch die Erklärungen weiter unten).
    Kontrollieren Sie folgendes:
    Sind die beiden '.java'-Dateien compiliert worden und die entstandenen '.class'-Dateien 'MeineDatenFormBean.class' und 'MeineAuswerteAction.class' in '<tomcat-root>/webapps/mystrutsapp/WEB-INF/classes/meinpackage' generiert worden?
    Sind die beiden Ressourcen-Dateien 'MessageResources.properties' und 'MessageResources_de.properties' aus '<tomcat-root>/webapps/mystrutsapp/WEB-INF/src/resources' nach '<tomcat-root>/webapps/mystrutsapp/WEB-INF/classes/resources' kopiert worden?
  12. Testen Sie Ihre Anwendung. Starten Sie Tomcat und geben Sie im Webbrowser ein: 'http://localhost:8080/mystrutsapp'.
    Tragen Sie in die Eingabeformularfelder nichts ein und klicken Sie auf den Button 'Weiter': Sie erhalten rote Fehlermeldungen.
    Tragen Sie in die Felder irgendetwas ein und klicken Sie auf 'Weiter': Sie erhalten die Ergebnisanzeige.
    Schalten Sie die Sprache Ihres Webbrowsers um von deutsch nach englisch und umgekehrt (im Microsoft Internet Explorer über: 'Extras' | 'Internetoptionen...' | 'Sprachen...' | 'Hinzufügen...' | 'Nach oben'). Wenn Sie Ihren Webbrowser anschließend neu starten, erhalten Sie die 'mystrutsapp'-Meldungen in der anderen Sprache.
  13. Damit während des laufenden Betriebs von Tomcat Änderungen an Dateien berücksichtigt werden, beachten Sie folgendes:
    Nach Änderungen in .jsp-Dateien genügt ein Reload im Browser (z.B. per 'Strg+R' oder 'F5').
    Änderungen in .java-Dateien können je nach Tomcat-Konfiguration automatisch zur Neucompilierung führen, sonst muss der Webapplikationskontext neu gestartet werden.
    Nach Änderungen in Konfigurations- und Ressourcendateien muss zumindest der Webapplikationskontext neu gestartet werden, entweder über die Tomcat-Manager-GUI http://localhost:8080/manager/html oder direkt über die Kontext-Reload-URL http://localhost:8080/manager/html/reload?path=/mystrutsapp
    (vorher muss Admin/Manager mit <user username="MeinName" password="MeinPasswort" roles="admin,manager"/> in '<tomcat-root>/conf/tomcat-users.xml' eingetragen sein).
    Der Kontext-Reload genügt aber in vielen Fällen nicht. Dann muss Tomcat gestoppt und neu gestartet werden.
    Für einige Änderungen müssen zusätzlich alle Webbrowserfenster geschlossen werden und der Webbrowser neu gestartet werden.
    In hartnäckigen Fällen sollten Sie Tomcat stoppen, das komplette Verzeichnis '<tomcat-root>/work' löschen und Tomcat neu starten.
    Bei Problemen lohnt ein Blick in die Log-Dateien in '<tomcat-root>/logs'.
  14. Zum Deployen fassen Sie die Dateien der Webanwendung in einem WAR-Archiv zusammen, welches dann nur noch in das '<tomcat-root>/webapps'-Verzeichnis kopiert zu werden braucht. Wenn Sie dazu das Ant-Skript 'build.xml' (ohne Parameter oder mit Parameter 'dist') verwenden, beachten Sie, dass die '.war'-Datei defaultmäßig im Verzeichnis '/projects/lib' generiert wird.


Build-Vorgang mit Ant und 'build.xml'

  1. Erstellen Sie folgende Build-Datei 'build.xml' in Ihrem '<mein-web-kontext>/WEB-INF/src'-Verzeichnis (z.B. '<tomcat-root>/webapps/mystrutsapp/WEB-INF/src'):
    <project name="blank" basedir="../" default="all">
    
      <!-- Local system paths -->
      <property name="servlet.jar"   value="/Tools/Tomcat/common/lib/servlet-api.jar" />
      <property name="jdbc20ext.jar" value="/Tools/Tomcat/common/lib/jdbc2_0-stdext.jar" />
           <!-- NOTE: If "dist" target is used, a local
                "projects/lib" directory will be utilized or created -->
      <property name="distpath.project" value="/projects/lib" />
    
      <!-- Project settings -->
      <property name="project.title"    value="Meine Struts Applikation " />
      <property name="project.distname" value="mystrutsapp" />
    
      <!-- Path settings -->
      <property name="doc.path" value="./doc/api" />
      <property name="doc.src"  value="./src" />
    
      <!-- classpath -->
      <path id="compile.classpath">
        <pathelement path="${servlet.jar}" />
        <pathelement path="lib/commons-beanutils.jar" />
        <pathelement path="lib/commons-digester.jar" />
        <pathelement path="lib/struts.jar" />
        <pathelement path="classes" />
        <pathelement path="${classpath}" />
      </path>
    
      <!-- Check timestamp on files -->
      <target name="prepare">
          <tstamp/>
      </target>
    
      <!-- Copy any resource or configuration files -->
      <target name="resources">
        <copy todir="classes" includeEmptyDirs="no">
          <fileset dir="src">
            <patternset>
              <include name="**/*.conf" />
              <include name="**/*.properties" />
              <include name="**/*.xml" />
              <exclude name="build.xml" />
            </patternset>
          </fileset>
        </copy>
      </target>
    
      <!-- Normal build of application -->
      <target name="compile" depends="prepare,resources">
        <javac srcdir="src" destdir="classes">
          <classpath refid="compile.classpath" />
        </javac>
      </target>
    
      <!-- Remove classes directory for clean build -->
      <target name="clean" description="Prepare for clean build">
        <delete dir="classes" />
        <mkdir  dir="classes" />
      </target>
    
      <!-- Build Javadoc documentation -->
      <target name="javadoc" description="Generate JavaDoc API docs">
        <delete dir="./doc/api" />
        <mkdir  dir="./doc/api" />
        <javadoc
          sourcepath="./src"
          destdir="./doc/api"
          classpath="${servlet.jar}:${jdbc20ext.jar}"
          packagenames="*"
          author="true"
          private="true"
          version="true"
          windowtitle="${project.title} API Documentation"
          doctitle="&lt;h1&gt;${project.title} Documentation (Version ${project.version})&lt;/h1&gt;"
          bottom="Copyright &#169; 2005">
          <classpath refid="compile.classpath" />
        </javadoc>
      </target>
    
      <!-- Build entire project -->
      <target name="project" depends="clean,prepare,compile,javadoc" />
    
      <!-- Create binary distribution -->
      <target name="dist" description="Create binary distribution">
        <mkdir dir="${distpath.project}" />
        <jar   jarfile="${distpath.project}/${project.distname}.jar"
               basedir="./classes" />
        <copy  file="${distpath.project}/${project.distname}.jar"
               todir="${distpath.project}" />
        <war   basedir="../"
               warfile="${distpath.project}/${project.distname}.war"
               webxml="web.xml">
               <exclude name="${distpath.project}/${project.distname}.war" />
        </war>
      </target>
    
      <!-- Build project and create distribution-->
      <target name="all" depends="project,dist" />
    
    </project>
    
  2. Passen Sie in den ersten 13 Zeilen die Pfadangaben entsprechend Ihrer Tomcat-Installation an.
    Je nach Tomcat-Installation müssen die Pfade '/Tools/Tomcat/common/lib/...' geändert werden.
    Je nach Tomcat-Version müssen Sie vielleicht auch den Dateinamen der Tomcat-Servlet-Bibliothek ändern (z.B. 'servlet.jar' oder 'servlet-api.jar').
  3. Downloaden Sie die Ant-Installationsdatei 'apache-ant-1.8.2-bin.zip' (9 MByte) von http://ant.apache.org.
  4. Entzippen Sie die Ant-Installationsdatei in ein temporäres Verzeichnis, kopieren Sie den darin enthaltenen Ordner 'apache-ant-1.8.2' nach D:\Tools und umbenennen Sie ihn in D:\Tools\ant.
  5. Erweitern Sie die Environment-'Systemvariable' 'Path' um ';D:\Tools\ant\bin'
    (unter Windows XP unter 'Start' | rechter Mausklick auf 'Arbeitsplatz' | 'Eigenschaften' | 'Erweitert' | 'Umgebungsvariablen')
    (unter Linux siehe java-install.htm#InstallationUnterLinux und linux.htm#Umgebungsvariablen).
  6. Öffnen Sie ein Kommandozeilen-Konsolenfenster und verzweigen Sie in das Verzeichnis der 'build.xml'-Datei, also nach: '<tomcat-root>/webapps/mystrutsapp/WEB-INF/src'.
  7. Geben Sie auf der Kommandozeile das Kommando 'ant' ein (ohne die Hochkommata).
    Wenn Sie keinen Parameter angeben, wird automatisch eine vorhandene 'build.xml'-Datei ausgeführt und ein kompletter Rebuild durchgeführt.
  8. 'ant -h' listet die 'ant'-Optionen auf.
    'ant -p' listet die in 'build.xml' enthalten Haupt-Targets auf.
    'ant <targetname>' führt die 'build.xml' für das angegebene Target aus.
    Unter http://ant.apache.org/manual finden Sie das Apache Ant Manual.


Beispielanwendung mit DynaBean und deklarativer Validierung

... siehe zweiter Teil.



Links auf weiterführende Informationen





Weitere Themen: andere TechDocs | JSP | Taglibs | Eclipse | Webanwendungen | Web Services
© 1998-2007 Torsten Horn, Aachen