Java™ Servlet Technologie
zurück weiter
Java™ Servlet Technologie

Anwendungsbeispiel


Das Servlet Info

Zielstellung

Das Servlet Info hat die Aufgabe, die Einzelheiten über einen Hersteller eines Produktes beziehungsweise über den zum Produkt gehörenden Katalog in tabellarischer Form zur Verfügung zu stellen. Die Darstellung erfolgt nach dem Betätigen der entsprechenden Schaltfläche im Produktfenster. Zur Nachvollziehbarkeit können sie hier den Produktkatalog aufrufen, um sich von der Funtionalität zu überzeugen.

Umsetzung

Zur Umsetzung der angesprochenen Funktionalitäten muß zunächst das Servlet Info generiert werden. Hierzu wird wiederum die Klasse HttpServlet erweitert. Die Methoden zur Initialisierung eines Servlets und Beendigung eines Servlets werden hier exakt genauso benutzt, wie es beim Servlet Catalog beschrieben wurde. Deshalb wird an dieser Stelle nicht nochmals darauf eingegangen, sondern sofort mit der Beschreibung der Verarbeitung der Client-Anfrage begonnen.

Da das Servlet sowohl HTML-Seiten mit Herstellerinformation als auch mit Kataloginformationen generiert, muß während der Abarbeitung eine entsprechende Fallunterscheidung bezüglich der Client-Anforderung getroffen werden. Dies geschieht anhand der Auswertung des Formular-Parameters p_infotype des Requests. Den genauen Ablauf kann man dem folgenden Auszug aus dem Quell-Code entnehmen.


    // Verarbeitung der Client-Anfrage
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException
    {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        String result = "";
        String producer_id = "";
        String catalog_id = "";
        String query = "";
        String sourceFile = "";
        String replaceString = "";
        String[] param1 = null;

        // globale Fehlervariable initialisieren
        noError = true;
        // Formular-Parameter abfragen
        String infotype = request.getParameter("p_infotype");
        // wenn Formular-Parameter existiert
        if (infotype != null) {
            // Informationen über den Hersteller
            if (infotype.equals("Hersteller-Info")) {
                // Parameter "p_producer_id" der Produktseite abfragen
                producer_id = request.getParameter("p_producer_id");
                if (producer_id == null) {
                    producer_id = "-1";
                }
                else {
                    if (producer_id.equals("")) producer_id = "-1";
                }
                // Parameterliste zur Datenbankabfrage initialisieren
                String[] param1_1 = {"NAME","STRASSE","NUMMER","PLZ","STADT","BUNDESLAND","LAND","TELEFON","FAX","E_MAIL","INTERNETADRESSE"};
                param1 = param1_1;
                // SQL-Abfrage definieren
                query = "SELECT h.name,a.strasse,a.nummer,a.plz,a.stadt,a.bundesland,a.land,a.telefon,a.fax,a.e_mail,a.internetadresse FROM adresse a, hersteller h WHERE a.hid=h.hid AND h.hid=" + producer_id;
                // vorgefertigte HTML-Datei definieren
                // absolute Pfadangabe muß bei Verwendung angepaßt werden
                sourceFile = "/export/pub/jakarta-tomcat-4.0.3/webapps/adia/servlets/producer.html";
                // Platzhalter definieren
                replaceString = "@producer_info@";
            }
            // Informationen über den Katalog
            else {
                // Parameter "p_catalog_id" der Produktseite abfragen
                catalog_id = request.getParameter("p_catalog_id");
                if (catalog_id == null) {
                    catalog_id = "-1";
                }
                else {
                    if (catalog_id.equals("")) catalog_id = "-1";
                }
                // Parameterliste zur Datenbankabfrage initialisieren
                String[] param1_2 = {"KATALOG_ID","NAME","ANBIETER","VERSION","ERSTELLUNGSDATUM","IMPLEMENTIERUNGSDATUM"};
                param1 = param1_2;
                // SQL-Abfrage definieren
                query = "SELECT * FROM katalog WHERE cid=" + catalog_id;
                // vorgefertigte HTML-Datei definieren
                // absolute Pfadangabe muß bei Verwendung angepaßt werden
                sourceFile = "/export/pub/jakarta-tomcat-4.0.3/webapps/adia/servlets/catalog.html";
                // Platzhalter definieren
                replaceString = "@catalog_info@";
            }
            // Parameterliste zur Tabellenformatierung initialisieren
            String[] param2 = {"","","",""};
            // Daten ermitteln
            try {
                // Abfrage ausführen
                Vector Info = dbcon.OraDBgetResult(query, param1, 0);
                // Formatierung durchführen
                result = pageGen.formatTable(Info, param1.length, param2);
            }
            // Fehlerbehandlung
            catch (SQLException e) {
                noError = false;
                error = e.toString();
            }
        }
        // wenn Formular-Parameter nicht existiert, dannFehlerausgabe
        else {
            noError = false;
            error = "Informationstyp nicht definiert!";
        }

        // Erzeugung und Ausgabe der HTML-Seite
        try {
            // wenn kein Fehler aufgetreten ist
            if (noError) {
                page = pageGen.readPage(sourceFile);
                page = pageGen.replaceParam(page,result,replaceString);
            }
            // Generierung einer Seite mit der Fehlermeldung
            else {
                // absolute Pfadangabe muß bei Verwendung angepaßt werden
                page = pageGen.readPage("/export/pub/jakarta-tomcat-4.0.3/webapps/adia/servlets/error.html");
                page = pageGen.replaceParam(page,error,"@error@");
            }
        }
        // Generierung einer Seite mit der Fehlermeldung
        catch (Exception e) {
            page = e.toString();
        }
        // Ergebnisausgabe an Client
        out.println(page);
    }
    
Die vorgefertigten HTML-Seiten mit den Platzhaltern können hier für die Darstellung der Herstellerinformationen und hier für die Darstellung der Kataloginformationen betrachtet werden.

zurück weiter