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

Struts2 獲取完整請求 URL 含參數的標準寫法

     編輯:Java 相關知識

核心代碼


import com.opensymphony.xwork2.ActionContext;
import org.apache.struts2.ServletActionContext;
import javax.servlet.http.HttpServletRequest;

public String getFullRequestUrl() {
    HttpServletRequest request = ServletActionContext.getRequest();

    // 1. 獲取請求 URI (不含參數) 例:/myapp/user/login
    String requestUri = request.getRequestURI();

    // 2. 獲取查詢字符串 例:id=100&name=test
    String queryString = request.getQueryString();

    // 3. 組裝完整路徑
    String fullPath = requestUri;
    if (queryString != null && !queryString.isEmpty()) {
        fullPath += "?" + queryString;
    }

    // 4. 如需包含協議+域名+端口
    // StringBuffer fullUrl = request.getRequestURL(); // 已含協議域名端口+URI
    // if (queryString != null) fullUrl.append("?").append(queryString);

    // 5. 存入 Session 供後續使用
    ActionContext.getContext().getSession().put("PRE_PATH", fullPath);

    return fullPath;
}

關鍵 API 對照

方法返回示例說明
getRequestURI()/myapp/user/login不含協議域名、不含參數
getRequestURL()https://host:8080/myapp/user/login含協議域名端口、不含參數
getQueryString()id=100&name=test原始查詢字符串
getServletPath()/user/login去除 context-path

常見場景

  • 登錄攔截器:保存當前 URL,登錄成功後重定向回原頁
  • 審計日誌:記錄用戶完整訪問路徑含參數
  • 異常處理:錯誤頁面顯示「返回上一頁」鏈接

注意事項

  1. 編碼:getQueryString() 返回 ISO-8859-1 編碼字符串,中文參數需手動 new String(qs.getBytes("ISO-8859-1"), "UTF-8") 或配置 Tomcat URIEncoding="UTF-8"
  2. 安全:URL 參數可能包含敏感信息(token、密碼),日誌記錄前需脫敏
  3. Struts2 內建:ServletActionContext.getRequest() 實際委託給 ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved