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

HttpServletRequest 完整使用指南:Java 與 JSP 環境下的請求資訊獲取

     編輯:Java 程式設計入門

HttpServletRequest 是 Servlet 容器封裝 HTTP 請求的核心介面,提供協議、Header、參數、Session、客戶端資訊等完整存取能力。本文整理最常用的 API,並對比 Java Servlet 與 JSP 兩種寫法差異。

核心 API 分類速查

類別常用方法說明
請求行getMethod(), getRequestURI(), getServletPath(), getQueryString()HTTP 方法、URI、Servlet 路徑、查詢字串
協議資訊getProtocol(), getScheme(), getServerName(), getServerPort()HTTP/1.1、http/https、主機名、埠號
客戶端資訊getRemoteAddr(), getRemoteHost(), getRemoteUser(), getAuthType()IP、主機名、認證用戶、認證類型
Header 存取getHeader(String), getHeaders(String), getHeaderNames()單值、多值、所有 Header 名稱
參數處理getParameter(String), getParameterValues(String), getParameterMap()表單/查詢參數
Session 管理getSession(), getSession(boolean), getRequestedSessionId()取得/建立 Session、獲取請求攜帶的 Session ID
輸入流getInputStream(), getReader()讀取原始 Body (JSON、XML、檔案上傳)
屬性傳遞setAttribute(), getAttribute(), removeAttribute()請求域共享資料 (Filter、Interceptor、Forward)

Java Servlet 完整列印範例

@WebServlet("/request-info")
public class RequestInfoServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        resp.setContentType("text/plain;charset=UTF-8");
        PrintWriter out = resp.getWriter();

        out.println("=== 請求行 ===");
        out.println("Method: " + req.getMethod());
        out.println("RequestURI: " + req.getRequestURI());
        out.println("ServletPath: " + req.getServletPath());
        out.println("QueryString: " + req.getQueryString());

        out.println("\n=== 協議與伺服器 ===");
        out.println("Protocol: " + req.getProtocol());
        out.println("Scheme: " + req.getScheme());
        out.println("ServerName: " + req.getServerName());
        out.println("ServerPort: " + req.getServerPort());

        out.println("\n=== 客戶端 ===");
        out.println("RemoteAddr: " + req.getRemoteAddr());
        out.println("RemoteHost: " + req.getRemoteHost());
        out.println("RemoteUser: " + req.getRemoteUser());
        out.println("AuthType: " + req.getAuthType());

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

        out.println("\n=== Session ===");
        HttpSession session = req.getSession(false);
        if (session != null) {
            out.println("SessionId: " + session.getId());
            out.println("Created: " + new Date(session.getCreationTime()));
            out.println("LastAccessed: " + new Date(session.getLastAccessedTime()));
        } else {
            out.println("No existing session");
        }
    }
}

JSP 頁面對應寫法

JSP 隱含物件 request 即為 HttpServletRequest,使用 out.println() 輸出:

<%@ page contentType="text/plain;charset=UTF-8" %>
<%
    out.println("Method: " + request.getMethod());
    out.println("RequestURI: " + request.getRequestURI());
    // ... 其他同上
    HttpSession session = request.getSession(false);
    if (session != null) {
        out.println("Session Created: " + session.getCreationTime());
    }
%>

實戰注意事項

  1. getRemoteAddr() 取得代理 IP:生產環境常在 Nginx/Load Balancer 後,需讀取 X-Forwarded-For 或 X-Real-IP Header。
  2. 請求體只能讀一次:getInputStream() / getReader() 互斥且不可重複讀取,需配合 HttpServletRequestWrapper 快取 Body 供多次讀取(如日誌攔截器)。
  3. getParameterMap() 返回不可修改的 Map,Spring MVC 會自動轉換為多值處理。
  4. 編碼設定:request.setCharacterEncoding("UTF-8") 必須在讀取參數前呼叫,否則中文亂碼。

Spring Boot 快速獲取

@GetMapping("/info")
public Map info(HttpServletRequest request) {
    Map map = new HashMap<>();
    map.put("method", request.getMethod());
    map.put("uri", request.getRequestURI());
    map.put("ip", request.getHeader("X-Forwarded-For") != null 
              ? request.getHeader("X-Forwarded-For").split(",")[0].trim() 
              : request.getRemoteAddr());
    map.put("userAgent", request.getHeader("User-Agent"));
    map.put("sessionId", request.getSession().getId());
    return map;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved