Serwlety - odpowiedź HTTP serwera
Jak omówiono w poprzednim rozdziale, gdy serwer WWW odpowiada na żądanie HTTP, odpowiedź zazwyczaj składa się z wiersza stanu, niektórych nagłówków odpowiedzi, pustej linii i dokumentu. Typowa odpowiedź wygląda następująco:
HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
   (Blank Line)
<!doctype ...>
<html>
   <head>...</head>
   <body>
      ...
   </body>
</html>Wiersz statusu składa się z wersji HTTP (w przykładzie HTTP / 1.1), kodu statusu (w przykładzie 200) i bardzo krótkiej wiadomości odpowiadającej kodowi statusu (w przykładzie OK).
Poniżej znajduje się podsumowanie najbardziej przydatnych nagłówków odpowiedzi HTTP 1.1, które wracają do przeglądarki po stronie serwera WWW i których często używasz w programowaniu stron internetowych -
| Sr.No. | Nagłówek i opis | 
|---|---|
| 1 | Allow Ten nagłówek określa metody żądania (GET, POST itp.), Które obsługuje serwer. | 
| 2 | Cache-Control Ten nagłówek określa okoliczności, w których dokument odpowiedzi może być bezpiecznie buforowany. Może mieć wartościpublic, private lub no-cache itd. Publiczny oznacza, że dokument można przechowywać w pamięci podręcznej, Prywatny oznacza, że dokument jest przeznaczony dla jednego użytkownika i może być przechowywany tylko w prywatnych (nieudostępnianych) pamięciach podręcznych, a nocache oznacza, że dokument nigdy nie powinien być buforowany. | 
| 3 | Connection Ten nagłówek instruuje przeglądarkę, czy ma używać trwałych połączeń HTTP, czy nie. Wartośćclose instruuje przeglądarkę, aby nie używała trwałych połączeń HTTP i keepalive oznacza używanie trwałych połączeń. | 
| 4 | Content-Disposition Ten nagłówek pozwala zażądać, aby przeglądarka poprosiła użytkownika o zapisanie odpowiedzi na dysk w pliku o podanej nazwie. | 
| 5 | Content-Encoding Ten nagłówek określa sposób, w jaki strona została zakodowana podczas transmisji. | 
| 6 | Content-Language Ten nagłówek oznacza język, w którym napisany jest dokument. Na przykład en, en-us, ru itp | 
| 7 | Content-Length Ten nagłówek wskazuje liczbę bajtów w odpowiedzi. Te informacje są potrzebne tylko wtedy, gdy przeglądarka korzysta ze stałego (podtrzymującego) połączenia HTTP. | 
| 8 | Content-Type Ten nagłówek podaje typ MIME (Multipurpose Internet Mail Extension) dokumentu odpowiedzi. | 
| 9 | Expires Ten nagłówek określa czas, w którym zawartość powinna być uważana za nieaktualną, a tym samym nie może być buforowana. | 
| 10 | Last-Modified Ten nagłówek wskazuje, kiedy dokument został ostatnio zmieniony. Klient może następnie buforować dokument i podać datę za pomocą plikuIf-Modified-Since nagłówek żądania w późniejszych żądaniach. | 
| 11 | Location Ten nagłówek powinien być dołączony do wszystkich odpowiedzi, które mają kod stanu z 300. Powoduje to powiadomienie przeglądarki o adresie dokumentu. Przeglądarka automatycznie łączy się ponownie z tą lokalizacją i pobiera nowy dokument. | 
| 12 | Refresh Ten nagłówek określa, jak szybko przeglądarka powinna poprosić o zaktualizowaną stronę. Możesz określić czas w sekundach, po którym strona zostanie odświeżona. | 
| 13 | Retry-After Ten nagłówek może być używany w połączeniu z odpowiedzią 503 (Usługa niedostępna), aby poinformować klienta, jak szybko może powtórzyć swoje żądanie. | 
| 14 | Set-Cookie Ten nagłówek określa plik cookie powiązany ze stroną. | 
Metody ustawiania nagłówka odpowiedzi HTTP
Istnieją następujące metody, których można użyć do ustawienia nagłówka odpowiedzi HTTP w programie serwletu. Te metody są dostępne z obiektem HttpServletResponse .
| Sr.No. | Metoda i opis | 
|---|---|
| 1 | String encodeRedirectURL(String url) Koduje określony adres URL do użycia w metodzie sendRedirect lub, jeśli kodowanie nie jest potrzebne, zwraca adres URL bez zmian. | 
| 2 | String encodeURL(String url) Koduje określony adres URL, dołączając do niego identyfikator sesji lub, jeśli kodowanie nie jest potrzebne, zwraca adres URL w niezmienionej postaci. | 
| 3 | boolean containsHeader(String name) Zwraca wartość logiczną wskazującą, czy nazwany nagłówek odpowiedzi został już ustawiony. | 
| 4 | boolean isCommitted() Zwraca wartość logiczną wskazującą, czy odpowiedź została zatwierdzona. | 
| 5 | void addCookie(Cookie cookie) Dodaje określony plik cookie do odpowiedzi. | 
| 6 | void addDateHeader(String name, long date) Dodaje nagłówek odpowiedzi z podaną nazwą i wartością daty. | 
| 7 | void addHeader(String name, String value) Dodaje nagłówek odpowiedzi z podaną nazwą i wartością. | 
| 8 | void addIntHeader(String name, int value) Dodaje nagłówek odpowiedzi z podaną nazwą i wartością całkowitą. | 
| 9 | void flushBuffer() Wymusza zapisanie dowolnej zawartości w buforze do klienta. | 
| 10 | void reset() Czyści wszystkie dane, które istnieją w buforze, a także kod stanu i nagłówki. | 
| 11 | void resetBuffer() Czyści zawartość bazowego buforu w odpowiedzi bez czyszczenia nagłówków lub kodu stanu. | 
| 12 | void sendError(int sc) Wysyła do klienta odpowiedź o błędzie przy użyciu określonego kodu stanu i czyszcząc bufor. | 
| 13 | void sendError(int sc, String msg) Wysyła odpowiedź o błędzie do klienta przy użyciu określonego stanu. | 
| 14 | void sendRedirect(String location) Wysyła tymczasową odpowiedź przekierowania do klienta przy użyciu określonego adresu URL lokalizacji przekierowania. | 
| 15 | void setBufferSize(int size) Ustawia preferowany rozmiar buforu dla treści odpowiedzi. | 
| 16 | void setCharacterEncoding(String charset) Ustawia kodowanie znaków (zestaw znaków MIME) odpowiedzi wysyłanej do klienta, na przykład na UTF-8. | 
| 17 | void setContentLength(int len) Ustawia długość treści treści w odpowiedzi W serwletach HTTP ta metoda ustawia nagłówek HTTP Content-Length. | 
| 18 | void setContentType(String type) Ustawia typ treści odpowiedzi wysyłanej do klienta, jeśli odpowiedź nie została jeszcze zatwierdzona. | 
| 19 | void setDateHeader(String name, long date) Ustawia nagłówek odpowiedzi z podaną nazwą i wartością daty. | 
| 20 | void setHeader(String name, String value) Ustawia nagłówek odpowiedzi z podaną nazwą i wartością. | 
| 21 | void setIntHeader(String name, int value) Ustawia nagłówek odpowiedzi z podaną nazwą i wartością całkowitą | 
| 22 | void setLocale(Locale loc) Ustawia ustawienia regionalne odpowiedzi, jeśli odpowiedź nie została jeszcze zatwierdzona. | 
| 23 | void setStatus(int sc) Ustawia kod stanu dla tej odpowiedzi | 
Przykład odpowiedzi nagłówka HTTP
Widzieliście już metodę setContentType () działającą w poprzednich przykładach, a poniższy przykład również użyłby tej samej metody, dodatkowo użylibyśmy setIntHeader() metoda do ustawienia Refresh nagłówek.
// 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);
   }
}Teraz wywołanie powyższego serwletu spowoduje wyświetlenie bieżącego czasu systemowego co 5 sekund w następujący sposób. Po prostu uruchom serwlet i poczekaj, aż zobaczysz wynik -
Auto Refresh Header Setting
Current Time is: 9:44:50 PM