Servlets - Server-HTTP-Antwort

Wie im vorherigen Kapitel erläutert, besteht die Antwort, wenn ein Webserver auf eine HTTP-Anforderung antwortet, normalerweise aus einer Statuszeile, einigen Antwortheadern, einer Leerzeile und dem Dokument. Eine typische Antwort sieht so aus -

HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
   (Blank Line)
<!doctype ...>
<html>
   <head>...</head>
   <body>
      ...
   </body>
</html>

Die Statuszeile besteht aus der HTTP-Version (im Beispiel HTTP / 1.1), einem Statuscode (im Beispiel 200) und einer sehr kurzen Nachricht, die dem Statuscode entspricht (im Beispiel OK).

Im Folgenden finden Sie eine Zusammenfassung der nützlichsten HTTP 1.1-Antwortheader, die von der Webserverseite zum Browser zurückkehren und bei der Webprogrammierung sehr häufig verwendet werden.

Sr.Nr. Header & Beschreibung
1

Allow

Dieser Header gibt die Anforderungsmethoden (GET, POST usw.) an, die der Server unterstützt.

2

Cache-Control

Dieser Header gibt die Umstände an, unter denen das Antwortdokument sicher zwischengespeichert werden kann. Es kann Werte habenpublic, private oder no-cache usw. Öffentlich bedeutet, dass das Dokument zwischengespeichert werden kann. Privat bedeutet, dass das Dokument für einen einzelnen Benutzer bestimmt ist und nur in privaten (nicht freigegebenen) Caches gespeichert werden kann. Nocache bedeutet, dass das Dokument niemals zwischengespeichert werden sollte.

3

Connection

Dieser Header weist den Browser an, ob in HTTP-Verbindungen persistent verwendet werden soll oder nicht. Ein Wert vonclose weist den Browser an, keine dauerhaften HTTP-Verbindungen zu verwenden und keepalive bedeutet, dauerhafte Verbindungen zu verwenden.

4

Content-Disposition

In diesem Header können Sie den Benutzer auffordern, die Antwort auf der Festplatte in einer Datei mit dem angegebenen Namen zu speichern.

5

Content-Encoding

Dieser Header gibt an, wie die Seite während der Übertragung codiert wurde.

6

Content-Language

Diese Überschrift gibt die Sprache an, in der das Dokument geschrieben ist. Zum Beispiel en, en-us, ru usw.

7

Content-Length

Dieser Header gibt die Anzahl der Bytes in der Antwort an. Diese Informationen werden nur benötigt, wenn der Browser eine dauerhafte (Keep-Alive-) HTTP-Verbindung verwendet.

8

Content-Type

Dieser Header gibt den MIME-Typ (Multipurpose Internet Mail Extension) des Antwortdokuments an.

9

Expires

Dieser Header gibt den Zeitpunkt an, zu dem der Inhalt als veraltet betrachtet und somit nicht mehr zwischengespeichert werden soll.

10

Last-Modified

Diese Kopfzeile gibt an, wann das Dokument zuletzt geändert wurde. Der Client kann dann das Dokument zwischenspeichern und ein Datum von einem angebenIf-Modified-Since Anforderungsheader in späteren Anforderungen.

11

Location

Dieser Header sollte in allen Antworten enthalten sein, die in den 300er Jahren einen Statuscode haben. Dies benachrichtigt den Browser über die Dokumentadresse. Der Browser stellt automatisch wieder eine Verbindung zu diesem Speicherort her und ruft das neue Dokument ab.

12

Refresh

Dieser Header gibt an, wann der Browser nach einer aktualisierten Seite fragen soll. Sie können die Zeit in Sekunden angeben, nach der eine Seite aktualisiert werden soll.

13

Retry-After

Dieser Header kann in Verbindung mit einer 503-Antwort (Service Unavailable) verwendet werden, um dem Client mitzuteilen, wann er seine Anforderung wiederholen kann.

14

Set-Cookie

Dieser Header gibt ein Cookie an, das der Seite zugeordnet ist.

Methoden zum Festlegen des HTTP-Antwortheaders

Es gibt folgende Methoden, mit denen Sie den HTTP-Antwortheader in Ihrem Servlet-Programm festlegen können. Diese Methoden sind mit dem HttpServletResponse- Objekt verfügbar .

Sr.Nr. Methode & Beschreibung
1

String encodeRedirectURL(String url)

Codiert die angegebene URL zur Verwendung in der sendRedirect-Methode oder gibt die URL unverändert zurück, wenn keine Codierung erforderlich ist.

2

String encodeURL(String url)

Codiert die angegebene URL, indem die Sitzungs-ID darin enthalten ist, oder gibt die URL unverändert zurück, wenn keine Codierung erforderlich ist.

