首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Servlet 與 JSP 取得 HttpServletRequest 完整屬性速查表

     編輯:Java 相關知識

前言

開發 Web 應用時,常需檢查 HttpServletRequest 物件包含哪些資訊(Header、參數、Session、伺服器資訊等)。本文整理一份可直接複製執行的完整屬性列印程式碼,分別提供 Servlet (Java) 與 JSP 兩種版本,方便除錯與教學參考。

Servlet 版本 (System.out 輸出至主控台/日誌)

@WebServlet("/request-info")
public class RequestInfoServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        System.out.println("=== HttpServletRequest 完整屬性 ===");
        System.out.println("Protocol: " + request.getProtocol());
        System.out.println("Scheme: " + request.getScheme());
        System.out.println("Server Name: " + request.getServerName());
        System.out.println("Server Port: " + request.getServerPort());
        System.out.println("Server Info: " + getServletConfig().getServletContext().getServerInfo());
        System.out.println("Remote Addr: " + request.getRemoteAddr());
        System.out.println("Remote Host: " + request.getRemoteHost());
        System.out.println("Character Encoding: " + request.getCharacterEncoding());
        System.out.println("Content Length: " + request.getContentLength());
        System.out.println("Content Type: " + request.getContentType());
        System.out.println("Auth Type: " + request.getAuthType());
        System.out.println("HTTP Method: " + request.getMethod());
        System.out.println("Path Info: " + request.getPathInfo());
        System.out.println("Path Translated: " + request.getPathTranslated());
        System.out.println("Query String: " + request.getQueryString());
        System.out.println("Remote User: " + request.getRemoteUser());
        System.out.println("Requested Session Id: " + request.getRequestedSessionId());
        System.out.println("Request URI: " + request.getRequestURI());
        System.out.println("Servlet Path: " + request.getServletPath());

        // 常用 Header
        String[] headers = {"Accept", "Host", "Referer", "Accept-Language",
                "Accept-Encoding", "User-Agent", "Connection", "Cookie"};
        for (String h : headers) {
            System.out.println(h + ": " + request.getHeader(h));
        }

        // Session 資訊
        HttpSession session = request.getSession(false);
        if (session != null) {
            System.out.println("Session Created: " + new Date(session.getCreationTime()));
            System.out.println("Session Last Accessed: " + new Date(session.getLastAccessedTime()));
        }
    }
}

JSP 版本 (out.println 輸出至瀏覽器)

<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<body>
<h3>HttpServletRequest 完整屬性</h3>
<pre>
<%
    out.println("Protocol: " + request.getProtocol());
    out.println("Scheme: " + request.getScheme());
    out.println("Server Name: " + request.getServerName());
    out.println("Server Port: " + request.getServerPort());
    out.println("Server Info: " + getServletConfig().getServletContext().getServerInfo());
    out.println("Remote Addr: " + request.getRemoteAddr());
    out.println("Remote Host: " + request.getRemoteHost());
    out.println("Character Encoding: " + request.getCharacterEncoding());
    out.println("Content Length: " + request.getContentLength());
    out.println("Content Type: " + request.getContentType());
    out.println("Auth Type: " + request.getAuthType());
    out.println("HTTP Method: " + request.getMethod());
    out.println("Path Info: " + request.getPathInfo());
    out.println("Path Translated: " + request.getPathTranslated());
    out.println("Query String: " + request.getQueryString());
    out.println("Remote User: " + request.getRemoteUser());
    out.println("Requested Session Id: " + request.getRequestedSessionId());
    out.println("Request URI: " + request.getRequestURI());
    out.println("Servlet Path: " + request.getServletPath());

    String[] headers = {"Accept", "Host", "Referer", "Accept-Language",
            "Accept-Encoding", "User-Agent", "Connection", "Cookie"};
    for (String h : headers) {
        out.println(h + ": " + request.getHeader(h));
    }

    HttpSession session = request.getSession(false);
    if (session != null) {
        out.println("Session Created: " + new Date(session.getCreationTime()));
        out.println("Session Last Accessed: " + new Date(session.getLastAccessedTime()));
    }
%>
</pre>
</body>
</html>

屬性分類速查

分類方法說明
請求行getMethod()HTTP 方法 (GET/POST/PUT...)
getRequestURI()完整請求 URI (含 context path)
getServletPath()對應 Servlet 映射路徑
getPathInfo()Servlet 路徑後的額外路徑
getQueryString()查詢字串 (未解碼)
伺服器/連線getServerName()/getServerPort()伺服器主機名/埠號
getScheme()http 或 https
getProtocol()HTTP/1.1 等
getRemoteAddr()/getRemoteHost()客戶端 IP/主機名
內容協商getContentType()請求體 MIME 類型
getContentLength()請求體長度 (bytes)
getCharacterEncoding()請求體編碼
安全/認證getAuthType()認證機制 (BASIC/FORM/CLIENT_CERT)
getRemoteUser()經認證的使用者名稱
getRequestedSessionId()客戶端攜帶的 Session ID
Header 存取getHeader(name)單一 Header 值
getHeaders(name)同名 Header 所有值 (Enumeration)

進階用法:取得所有 Header 與 Parameter

// 所有 Header
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
    String name = headerNames.nextElement();
    Enumeration<String> values = request.getHeaders(name);
    while (values.hasMoreElements()) {
        System.out.println(name + " = " + values.nextElement());
    }
}

// 所有 Parameter (GET/POST 合併)
Map<String, String[]> paramMap = request.getParameterMap();
paramMap.forEach((k, v) -> System.out.println(k + " = " + Arrays.toString(v)));

注意事項

  • getRemoteAddr() 在反向代理 (Nginx/Apache) 後會取到代理 IP,需讀取 X-Forwarded-For Header。
  • getContentLength() 回傳 int,大檔案上傳請用 getContentLengthLong() (Servlet 3.1+)。
  • JSP 中隱含物件 request 型別為 HttpServletRequest,可直接呼叫上述方法。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved