杰瑞科技汇

Java如何获取URL参数?

在Java中获取URL参数的几种方法

在Java中获取URL参数有多种方法,以下是几种常用的实现方式:

使用Java标准库(java.net.URL和java.net.URI)

import java.net.URL;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
public class UrlParameterExtractor {
    public static Map<String, String> getUrlParameters(String urlString) {
        Map<String, String> params = new HashMap<>();
        try {
            URL url = new URL(urlString);
            String query = url.getQuery();
            if (query != null) {
                for (String param : query.split("&")) {
                    String[] pair = param.split("=");
                    String key = URLDecoder.decode(pair[0], StandardCharsets.UTF_8);
                    String value = pair.length > 1 ? URLDecoder.decode(pair[1], StandardCharsets.UTF_8) : "";
                    params.put(key, value);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return params;
    }
    public static void main(String[] args) {
        String url = "https://example.com/path?name=John%20Doe&age=30&city=New%20York";
        Map<String, String> params = getUrlParameters(url);
        System.out.println("name: " + params.get("name")); // 输出: name: John Doe
        System.out.println("age: " + params.get("age"));   // 输出: age: 30
        System.out.println("city: " + params.get("city")); // 输出: city: New York
    }
}

使用Java 11+的URI类(更推荐)

import java.net.URI;
import java.net.URISyntaxException;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.util.LinkedHashMap;
import java.util.Map;
public class UriParameterExtractor {
    public static Map<String, String> getUriParameters(String uriString) {
        Map<String, String> params = new LinkedHashMap<>();
        try {
            URI uri = new URI(uriString);
            String query = uri.getQuery();
            if (query != null) {
                for (String param : query.split("&")) {
                    String[] pair = param.split("=", 2);
                    String key = URLDecoder.decode(pair[0], StandardCharsets.UTF_8);
                    String value = pair.length > 1 ? URLDecoder.decode(pair[1], StandardCharsets.UTF_8) : "";
                    params.put(key, value);
                }
            }
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
        return params;
    }
    public static void main(String[] args) {
        String uri = "https://example.com/path?name=John%20Doe&age=30&city=New%20York";
        Map<String, String> params = getUriParameters(uri);
        params.forEach((k, v) -> System.out.println(k + ": " + v));
    }
}

使用第三方库(如Apache HttpClient)

import org.apache.http.client.utils.URIBuilder;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Map;
public class ApacheHttpParameterExtractor {
    public static Map<String, String> getParametersWithApacheHttp(String urlString) {
        try {
            URI uri = new URIBuilder(urlString).build();
            return org.apache.http.client.utils.URIBuilder.parseQuery(uri.getQuery());
        } catch (URISyntaxException e) {
            e.printStackTrace();
            return null;
        }
    }
    public static void main(String[] args) {
        String url = "https://example.com/path?name=John%20Doe&age=30&city=New%20York";
        Map<String, String> params = getParametersWithApacheHttp(url);
        params.forEach((k, v) -> System.out.println(k + ": " + v));
    }
}

使用Servlet API(适用于Web应用)

如果你在Servlet环境中,可以直接使用HttpServletRequest对象:

import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
import java.util.Map;
public class ServletParameterExtractor {
    public static void printParameters(HttpServletRequest request) {
        Map<String, String[]> parameterMap = request.getParameterMap();
        parameterMap.forEach((key, values) -> {
            System.out.println(key + ": " + String.join(", ", values));
        });
    }
}

注意事项

  1. URL解码:URL参数通常需要解码(如%20应解码为空格)
  2. 参数编码:确保正确处理各种字符编码(推荐使用UTF-8)
  3. 空值处理:有些参数可能没有值(如?param
  4. 安全性:不要直接将URL参数用于SQL查询,防止注入攻击

方法可以根据你的具体需求和环境选择使用,对于简单的Java应用,推荐使用第二种方法(Java 11+的URI类)。

分享:
扫描分享到社交APP
上一篇
下一篇