Homepage-Webhilfe Event-Banner

Anfrage und Antwort

In Servlets werden uns durch die Funktionen doX() und service() Objekte der Interfaces HttpServletRequest und HttpServletResponse bereitgestellt (Übergabe als Methodenparameter). Beide Interfaces enthalten einige Funktionen zum Abrufen und sogar zum Ändern (nur bei dem Interface HttpServletResponse) von Informationen. Dadurch kann z. B. der Inhaltstyp (Header Content-Type) dynamisch gesetzt werden oder eine Umleitung durchgeführt werden. In diesem Thema wollen wir uns mit diesen beiden Interfaces genauer beschäftigen.


Ein Objekt von HttpServletRequest ermöglicht das Abrufen verschiedener Informationen, welche zur HTTP-Anfrage gehören. Der Abruf erfolgt über die sogenannten Zugriffsfunktionen (getX()). Des Weiteren werden einige Funktionen vom Interface ServletRequest geerbt. Dort existieren auch einige solcher Zugriffsfunktionen. Die folgende Tabelle zeigt die verschiedenen Funktionen zum Abrufen von Anfrage-Informationen:

getCharacterEncoding() Gibt die Zeichenkodierung zurück.
getContentLength() Gibt die Länge des Inhalts zurück.
getContentType() Gibt den Inhaltstyp zurück.
getHeader() Gibt den Wert des angegebenen Header-Felds zurück.
getMethod() Gibt die HTTP-Methode zurück.
getLocalAddr() Gibt die IP-Adresse des lokalen Geräts zurück.
getLocalName() Gibt den Hostnamen des lokalen Geräts zurück.
getLocalPort() Gibt den Port des lokalen Geräts zurück.
getProtocol() Gibt das angefragte Protokoll zurück.
getQueryString() Gibt die Anfrage-Zeichenkette zurück.
getRemoteAddr() Gibt die IP-Adresse des entfernten Geräts zurück.
getRemoteHost() Gibt den Hostnamen des entfernten Geräts zurück.
getRemotePort() Gibt den Port des entfernten Geräts zurück.
getRequestURI() Gibt die angefragte URI zurück.
getServerName() Gibt den Hostnamen des Servers zurück.
getServerPort() Gibt den Port des Servers zurück.

Hier nun ein Beispiel, in welchem einige Informationen abgerufen und ausgegeben werden:

package de.hwh.bsp.anfrageinfo;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class RequestServlet extends HttpServlet
{
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
    {
        // Ausgabe als Text-Datei
        response.setContentType("text/plain;charset=UTF-8");
        
        // Ausgabe durchführen
        PrintWriter out = response.getWriter();
        out.println("lokale IP-Adresse: " + request.getLocalAddr());
        out.println("lokaler Hostname:  " + request.getLocalName());
        out.println("lokaler Port:      " + request.getLocalPort());
        out.println("HTTP-Methode:      " + request.getMethod());
        out.println("Protokoll:         " + request.getProtocol());
        out.println("Query String:      " + request.getQueryString());
        out.println("IP-Adresse:        " + request.getRemoteAddr());
        out.println("Hostname:          " + request.getRemoteHost());
        out.println("Port:              " + request.getRemotePort());
        out.println("URI:               " + request.getRequestURI());
        out.println("Servername:        " + request.getServerName());
        out.println("Serverport:        " + request.getServerPort());
        out.close();
    }
}
VorschauDownload

Übrigens: Die meisten Funktionen geben null zurück, wenn die angefragte Information (bzw. das angefragte Header-Feld) nicht vorhanden ist.


Bei den Antwort-Informationen (Interface HttpServletResponse) gibt es unterschiedliche Zugriffsfunktionen, wovon die eine Gruppe die Informationen abrufen (getX()) und die andere Gruppe die Informationen ändern bzw. setzen (setX()). Dies kommt daher, da eine HTTP-Antwort beeinflusst werden kann, wovon die HTTP-Anfrage vom Client kommt und nicht verändert werden kann. Auch hier haben wir eine Tabelle mit den unterschiedlichen Funktionen zum Abrufen und Setzen von Informationen zusammengestellt:

getCharacterEncoding() Gibt die Zeichenkodierung zurück bzw. setzt diese.
setCharacterEncoding()
setContentLength() Setzt die Länge des Inhalts.
getContentType() Gibt den Inhaltstyp zurück bzw. setzt diesen.
setContentType()
getHeader() Gibt den Wert des angegebenen Header-Felds zurück bzw. setzt diesen.
setHeader()
getStatus() Gibt den Statuscode zurück bzw. setzt diesen.
setStatus()
getWriter() Gibt den Stream für das Senden des Antwort-Inhalts zurück.
sendError() Sendet eine Fehlermeldung (HTTP-Fehler) an den Client zurück.
sendRedirect() Sendet eine Umleitung an den Client zurück.

In diesem und in den 2 vorherigen Beispielen haben wir ja bereits die Funktion setContentType() zum Setzen des „Inhaltstyps“ und getWriter() zum Abruf des ausgehenden Streams benutzt. Diese Funktionen werden wir auch in diesem und in den folgenden Beispielen verwenden. Zusätzlich rufen wir in diesem Beispiel einige Informationen aus der HttpServletResponse ab und geben diese aus:

package de.hwh.bsp.antwortinfo;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ResponseServlet extends HttpServlet
{
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
    {
        // Ausgabe als Text-Datei
        response.setContentType("text/plain;charset=UTF-8");
        
        // Ausgabe durchführen
        PrintWriter out = response.getWriter();
        out.println("Zeichenkodierung:  " + response.getCharacterEncoding());
        out.println("Inhalts-Typ:       " + response.getContentType());
        out.println("Puffer-Größe:      " + response.getBufferSize());
        out.println("HTTP-Status-Code:  " + response.getStatus());
        out.close();
    }
}
VorschauDownload
Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen OK