Das Web-Application-Framework Struts by iyf57920

VIEWS: 0 PAGES: 21

									Das Web-Application-Framework Struts
        von Apache Jakarta

          jakarta.apache.org/struts




                      Von
               Dr. Jürgen Nützel
            Ilmenau, den 11.11.2003
                         Überblick

 Das Apache Jakarta-Projekt
    Tomcat, Servlets und JavaServer Pages (JSP)
 Das Model-View-Controller-Muster (MVC)
    Das MVC 2-Muster
 Das MVC-Framework Struts 1.1
      Die Konfigurationsdateien
      Der Struts-Controller
      Internationalisierung
      Struts Tag-Libraries
      Layout mit Struts-Tiles
      Der Struts Validator
      Test von Struts Anwendungen
 MVC mit Web-Services

11.11.2003                     Dr. Jürgen Nützel, Juergen.Nuetzel@TU-Ilmenau.de   2
         Apache Software Foundation

HTTP Server Project
    Entwicklung des Apache Web-Servers:
     „a patchy version of the NCSA HTTPd“
Apache XML Project
    Axis (Apache eXtensible Interaction System): Nachfolge-
     Projekt der SOAP-Implementierung, die aus dem IBM
     Projekt SOAP4J hervorging. Web-Sevices.
    Cocoon: XML- und XSLT-basiertes Publishing Framework
Apache Jakarta Project
    Entwicklung Server-seitiger Lösungen für die Java-
     Plattform


11.11.2003                   Dr. Jürgen Nützel, Juergen.Nuetzel@TU-Ilmenau.de   3
             Apache Jakarta Projekt

 .
 Der Servlet/JSP Container Tomcat 4.1
    http://jakarta.apache.org/tomcat/
    Implementiert die Servlet 2.3 Spezifikation von Sun:
     http://java.sun.com/products/servlet/
    Servlets sind Java-Klassen, die ankommende http-Server-Requests
     verarbeiten und dynamische Ausgaben (in HTML) erzeugen
    Gegenüber Perl-CGI startet bei den Servlets kein kompletter Prozess
     für einen Request
    Implementiert zusätzlich die JavaServer Pages Version 1.2 von Sun:
     http://java.sun.com/products/jsp/
    JSP Quelltexte werden von Jasper in Tomcat automatisch in Java-
     Servlet-Code übersetzt und compiliert.


11.11.2003                      Dr. Jürgen Nützel, Juergen.Nuetzel@TU-Ilmenau.de   4
                Ein einfaches Servlet

 Projekteinbindung in server.xml
 <project-root>/WEB-INF/
    classes/com/tui/demo/SimpleServlet.class
    src/com/tui/demo/SimpleServlet.java
    web.xml       <?xml version="1.0" encoding="UTF-8"?>
                     <!DOCTYPE web-app
                      PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
                      "http://java.sun.com/dtd/web-app_2_3.dtd">

                     <web-app>
                       <servlet>
                         <servlet-name>SimpleServlet</servlet-name>
                         <servlet-class>com.tui.demo.SimpleServlet</servlet-class>
                       </servlet>
                       <servlet-mapping>
                         <servlet-name>SimpleServlet</servlet-name>
                         <url-pattern>/simpleservlet</url-pattern>
                       </servlet-mapping>
                     </web-app>


11.11.2003                           Dr. Jürgen Nützel, Juergen.Nuetzel@TU-Ilmenau.de   5
                   Servlet oder JSP

Beispiele (nicht in den Folien) in Eclipse …
    OpenSource Java Entwicklungstools von IBM
     www.eclipse.org
Ohne Struts:
      Demo2/simpleservlet
      Demo2/simple.jsp
      Demo2/login.html (ruft Demo2/loginservlet)
      Demo2/login.jsp




11.11.2003                     Dr. Jürgen Nützel, Juergen.Nuetzel@TU-Ilmenau.de   6
             Model-View-Controller
 Aus den Blue-Prints von SUN…
                                  Model-Objekt
                                  - stellt das Anwendungsobjekt dar
                                  - enthält die Kernfunktionalität und die Daten
                                  View-Objekt
                                  - stellt die Bildschirmrepräsentation dar
                                  - Objekt erhält die Daten vom Model
                                  Controller-Objekt
                                  - Reaktion und Verarbeitung von Benutzereingaben
                                  - Vermittler zwischen Model und View




