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

Java Servlet 開發:HttpServletRequest 常用方法完整指南

     編輯:Java 相關知識

前言

在 Java Web 開發中,HttpServletRequest 是處理客戶端請求的核心對象。當瀏覽器發起 HTTP 請求時,所有請求頭、參數、路徑等信息都封裝在這個對象中。掌握其常用方法,能讓你輕鬆獲取客戶端環境信息、請求頭、請求參數,是 Servlet 開發的基礎技能。

一、獲取客戶端環境信息

以下方法可幫助你快速獲取請求的來源、路徑、協議等關鍵信息:

  • getRequestURL():返回客戶端發出請求的完整 URL(包含協議、主機、端口、路徑)。
  • getRequestURI():返回請求行中的資源路徑部分(不含查詢參數)。
  • getQueryString():返回請求 URL 中的查詢字符串(參數部分)。
  • getRemoteAddr():獲取客戶端 IP 地址。
  • getRemoteHost():獲取客戶端完整主機名(若無 DNS 註冊則返回 IP)。
  • getRemotePort():返回客戶端使用的網絡端口號。
  • getLocalAddr():返回 Web 服務器的 IP 地址。
  • getLocalName():返回 Web 服務器的主機名。
  • getMethod():獲取 HTTP 請求方式(GET、POST 等)。

代碼示例

package com.example.request;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class RequestDemo extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        System.out.println("完整 URL: " + request.getRequestURL());
        System.out.println("資源路徑: " + request.getRequestURI());
        System.out.println("查詢字符串: " + request.getQueryString());
        System.out.println("客戶端 IP: " + request.getRemoteAddr());
        System.out.println("客戶端主機名: " + request.getRemoteHost());
        System.out.println("客戶端端口: " + request.getRemotePort());
        System.out.println("服務器 IP: " + request.getLocalAddr());
        System.out.println("服務器主機名: " + request.getLocalName());
        System.out.println("請求方式: " + request.getMethod());
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

在瀏覽器訪問 https://localhost:8080/test/servlet/RequestDemo 後,控制台將輸出上述信息。

請求信息輸出示例

二、獲取請求頭信息

HTTP 請求頭包含客戶端瀏覽器、編碼、緩存等元數據,常用方法如下:

  • getHeader(String name):獲取指定請求頭的值(單值)。
  • getHeaders(String name):獲取指定請求頭的所有值(返回 Enumeration)。
  • getHeaderNames():獲取所有請求頭名稱(返回 Enumeration)。

實戰場景:根據 Accept-Encoding 決定是否壓縮響應

String encoding = request.getHeader("Accept-Encoding");
if (encoding != null && encoding.contains("gzip")) {
    // 輸出 GZIP 壓縮數據
} else {
    // 輸出原始數據
}

// 遍歷所有請求頭
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
    String name = headerNames.nextElement();
    String value = request.getHeader(name);
    System.out.println(name + " = " + value);
}

請求頭遍歷輸出示例

三、獲取請求參數(客戶端提交數據)

無論是 URL 查詢參數、表單提交,還是 AJAX 請求,以下方法均可處理:

  • getParameter(String name):獲取單個參數值(多值取首個)。
  • getParameterValues(String name):獲取同名參數的所有值(數組)。
  • getParameterNames():獲取所有參數名稱(Enumeration)。
  • getParameterMap():獲取參數映射表(Map<String, String[]>),框架開發常用。

完整參數處理示例

// 單值參數
String name = request.getParameter("name");

// 多值參數(如 checkbox、多選下拉框)
String[] likes = request.getParameterValues("like");
if (likes != null) {
    for (String like : likes) {
        System.out.println(like);
    }
}

// 專業遍歷寫法(避免空指針)
for (int i = 0; likes != null && i < likes.length; i++) {
    System.out.println(likes[i]);
}

// 遍歷所有參數
Enumeration<String> paramNames = request.getParameterNames();
while (paramNames.hasMoreElements()) {
    String paramName = paramNames.nextElement();
    String value = request.getParameter(paramName);
    System.out.println(paramName + " = " + value);
}

// 獲取參數映射(框架常用)
Map<String, String[]> paramMap = request.getParameterMap();
for (Map.Entry<String, String[]> entry : paramMap.entrySet()) {
    System.out.println(entry.getKey() + " = " + entry.getValue()[0]);
}

總結

HttpServletRequest 是 Servlet 開發的「瑞士軍刀」。熟練掌握環境信息獲取、請求頭解析、參數處理三大類方法,能讓你從容應對各種 Web 開發場景。建議初學者多動手實驗,觀察不同請求類型下的輸出差異,深化理解。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved