Hawlitzek GmbH/ Veröffentlichungen/ Servlets in WebSphere/
 

Hawlitzek IT-Consulting GmbH ©Foto Kirsten Literski-Hawlitzek

Servlets in WebSphere

Dieser Artikel ist im JavaMagazin 5/01 erschienen. Vielen Dank an den Software & Support Verlag für die Genehmigung zur Veröffentlichung auf dieser Webseite!

Zeit für Servlets

Entwicklung und Test von Serveranwendungen in VisualAge for Java, Teil 1

In Version 3.5 von IBM Entwicklungsumgebung VisualAge for Java wurde der Wizard zur Erzeugung von Servlets und JSP sowie die integrierte Testumgebung komplett überarbeitet. Der erste Artikel soll Ihnen einen Einblick in die Vorgehensweise bieten und zeigen, was das Werkzeug leistet. Über den Test von Java Server Pages im WebSphere Testenvironment und das Deployment im Application Server berichtet die Fortsetzung in den folgenden Ausgaben.

Die Vorgängerversion von VisualAge beinhaltete den so genannten Servlet Builder, mit der man HTML-Oberflächen wie AWT- oder Swing-Frontends im Visual Composition Editor zusammenklicken konnte. Der Codegenerator erzeugte dann daraus Servlets - auf Basis einer IBM-eigenen Bibliothek. Von diesem Ansatz kehrt sich IBM ab und setzt nun voll auf Standard-Servlets und JSPs. Sie stellen eine Modellklasse (Bean) bereit und erzeugen sich eine Ausgabe-JSP für die anzuzeigenden Felder (View) und ein Servlet (Controller) sowie ein HTML-Formular zum Einlesen der eingegebenen Werte.
Zunächst die Vorgehensweise zur Erstellung eines einfachen Servlets:
Wählen Sie im Kontextmenü „Add/HinzufügenÞServlet“ oder das entsprechende Symbol „S“ in der Toolbar der Workbench. Sie sehen nun die erste Seite des Wizards wie in Abbildung 1.


Abbildung 1: Servlet Wizard

Neben Zielprojekt, Package und Klassenname können Sie hier eine beliebige Superklasse auswählen, die das Interface javax.servlet.Servlet implementiert. Voreingestellt ist javax.servlet.http.HttpServlet, der wohl häufigste Fall. In den erweiterten Optionen können Sie angeben, ob das Servlet auf Basis einer Java Bean entwickelt werden soll. Diesen Fall werden wird uns später noch genauer ansehen. „Single Thread Model“ bedeutet, dass das Servlet das Markierungsinterface javax.servlet.SingleThreadModel implementiert und damit im Server nicht gleichzeitig von mehreren Thread gerufen werden darf. Die Ableitung von PageListServlet bietet einige IBM-propritäre Erweiterungen zur Verwaltung von Weiterleitungen und Fehlerbehandlung.
Auf der zweiten Seite (siehe Abbildung 1) können Sie angeben, für welche Methoden Code erzeugt werden soll, zum Beispiel doGet(), doPost() oder init().

Wie sieht nun der generierte Code aus?
Die doGet()- und doPost()-Methoden rufen jeweils eine generierte Methode namens performTask auf:

/**
* Process incoming requests for information
*
* @param request Object that encapsulates the request to the servlet
* @param response Object that encapsulates the response from the servlet
*/
public void performTask(HttpServletRequest request, HttpServletResponse response)
{
 try
 {
  java.io.PrintWriter out = response.getWriter();
  out.println("<html><head><title>SimpleServlet</title></head>");
  out.println("<body><h1>" + getClass().getName() + "</h1>");
  java.util.Enumeration params = request.getParameterNames();
  while (params.hasMoreElements())
  {
   String param = (String)params.nextElement();
   out.println(param + ": " + request.getParameter(param) +"<br>");
  }
  out.println("</body></html>");
 }
 catch(Throwable theException)
 {
  // uncomment the following line when unexpected exceptions
  // are occuring to aid in debugging the problem.
  theException.printStackTrace();
 }
}

Falls das Servlet Eingabeparameter besitzt, wird noch eine universelle Methode getParameter(request, response, parameterName, checkRequestParameters, checkInitParameters, isParameterRequired, defaultValue) erzeugt, die Argumente aus dem Aufruf, der Servletkonfiguration oder Vorgabewerte extrahiert und ggf. prüft, ob notwendige Parameter bereitgestellt wurden.

Beans nutzen

Richtig interessant wird der Wizard erst, wenn man ihm bereits erstellte Beans übergibt. In unserem Fall haben wir bereits eine kleine Bean zur Umrechnung von Geldbeträgen mit dem Namen EuroCalc geschrieben (siehe Abbildung 2). Sie bezieht einen Geldbetrag und eine Eingangwährung und liefert nach Aufruf von umrechnen() eine Liste von Zielbeträgen. Den Quellcode finden Sie auf der Begleit-CD in diesem Heft.


Abbildung 2: Nutzen von Beans im Servlet Wizard

Nachdem wir nun auf der ersten Seite des Wizards (siehe Abbildung 1) angegeben haben, dass wir eine Bean nutzen wollen, können wir nun die Beanklasse definieren (Abbildung 2) und auswählen, welche Werte wir über ein automatisch generiertes Eingabeformular lesen möchte. Die im unteren Teil des Fenster auflisteten Methoden werden in der performTask()-Methode aufgerufen und die Ausgabefelder schließlich mittels JSP ausgegeben. Die daraus erzeugte Bearbeitungsmethode sieht nun wie folgt aus:

/**
 * Process incoming requests for information
 *
 * @param request Object that encapsulates the request to the servlet
 * @param response Object that encapsulates the response from the servlet
 */
public void performTask(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
{
 javax.servlet.ServletContext sc;
 javax.servlet.RequestDispatcher rd;
 try
 {
  de.hawlitzek.jm.test.EuroCalc euroCalc = null;
  // instantiate the bean.
  euroCalc = (de.hawlitzek.jm.test.EuroCalc)
   java.beans.Beans.instantiate(getClass().getClassLoader(),
   "de.hawlitzek.jm.test.EuroCalc");
  request.setAttribute("euroCalc", euroCalc);

  // Initialize the bean betrag property
  if (!getParameter(request, "betrag", true, true, true, null).equals(""))
  {
   euroCalc.setBetrag((getParameter(request, "betrag", true, true, true, null)));
  }

  // Initialize the bean waehrung property
  if (!getParameter(request, "waehrung", true, true, true, null).equals(""))
  {
   euroCalc.setWaehrung((getParameter(request, "waehrung", true, true,
              true, null)));
  }

  // Invoke umrechnen action on the bean.
  euroCalc.umrechnen();
  sc = getServletContext();
  rd = sc.getRequestDispatcher("/EuroCalcServletResults.jsp");
  rd.forward(request, response);
 }
 catch(Throwable theException)
 {
  // uncomment the following line when unexpected exceptions
  // are occuring to aid in debugging the problem.
  // theException.printStackTrace();
 }
}

Neben dem Servlet im Code-Repository finden Sie nun im angegebenen Ressourcen-Verzeichnis das HTML-Formular EuroCalcInput.html und die Ergebnis-JSP EuroCalcResults.jsp Im nächsten Teil zeigen wir Ihnen , wie man dieses Servlet und die Java Server Page im WebSphere Test Environment ausführt und debugged. In Abbildung 3 sehen Sie aber schon einmal, wie unser generiertes Servlet arbeitet. Die Optik ist zwar noch nicht optimal, aber es funktioniert wie gewünscht.


Abbildung 3: HTML-Formular und Ausgabe-JSP

 

Fortsetzung des Artikels

 

[FH2] Servlets in VisualAge und WebSphere - Teil 2, Florian Hawlitzek, Java Magazin 6/01

 

[FH3] Servlets in VisualAge und WebSphere - Teil 3, Florian Hawlitzek, Java Magazin 7/01

 

© 2006 Hawlitzek IT-Consulting GmbH,
Marketing&Design Kirsten Literski-Hawlitzek

Seitenanfang

Hawlitzek GmbH
Die Gründer
Dienstleistungen
Java Downloads
Vorträge
Veröffentlichungen
Kontakt
International
Sitemap