11.11.2003            Dr. Jürgen Nützel, Juergen.Nuetzel@TU-Ilmenau.de      7
                    Das MVC 2-Prinzip
 Gegenüber MVC 1 übernehmen
  Servlets den Controller


                                Servlet
              Nutzeraktion
                              (Controller)
                                                               JavaBeans
                             leitet   weiter                    (Model)              Daten
             Systemantwort        JSP           instanziiert
                                 (View)

   Browser                                      Web-Container




 Das Struts Framework setzt das MVC 2-Prinzip um


11.11.2003                                     Dr. Jürgen Nützel, Juergen.Nuetzel@TU-Ilmenau.de   8
             MVC-Framework Struts

Implementiert konsequent das MVC 2-Muster
    Alle Requests werden in Action-Klassen und zugeordneten
     Action-Forms verarbeitet
    JSPs zur Präsentation (View)
Layout mit Struts-Tiles
    Trennung von Inhalt und Layout
Verwendung der Struts Tag-Libraries in JSPs
    HTML Tag-Library
    Bean Tag-Library
    Logic Tag-Library
Struts-Validator

11.11.2003                  Dr. Jürgen Nützel, Juergen.Nuetzel@TU-Ilmenau.de   9
              Struts Konfiguration
Zentrale Konfiguration über struts-config.xml
    <form-beans><form-bean name= “loginForm“ …
    <actions-mappings><action path=“/processActionLogin“…

                                                          DynaActionForm


             <struts-config>

               <form-bean                               processActionLogin
                 ...
               </form-bean>

               <action
                 ...             erzwingt Validierung
                                                          validation.xml
                 ...
               </action>

             </struts-config>




             struts-config.xml

11.11.2003                          Dr. Jürgen Nützel, Juergen.Nuetzel@TU-Ilmenau.de   10
                  Beispiel Action-Klasse
public class LoginAction extends Action {

public ActionForward execute(ActionMapping mapping, ActionForm form,
       HttpServletRequest request, HttpServletResponse response) throws Exception {

String login = "";
String password = "";
ActionForward forward = null;

// get form variables from the DynaValidatorForm
login = (String) ((DynaValidatorForm) form).get("login");
password = (String) ((DynaValidatorForm) form).get("password");

if (login.equalsIgnoreCase("NUETZEL")) {
  if (password.equalsIgnoreCase("12345")) {
    // add the user to the session
    request.getSession().setAttribute("FirstName", "J&uuml;rgen");
    request.getSession().setAttribute("LastName", "N&uuml;tzel");
    forward = mapping.findForward("success");
} else {
    ActionErrors errors = new ActionErrors();
    ActionError loginError = new ActionError("error.password.invalid");
    errors.add(ActionErrors.GLOBAL_ERROR, loginError);
    saveErrors(request, errors);
    forward = mapping.findForward("failure");


  11.11.2003                            Dr. Jürgen Nützel, Juergen.Nuetzel@TU-Ilmenau.de   11
                 Views mit Tiles und JSPs

                                                                      header.jsp

                       <tiles-definitions>

                        <definition
                          ...
  <tiles:insert>          ...
  <tiles:insert>                                                    login_body.jsp
                          ...
  <tiles:insert>          ...
                          ...
                        </definition>

                       </tiles-definitions>
    layout.jsp                                                        footer.jsp


                       tilesDefinitions.xml                           login.jsp




11.11.2003                        Dr. Jürgen Nützel, Juergen.Nuetzel@TU-Ilmenau.de   12
               Struts Tag-Libraries in JSPs

<%@ page language="java" %>
<%@ 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" %>
<%@ taglib uri="/WEB-INF/taglibs-session.tld" prefix="sess" %>
<%@ page import="java.util.*, com.tui.struts.demo.actions.*" %>
<sess:setAttribute name="page">login</sess:setAttribute>

<html:html locale="true">

<html:errors/>

<html:form action="/processAccountLogin.do" method="POST">
<p><bean:message key="label.login"/><br>
   <html:text property="login"/></p>
<p><bean:message key="label.password"/><br>
   <html:password property="password"/></p>
<p><html:submit property="submit"><bean:message key="button.login"/></html:submit></p>
</html:form>

</html:html>




  11.11.2003                            Dr. Jürgen Nützel, Juergen.Nuetzel@TU-Ilmenau.de   13
                      Resourcen

ApplicationResources.properties
    Z.B. label.password = Password:
Internationalisierung über Länderkürzel:
    ApplicationResources_DE.properties
    ApplicationResources_EN.properties
   …
Verwendung in JSP über Struts Tag-libs:
    <bean:message key="label.password"/>




11.11.2003                  Dr. Jürgen Nützel, Juergen.Nuetzel@TU-Ilmenau.de   14
             Weitere Struts Tag-Libs

HTML Tag-Library
    HTML, Forms, Frames, Links …
Bean Tag-Library
    Request-Parameter abfragen …
Logic Tag-Library
    Z.B <logic:iterate> für Wiederholstrukturen
JSTL JSP Standard Tag Library
    Iterationen, Kontrolle, Import via ftp oder http, XML,
     Datenbanken …



11.11.2003                    Dr. Jürgen Nützel, Juergen.Nuetzel@TU-Ilmenau.de   15
                        Struts-Validator

Zuweisung regulärer Ausdrücke in
 validation.xml (Ausschnitt)
<formset>
     <constant>
       <constant-name>login</constant-name>
       <constant-value>^[a-zA-Z]*$</constant-value>
     </constant>

     <form name="loginForm">
        <field
          property="login"
          depends="required,mask">
          <msg name="mask" key="error.invalid.character"/>
          <arg0 key="label.login"/>
          <var>
             <var-name>mask</var-name>
             <var-value>${login}</var-value>
          </var>
        </field>
     </form>
  </formset>


11.11.2003                            Dr. Jürgen Nützel, Juergen.Nuetzel@TU-Ilmenau.de   16
       Test von Struts Anwendungen

StrutsTestCase
    Erweiterung von JUnit
    Automatische Testfälle


     setRequestPathInfo("/processAccountLogin");
     addRequestParameter("login", "nuetzel");
     addRequestParameter("password", "12345");
     actionPerform();
     verifyNoActionErrors();
     verifyForward("success");




11.11.2003                      Dr. Jürgen Nützel, Juergen.Nuetzel@TU-Ilmenau.de   17
             Web-Services und MVC
 Das Modell bedient sich eines Web-Services für
  Persistenz des Modells


                                Servlet
              Nutzeraktion
                              (Controller)
                                                              JavaBeans   SOAP/XML    JavaBeans
                             leitet   weiter                   (Model)                 (Model)
             Systemantwort        JSP          instanziiert
                                 (View)                                                             z.B.
                                                                                                   MySQL
   Browser                                     Web-Container                         Web-Service




 Apache Axis bietet ein Framework für die Web-
  Service Entwicklung in Java

11.11.2003                                   Dr. Jürgen Nützel, Juergen.Nuetzel@TU-Ilmenau.de      18
                    Das WSDL-File

                                    <definitions>

                                         ...
                                         ...

                                    </definitions>




                                  WSDL-Dokument


             WSDL2Java                                         Java2WSDL




                                                     Java-Interface
                   Java-Klassen




11.11.2003                         Dr. Jürgen Nützel, Juergen.Nuetzel@TU-Ilmenau.de   19
                    Z.B. im Potato-System

public PotatoInterface getPotatoInterface(HttpServletRequest request) {
  PotatoInterface pi = null;
  try {
        PotatoWebServiceLocator locator = new PotatoWebServiceLocator();
        pi = (PotatoInterface) locator.getPotato();
        ((PotatoBindingStub) pi).setMaintainSession(true);
        } catch (javax.xml.rpc.ServiceException se) {
          System.out.println("caught ServiceException:" + se);               Erzeugung von
        }                                                                   Stub-Klassen aus
   return pi;
}
                                                                            der WSDL-Datei
                                                                              mit dem Tool
private User login(PotatoInterface pi, String login, String password) {       WSLD2Java
  UserInfo userInfo = null;
  try {
        userInfo = pi.login(login, password);
      } catch (RemoteException re) {
        System.out.println("login: RemoteException caught:" + re.toString());
        return null;
      }
  User su = new User(pi, login, userInfo);
  return su;
}

   11.11.2003                             Dr. Jürgen Nützel, Juergen.Nuetzel@TU-Ilmenau.de     20
                         Vielen Dank


       Mehr Infos bei Google mit der Suchanfrage:
                 „nuetzel web-service“
                          und
                   http://jakarta.apache.org/struts



             Vielen Dank auch an Dirk Behrendt für seine
                            Diplomarbeit




11.11.2003                      Dr. Jürgen Nützel, Juergen.Nuetzel@TU-Ilmenau.de   21

								
To top