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

Java Servlet 判斷 URL 是否攜帶參數的正確姿勢

     編輯:程式設計綜合問答

前言

在 Java Web 開發中,經常需要判斷請求 URL 是否包含查詢參數(如 ?locale=zh_CN)。許多開發者會直接使用 HttpServletRequest.getQueryString() 並配合正則表達式進行匹配,但這樣做容易引發空指針異常或邏輯錯誤。本文將梳理常見錯誤,並給出最佳實踐方案。

常見錯誤示例

if (!(httpServletRequest.getQueryString() == null)) {
    String url = httpServletRequest.getQueryString();
    boolean flag = url.matches("locale=[a-z]{1,2}_[A-Z]{1,2}");
    if (flag) {
        String locale = httpServletRequest.getParameter("locale");
        MyAcceptHeaderLocaleResolver mhlr = new MyAcceptHeaderLocaleResolver();
        if (locale.length() != 0 && locale != null) { // 錯誤順序:先判斷 length 再判斷 null
            Locale l = new Locale(locale);
            mhlr.setLocale(httpServletRequest, httpServletResponse, l);
            return "login";
        }
    }
}

問題分析

  1. 空指針風險:locale.length() != 0 && locale != null 條件順序顛倒,當 locale 為 null 時,先執行 length() 會拋出 NullPointerException。正確順序應為 locale != null && locale.length() != 0。
  2. 正則表達式過於複雜:實際上只需直接獲取參數值判斷是否為空,無需用正則去匹配整個查詢字符串。
  3. 參數可能不存在:若 URL 中根本沒有 locale 參數,getParameter 返回 null,後續邏輯會失效。

優化後的最佳實踐

String locale = request.getParameter("locale");
if (locale != null && !locale.isEmpty()) {
    // 直接使用參數值,無需正則校驗
    Locale l = new Locale(locale);
    MyAcceptHeaderLocaleResolver mhlr = new MyAcceptHeaderLocaleResolver();
    mhlr.setLocale(request, response, l);
    return "login";
}

核心建議

  • 優先使用 getParameter(String name) 直接獲取指定參數,簡潔且安全。
  • 判斷字符串非空時,務必遵循 str != null && !str.isEmpty() 的順序。
  • 避免對 getQueryString() 進行複雜正則匹配,除非有特殊解析需求。

掌握這些細節,能讓你的 Servlet 參數處理更加健壯、易維護。

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