Servlet: risposta HTTP del server

Come discusso nel capitolo precedente, quando un server Web risponde a una richiesta HTTP, la risposta consiste tipicamente in una riga di stato, alcune intestazioni di risposta, una riga vuota e il documento. Una risposta tipica è simile a questa:

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

La riga di stato è composta dalla versione HTTP (HTTP / 1.1 nell'esempio), un codice di stato (200 nell'esempio) e un messaggio molto breve corrispondente al codice di stato (OK nell'esempio).

Di seguito è riportato un riepilogo delle intestazioni di risposta HTTP 1.1 più utili che risalgono al browser dal lato server web e che useresti molto frequentemente nella programmazione web -

Sr.No. Intestazione e descrizione
1

Allow

Questa intestazione specifica i metodi di richiesta (GET, POST, ecc.) Supportati dal server.

2

Cache-Control

Questa intestazione specifica le circostanze in cui il documento di risposta può essere memorizzato nella cache in modo sicuro. Può avere valoripublic, private o no-cache ecc. Pubblico significa che il documento è memorizzabile nella cache, Privato significa che il documento è per un singolo utente e può essere archiviato solo in cache private (non condivise) e nocache significa che il documento non deve mai essere memorizzato nella cache.

3

Connection

Questa intestazione indica al browser se utilizzare o meno la persistente nelle connessioni HTTP. Un valore diclose indica al browser di non utilizzare connessioni HTTP persistenti e keepalive significa usare connessioni persistenti.

4

Content-Disposition

Questa intestazione consente di richiedere che il browser chieda all'utente di salvare la risposta su disco in un file con il nome specificato.

5

Content-Encoding

Questa intestazione specifica il modo in cui la pagina è stata codificata durante la trasmissione.

6

Content-Language

Questa intestazione indica la lingua in cui è scritto il documento. Ad esempio en, en-us, ru, ecc

7

Content-Length

Questa intestazione indica il numero di byte nella risposta. Queste informazioni sono necessarie solo se il browser utilizza una connessione HTTP persistente (keep-alive).

8

Content-Type

Questa intestazione fornisce il tipo MIME (Multipurpose Internet Mail Extension) del documento di risposta.

9

Expires

Questa intestazione specifica l'ora in cui il contenuto deve essere considerato non aggiornato e quindi non deve più essere memorizzato nella cache.

10

Last-Modified

Questa intestazione indica quando il documento è stato modificato l'ultima volta. Il client può quindi memorizzare il documento nella cache e fornire una data tramite un fileIf-Modified-Since richiesta di intestazione nelle richieste successive.

11

Location

Questa intestazione dovrebbe essere inclusa in tutte le risposte che hanno un codice di stato nei 300. Questo notifica al browser l'indirizzo del documento. Il browser si riconnette automaticamente a questa posizione e recupera il nuovo documento.

12

Refresh

Questa intestazione specifica quanto presto il browser dovrebbe richiedere una pagina aggiornata. È possibile specificare il tempo in numero di secondi dopo il quale una pagina verrà aggiornata.

13

Retry-After

Questa intestazione può essere utilizzata insieme a una risposta 503 (Servizio non disponibile) per indicare al client quanto tempo può ripetere la sua richiesta.

14

Set-Cookie

Questa intestazione specifica un cookie associato alla pagina.

Metodi per impostare l'intestazione della risposta HTTP

Esistono i seguenti metodi che possono essere utilizzati per impostare l'intestazione della risposta HTTP nel programma servlet. Questi metodi sono disponibili con l' oggetto HttpServletResponse .

Sr.No. Metodo e descrizione
1

String encodeRedirectURL(String url)

Codifica l'URL specificato per l'uso nel metodo sendRedirect o, se la codifica non è necessaria, restituisce l'URL invariato.

2

String encodeURL(String url)

Codifica l'URL specificato includendovi l'ID di sessione o, se la codifica non è necessaria, restituisce l'URL invariato.

3

boolean containsHeader(String name)

Restituisce un valore booleano che indica se l'intestazione della risposta denominata è già stata impostata.

4

boolean isCommitted()

Restituisce un valore booleano che indica se la risposta è stata confermata.

5

void addCookie(Cookie cookie)

Aggiunge il cookie specificato alla risposta.

6

void addDateHeader(String name, long date)

Aggiunge un'intestazione di risposta con il nome e il valore della data forniti.

7

void addHeader(String name, String value)

Aggiunge un'intestazione di risposta con il nome e il valore forniti.

8

void addIntHeader(String name, int value)

Aggiunge un'intestazione di risposta con il nome specificato e il valore intero.

9

void flushBuffer()

Forza la scrittura sul client di qualsiasi contenuto nel buffer.

10

void reset()

Cancella tutti i dati presenti nel buffer, nonché il codice di stato e le intestazioni.

11

void resetBuffer()

Cancella il contenuto del buffer sottostante nella risposta senza cancellare le intestazioni o il codice di stato.

12

void sendError(int sc)

Invia una risposta di errore al client utilizzando il codice di stato specificato e cancellando il buffer.

13

void sendError(int sc, String msg)

Invia una risposta di errore al client utilizzando lo stato specificato.

14

void sendRedirect(String location)

Invia una risposta di reindirizzamento temporaneo al client utilizzando l'URL del percorso di reindirizzamento specificato.

15

void setBufferSize(int size)

Imposta la dimensione del buffer preferita per il corpo della risposta.

16

void setCharacterEncoding(String charset)

Imposta la codifica dei caratteri (set di caratteri MIME) della risposta inviata al client, ad esempio, su UTF-8.

17

void setContentLength(int len)

Imposta la lunghezza del corpo del contenuto nella risposta Nei servlet HTTP, questo metodo imposta l'intestazione HTTP Content-Length.

18

void setContentType(String type)

Imposta il tipo di contenuto della risposta inviata al client, se la risposta non è stata ancora confermata.

19

void setDateHeader(String name, long date)

Imposta un'intestazione di risposta con il nome e il valore della data specificati.

20

void setHeader(String name, String value)

Imposta un'intestazione di risposta con il nome e il valore forniti.

21

void setIntHeader(String name, int value)

Imposta un'intestazione di risposta con il nome specificato e il valore intero

22

void setLocale(Locale loc)

Imposta la locale della risposta, se la risposta non è stata ancora confermata.

23

void setStatus(int sc)

Imposta il codice di stato per questa risposta

Esempio di risposta dell'intestazione HTTP

Hai già visto il metodo setContentType () funzionare negli esempi precedenti e anche il seguente esempio userebbe lo stesso metodo, inoltre useremmo setIntHeader() metodo da impostare Refresh intestazione.

// 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);
   }
}

Ora chiamando il servlet sopra verrà visualizzato l'ora del sistema corrente ogni 5 secondi come segue. Basta eseguire il servlet e attendere di vedere il risultato -

Auto Refresh Header Setting

Current Time is: 9:44:50 PM