English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Servlet 客户端 HTTP 请求

Quando il browser richiede una pagina web, invia informazioni specifiche al server web. Queste informazioni non possono essere lette direttamente perché sono trasmesse come parte dell'intestazione della richiesta HTTP. Puoi vedere Protocollo HTTP Per ulteriori informazioni.

Di seguito sono riportate le intestazioni importanti provenienti dal lato client che si utilizzano frequentemente nella programmazione Web:

IntestazioneDescrizione
AcceptQuesta intestazione specifica i tipi MIME che possono essere gestiti dal browser o da altri client. Valore image/png o image/jpeg Sono i due valori più comuni.
Accept-CharsetQuesta intestazione specifica i set di caratteri che il browser può utilizzare per visualizzare le informazioni. Ad esempio, ISO-8859-1.
Accept-EncodingQuesta intestazione specifica il tipo di codifica che il browser sa come gestire. Valore gzip o compress Sono i due valori più comuni.
Accept-LanguageQuesta intestazione specifica la lingua preferita del client, nel caso in cui il Servlet generi risultati in più lingue. Ad esempio, en, en-us, ru, ecc.
AuthorizationQuesta intestazione viene utilizzata per identificare l'identità del client quando il client accede a pagine protette da password.
ConnectionQuesta intestazione indica se il client può gestire una connessione HTTP persistente. La connessione persistente permette al client o ad altri browser di recuperare più file attraverso una singola richiesta. Valore Keep-Alive Significa che è stato utilizzato un connessione persistente.
Content-LengthQuesta intestazione si applica solo alle richieste POST e indica la dimensione dei dati POST (in byte).
CookieQuesta intestazione restituisce ai server i cookie inviati in precedenza al browser.
HostQuesta intestazione specifica l'host e il porto dell'URL originale.
If-Modified-SinceQuesta intestazione indica la pagina desiderata dal client solo se la pagina è stata modificata dopo la data specificata. Se non ci sono nuovi risultati disponibili, il server invierà un codice 304, che indica Non Modificato Intestazione.
If-Unmodified-SinceQuesta intestazione è l'opposto di If-Modified-Since, e specifica che l'operazione avrà successo solo se il documento è anteriore alla data specificata.
RefererQuesta intestazione indica l'URL della pagina Web a cui si riferisce. Ad esempio, se si clicca su un link che conduce alla pagina 2 dalla pagina 1, quando il browser richiede la pagina 2, l'URL della pagina 1 verrà incluso nell'intestazione Referer.
User-AgentQuesta informazione di header identifica il browser o altro client che ha inviato la richiesta e può restituire contenuti diversi per diversi tipi di browser.

Metodi di lettura degli header HTTP

Questi metodi sono disponibili nei programmi Servlet per leggere gli header HTTP. Questi metodi leggono gli header HTTP attraverso HttpServletRequest Oggetto disponibile.

Numero di ordinamentoMetodo & Descrizione
1Cookie[] getCookies()
Restituisce un array che contiene tutti i Cookie inviati dal client per questa richiesta.
2Enumeration getAttributeNames()
Restituisce un'enumerazione che contiene i nomi degli attributi disponibili per la richiesta.
3Enumeration getHeaderNames()
Restituisce un'enumerazione che contiene tutti i nomi degli header inclusi nella richiesta.
4Enumeration getParameterNames()
Restituisce un'enumerazione di oggetti String che contiene i nomi dei parametri inclusi nella richiesta.
5HttpSession getSession()
Restituisce la sessione HttpSession associata alla richiesta corrente o crea una nuova sessione se la richiesta non ha una sessione.
6HttpSession getSession(boolean create)
Restituisce la sessione HttpSession associata alla richiesta corrente, o se non esiste una sessione corrente e create è vero, restituisce una nuova sessione di sessione.
7Locale getLocale()
Restituisce la configurazione regionale preferita del client accettata in base all'intestazione Accept-Language.
8Object getAttribute(String name)
Restituisce il valore dell'attributo denominato come oggetto, se non esiste un attributo con il nome fornito, restituisce null.
9ServletInputStream getInputStream()
Ricerca il corpo della richiesta in forma di dati binari utilizzando ServletInputStream.
10String getAuthType()
Restituisce il nome del metodo di autenticazione di protezione del Servlet, ad esempio, "BASIC" o "SSL", se il JSP non è protetto, restituisce null.
11String getCharacterEncoding()
Restituisce il nome della codifica di caratteri utilizzata nel corpo della richiesta.
12String getContentType()
Restituisce il tipo MIME del corpo della richiesta, o null se l' tipo non è noto.
13String getContextPath()
Restituisce la parte dell'URI del contesto della richiesta.
14String getHeader(String name)
Restituisce la stringa del valore dell'intestazione di richiesta specificata.
15String getMethod()
Restituisce il nome del metodo HTTP della richiesta, ad esempio GET, POST o PUT.
16String getParameter(String name)
Restituisce il valore del parametro come stringa, o null se il parametro non esiste.
17String getPathInfo()
Quando la richiesta viene inviata, restituisce qualsiasi informazione di percorso aggiuntiva relativa all'URL inviato dal client.
18String getProtocol()
Restituisce il nome e la versione del protocollo della richiesta.
19String getQueryString()
Restituisce la stringa di ricerca presente nella parte finale dell'URL della richiesta.
20String getRemoteAddr()
Restituisce l'indirizzo IP (IP) del client che ha inviato la richiesta.
21String getRemoteHost()
Restituisce il nome completo del client che ha inviato la richiesta.
22String getRemoteUser()
Se l'utente è autenticato, restituisce l'utente che ha inviato la richiesta, o null se l'utente non è autenticato.
23String getRequestURI()
Fino al nome del protocollo e alla prima riga della richiesta HTTP, restituisce una parte dell'URL della richiesta.
24String getRequestedSessionId()
Restituisce l'ID di sessione specificato dal client.
25String getServletPath()
Restituisce una parte dell'URL della richiesta chiamata JSP.
26String[] getParameterValues(String name)
Restituisce un array di oggetti stringa che contiene i valori di tutti i parametri di richiesta dati, se il parametro non esiste restituisce null.
27boolean isSecure()
Restituisce un valore booleano che indica se la richiesta utilizza un canale sicuro, come HTTPS.
28int getContentLength()
以字节为单位返回请求主体的长度,并提供输入流,或者如果长度未知则返回 -1。
29int getIntHeader(String name)
返回指定的请求头的值为一个 int 值。
30int getServerPort()
返回接收到这个请求的端口号。
31int getParameterMap()
将参数封装成 Map 类型。

HTTP Header 请求示例

下面的示例使用 HttpServletRequest 的 getHeaderNames() 方法读取 HTTP 头信息。该方法返回一个枚举,包含与当前的 HTTP 请求相关的头信息。

一旦我们有一个枚举,我们可以以标准方式循环枚举,使用 hasMoreElements() 方法来确定何时停止,使用 nextElement() 方法来获取每个参数的名称。

//导入必需的 java 库
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/DisplayHeader")
//扩展 HttpServlet 类
public class DisplayHeader extends HttpServlet {
    // 处理 GET 方法请求的方法
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        // 设置响应内容类型
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        String title = "Esempio di richiesta Header HTTP - Esempio del sito di base di tutorial";
        String docType =
            "<!DOCTYPE html> \n"
            out.println(docType +
            "<html>\n"+
            "<head><meta charset=\"utf-8\"><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>Nome Header</th><th>Valore Header</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>");
    }
    // Gestisce la richiesta di metodo POST
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

以上测试示例位于 TomcatTest 项目下,对应的 web.xml 配置为:

<?xml version="1.0" encoding="UTF-8"?>  
<web-app>  
  <servlet>  
    <!-- 类名 -->  
    <servlet-name>DisplayHeader</servlet-name>  
    <!-- 所在的包 -->  
    <servlet-class>com.w3codebox.test.DisplayHeader</servlet-class>  
  </servlet>  
  <servlet-mapping>  
    <servlet-name>DisplayHeader</servlet-name>  
    <!-- 访问的网址 -->  
    <url-pattern>/TomcatTest/DisplayHeader</url-pattern>  
  </servlet-mapping>  
</web-app>

现在,调用上面的 Servlet,访问 http://localhost:8080/TomcatTest/DisplayHeader 会产生以下结果: