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

Servlet 處理 HTTP 請求全攻略:核心 API、請求轉發與參數獲取

     編輯:Java 綜合教學

HttpServletRequest 核心方法分類

請求行相關

  • getMethod():HTTP 方法
  • getRequestURI():資源路徑(不含查詢串)
  • getRequestURL():完整 URL
  • getContextPath():應用上下文路徑
  • getServletPath():Servlet 映射路徑
  • getProtocol():協議版本

請求頭相關

  • getHeader(name):獲取指定頭
  • getHeaderNames():所有頭名稱枚舉
  • getIntHeader()/getDateHeader():類型轉換

請求參數(消息體)

  • getParameter(name):單值
  • getParameterValues(name):多值(複選框等)
  • getParameterNames():所有參數名
  • getParameterMap():Map 結構,適合批量處理

請求轉發與包含

// 轉發:服務端內部跳轉,共享 request/response
request.getRequestDispatcher("/target.jsp").forward(request, response);

// 包含:將目標資源輸出合併到當前響應
request.getRequestDispatcher("/header.jsp").include(request, response);

關鍵差異:forward 後代碼不再執行,include 繼續執行;include 目標資源不能設置狀態碼與響應頭。

請求域數據共享

僅在一次請求鏈路中有效(forward 鏈):

// 設置
request.setAttribute("user", userObj);
// 獲取
User u = (User) request.getAttribute("user");

實用工具方法大全

需求方法示例輸出
客戶端 IPgetRemoteAddr()192.168.1.100
服務器信息getServletContext().getServerInfo()Apache Tomcat/9.0.65
編碼格式getCharacterEncoding()UTF-8
查詢字符串getQueryString()id=1&name=test
Session IDgetRequestedSessionId()JSESSIONID=ABC123
協議方案getScheme()http/https
服務器名getServerName()localhost
服務器端口getServerPort()8080

參數批量獲取最佳實踐

// 方式1:ParameterMap(推薦)
Map paramMap = request.getParameterMap();
paramMap.forEach((key, values) -> {
    System.out.println(key + "=" + String.join(",", values));
});

// 方式2:ParameterNames(傳統)
Enumeration names = request.getParameterNames();
while (names.hasMoreElements()) {
    String name = names.nextElement();
    System.out.println(name + "=" + request.getParameter(name));
}

注意事項

  • POST 請求獲取參數前需設置編碼:request.setCharacterEncoding("UTF-8")
  • getInputStream() 與 getParameter() 互斥,二選一
  • 轉發鏈過長影響性能,建議控制在 3 層以內
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved