Servlet: richiesta HTTP del client

Quando un browser richiede una pagina web, invia molte informazioni al server web che non possono essere lette direttamente perché queste informazioni viaggiano come parte dell'intestazione della richiesta HTTP. Puoi controllare il protocollo HTTP per ulteriori informazioni su questo.

Di seguito sono riportate le importanti informazioni di intestazione che provengono dal lato browser e che useresti molto frequentemente nella programmazione web:

Sr.No. Intestazione e descrizione
1

Accept

Questa intestazione specifica i tipi MIME che il browser o altri client possono gestire. Valori diimage/png o image/jpeg sono le due possibilità più comuni.

2

Accept-Charset

Questa intestazione specifica i set di caratteri che il browser può utilizzare per visualizzare le informazioni. Ad esempio ISO-8859-1.

3

Accept-Encoding

Questa intestazione specifica i tipi di codifiche che il browser sa come gestire. Valori digzip o compress sono le due possibilità più comuni.

4

Accept-Language

Questa intestazione specifica le lingue preferite del client nel caso in cui il servlet possa produrre risultati in più di una lingua. Ad esempio en, en-us, ru, ecc

5

Authorization

Questa intestazione viene utilizzata dai client per identificarsi quando accedono a pagine Web protette da password.

6

Connection

Questa intestazione indica se il client può gestire connessioni HTTP persistenti. Le connessioni persistenti consentono al client o ad un altro browser di recuperare più file con una singola richiesta. Un valore diKeep-Alive significa che devono essere utilizzate connessioni persistenti.

7

Content-Length

Questa intestazione è applicabile solo alle richieste POST e fornisce la dimensione dei dati POST in byte.

8

Cookie

Questa intestazione restituisce i cookie ai server che li hanno precedentemente inviati al browser.

9

Host

Questa intestazione specifica l'host e la porta come indicato nell'URL originale.

10

If-Modified-Since

Questa intestazione indica che il client desidera la pagina solo se è stata modificata dopo la data specificata. Il server invia un codice, 304 che significaNot Modified intestazione se non sono disponibili risultati più recenti.

11

If-Unmodified-Since

Questa intestazione è l'opposto di If-Modified-Since; specifica che l'operazione deve riuscire solo se il documento è più vecchio della data specificata.

12

Referer

Questa intestazione indica l'URL della pagina Web di riferimento. Ad esempio, se ci si trova nella pagina Web 1 e si fa clic su un collegamento alla pagina Web 2, l'URL della pagina Web 1 viene incluso nell'intestazione Referrer quando il browser richiede la pagina Web 2.

13

User-Agent

Questa intestazione identifica il browser o un altro client che effettua la richiesta e può essere utilizzata per restituire contenuto diverso a diversi tipi di browser.

Metodi per leggere l'intestazione HTTP

Esistono i seguenti metodi che possono essere utilizzati per leggere l'intestazione HTTP nel programma servlet. Questi metodi sono disponibili con l' oggetto HttpServletRequest

Sr.No. Metodo e descrizione
1

Cookie[] getCookies()

Restituisce un array contenente tutti gli oggetti Cookie che il client ha inviato con questa richiesta.

2

Enumeration getAttributeNames()

Restituisce un'enumerazione contenente i nomi degli attributi disponibili per questa richiesta.

3

Enumeration getHeaderNames()

Restituisce un'enumerazione di tutti i nomi di intestazione contenuti in questa richiesta.

4

Enumeration getParameterNames()

Restituisce un'enumerazione di oggetti String contenenti i nomi dei parametri contenuti in questa richiesta

5

HttpSession getSession()

Restituisce la sessione corrente associata a questa richiesta o, se la richiesta non ha una sessione, ne crea una.

6

HttpSession getSession(boolean create)

Restituisce la HttpSession corrente associata a questa richiesta o, se non esiste una sessione corrente e il valore di create è true, restituisce una nuova sessione.

7

Locale getLocale()

Restituisce le impostazioni internazionali preferite in cui il client accetterà il contenuto, in base all'intestazione Accept-Language.

8

Object getAttribute(String name)

Restituisce il valore dell'attributo denominato come oggetto o null se non esiste alcun attributo del nome specificato.

9

ServletInputStream getInputStream()

Recupera il corpo della richiesta come dati binari utilizzando un ServletInputStream.

10

String getAuthType()

Restituisce il nome dello schema di autenticazione utilizzato per proteggere il servlet, ad esempio "BASIC" o "SSL" o null se JSP non era protetto.

11

String getCharacterEncoding()

Restituisce il nome della codifica dei caratteri utilizzata nel corpo di questa richiesta.

12

String getContentType()

Restituisce il tipo MIME del corpo della richiesta o null se il tipo non è noto.

13

String getContextPath()

Restituisce la parte dell'URI della richiesta che indica il contesto della richiesta.

14

String getHeader(String name)

Restituisce il valore dell'intestazione della richiesta specificata come String.

15

String getMethod()

Restituisce il nome del metodo HTTP con cui è stata effettuata questa richiesta, ad esempio, GET, POST o PUT.

16

String getParameter(String name)

Restituisce il valore di un parametro di richiesta come String o null se il parametro non esiste.

17

String getPathInfo()

Restituisce eventuali informazioni sul percorso aggiuntive associate all'URL inviato dal client quando ha effettuato questa richiesta

18

String getProtocol()

Restituisce il nome e la versione del protocollo richiesta.

19

String getQueryString()

Restituisce la stringa di query contenuta nell'URL della richiesta dopo il percorso.

20

String getRemoteAddr()

Restituisce l'indirizzo IP (Internet Protocol) del client che ha inviato la richiesta.

21

String getRemoteHost()

Restituisce il nome completo del client che ha inviato la richiesta.

22

String getRemoteUser()

Restituisce il login dell'utente che effettua questa richiesta, se l'utente è stato autenticato, o null se l'utente non è stato autenticato.

23

String getRequestURI()

Restituisce la parte dell'URL di questa richiesta dal nome del protocollo fino alla stringa di query nella prima riga della richiesta HTTP.

24

String getRequestedSessionId()

Restituisce l'ID di sessione specificato dal client.

25

String getServletPath()

Restituisce la parte dell'URL di questa richiesta che chiama il JSP.

26

String[] getParameterValues(String name)

Restituisce un array di oggetti String contenente tutti i valori del parametro di richiesta specificato o null se il parametro non esiste.

27

boolean isSecure()

Restituisce un valore booleano che indica se questa richiesta è stata effettuata utilizzando un canale protetto, come HTTPS.

28

int getContentLength()

Restituisce la lunghezza, in byte, del corpo della richiesta e resa disponibile dal flusso di input, oppure -1 se la lunghezza non è nota.

29

int getIntHeader(String name)

Restituisce il valore dell'intestazione della richiesta specificata come int.

30

int getServerPort()

Restituisce il numero di porta su cui è stata ricevuta questa richiesta.

Esempio di richiesta di intestazione HTTP

Di seguito è riportato l'esempio che utilizza getHeaderNames()metodo di HttpServletRequest per leggere le informazioni sull'intestazione HTTP. Questo metodo restituisce un'enumerazione che contiene le informazioni di intestazione associate alla richiesta HTTP corrente.

Una volta che abbiamo un'enumerazione, possiamo eseguire il ciclo dell'enumerazione nel modo standard, usando il metodo hasMoreElements () per determinare quando fermarsi e usando il metodo nextElement () per ottenere ogni nome di parametro

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
 
// Extend HttpServlet class
public class DisplayHeader extends HttpServlet {
 
   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");
 
      PrintWriter out = response.getWriter();
      String title = "HTTP Header Request Example";
      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" +
         "<table width = \"100%\" border = \"1\" align = \"center\">\n" +
         "<tr bgcolor = \"#949494\">\n" +
         "<th>Header Name</th><th>Header Value(s)</th>\n"+
         "</tr>\n"
      );
 
      Enumeration headerNames = request.getHeaderNames();
    
      while(headerNames.hasMoreElements()) {
         String paramName = (String)headerNames.nextElement();
         out.print("<tr><td>" + paramName + "</td>\n");
         String paramValue = request.getHeader(paramName);
         out.println("<td> " + paramValue + "</td></tr>\n");
      }
      out.println("</table>\n</body></html>");
   }
   
   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

      doGet(request, response);
   }
}

Ora chiamare il servlet sopra genererebbe il seguente risultato:

HTTP Header Request Example

Header Name Header Value(s)
accept */*
accept-language en-us
user-agent Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; MS-RTC LM 8)
accept-encoding gzip, deflate
host localhost:8080
connection Keep-Alive
cache-control no-cache