3

boolean containsHeader(String name)

Gibt einen Booleschen Wert zurück, der angibt, ob der benannte Antwortheader bereits festgelegt wurde.

4

boolean isCommitted()

Gibt einen Booleschen Wert zurück, der angibt, ob die Antwort festgeschrieben wurde.

5

void addCookie(Cookie cookie)

Fügt der Antwort das angegebene Cookie hinzu.

6

void addDateHeader(String name, long date)

Fügt einen Antwortheader mit dem angegebenen Namen und Datumswert hinzu.

7

void addHeader(String name, String value)

Fügt einen Antwortheader mit dem angegebenen Namen und Wert hinzu.

8

void addIntHeader(String name, int value)

Fügt einen Antwortheader mit dem angegebenen Namen und dem ganzzahligen Wert hinzu.

9

void flushBuffer()

Erzwingt das Schreiben von Inhalten im Puffer in den Client.

10

void reset()

Löscht alle im Puffer vorhandenen Daten sowie den Statuscode und die Header.

11

void resetBuffer()

Löscht den Inhalt des zugrunde liegenden Puffers in der Antwort, ohne Header oder Statuscode zu löschen.

12

void sendError(int sc)

Sendet eine Fehlerantwort an den Client unter Verwendung des angegebenen Statuscodes und Löschen des Puffers.

13

void sendError(int sc, String msg)

Sendet eine Fehlerantwort mit dem angegebenen Status an den Client.

14

void sendRedirect(String location)

Sendet eine temporäre Umleitungsantwort an den Client unter Verwendung der angegebenen URL für den Umleitungsspeicherort.

15

void setBufferSize(int size)

Legt die bevorzugte Puffergröße für den Hauptteil der Antwort fest.

16

void setCharacterEncoding(String charset)

Legt die Zeichenkodierung (MIME-Zeichensatz) der Antwort fest, die an den Client gesendet wird, z. B. an UTF-8.

17

void setContentLength(int len)

Legt die Länge des Inhaltskörpers in der Antwort fest. In HTTP-Servlets legt diese Methode den HTTP-Header für die Inhaltslänge fest.

18

void setContentType(String type)

Legt den Inhaltstyp der Antwort fest, die an den Client gesendet wird, wenn die Antwort noch nicht festgeschrieben wurde.

19

void setDateHeader(String name, long date)

Legt einen Antwortheader mit dem angegebenen Namen und Datumswert fest.

20

void setHeader(String name, String value)

Legt einen Antwortheader mit dem angegebenen Namen und Wert fest.

21

void setIntHeader(String name, int value)

Legt einen Antwortheader mit dem angegebenen Namen und dem ganzzahligen Wert fest

22

void setLocale(Locale loc)

Legt das Gebietsschema der Antwort fest, wenn die Antwort noch nicht festgeschrieben wurde.

23

void setStatus(int sc)

Legt den Statuscode für diese Antwort fest

Beispiel für eine HTTP-Header-Antwort

Sie haben bereits gesehen, dass die Methode setContentType () in den vorherigen Beispielen funktioniert, und das folgende Beispiel würde dieselbe Methode verwenden, zusätzlich würden wir sie verwenden setIntHeader() Methode zum Einstellen Refresh Header.

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
 
// Extend HttpServlet class
public class Refresh extends HttpServlet {
 
   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
   
      // Set refresh, autoload time as 5 seconds
      response.setIntHeader("Refresh", 5);
 
      // Set response content type
      response.setContentType("text/html");
 
      // Get current time
      Calendar calendar = new GregorianCalendar();
      String am_pm;
      int hour = calendar.get(Calendar.HOUR);
      int minute = calendar.get(Calendar.MINUTE);
      int second = calendar.get(Calendar.SECOND);
         
      if(calendar.get(Calendar.AM_PM) == 0)
         am_pm = "AM";
      else
         am_pm = "PM";
 
      String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
    
      PrintWriter out = response.getWriter();
      String title = "Auto Refresh Header Setting";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";

      out.println(docType +
         "<html>\n" +
         "<head><title>" + title + "</title></head>\n"+
         "<body bgcolor = \"#f0f0f0\">\n" +
         "<h1 align = \"center\">" + title + "</h1>\n" +
         "<p>Current Time is: " + CT + "</p>\n"
      );
   }
   
   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      doGet(request, response);
   }
}

Wenn Sie nun das obige Servlet aufrufen, wird die aktuelle Systemzeit alle 5 Sekunden wie folgt angezeigt. Führen Sie einfach das Servlet aus und warten Sie, bis das Ergebnis angezeigt wird.

Auto Refresh Header Setting

Current Time is: 9:44:50 PM