Java 解析url,获取参数

本文介绍了一个用于解析URL并获取参数的Java工具类。该工具类能够将URL的基础部分与参数分离,并将参数存储为Map集合,便于后续处理。通过实例演示了如何使用此工具类进行URL解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个简单的解析url,获取参数的Java工具类

import java.util.HashMap;
import java.util.Map;

/**
 * @author lixk
 * @description url工具类
 * @date 2018/9/26 9:58
 */
public class UrlUtil {

	public static class UrlEntity {
		/**
		 * 基础url
		 */
		public String baseUrl;
		/**
		 * url参数
		 */
		public Map<String, String> params;
	}

	/**
	 * 解析url
	 *
	 * @param url
	 * @return
	 */
	public static UrlEntity parse(String url) {
		UrlEntity entity = new UrlEntity();
		if (url == null) {
			return entity;
		}
		url = url.trim();
		if (url.equals("")) {
			return entity;
		}
		String[] urlParts = url.split("\\?");
		entity.baseUrl = urlParts[0];
		//没有参数
		if (urlParts.length == 1) {
			return entity;
		}
		//有参数
		String[] params = urlParts[1].split("&");
		entity.params = new HashMap<>();
		for (String param : params) {
			String[] keyValue = param.split("=");
			entity.params.put(keyValue[0], keyValue[1]);
		}

		return entity;
	}

	/**
	 * 测试
	 *
	 * @param args
	 */
	public static void main(String[] args) {
		UrlEntity entity = parse(null);
		System.out.println(entity.baseUrl + "\n" + entity.params);
		entity = parse("http://www.123.com");
		System.out.println(entity.baseUrl + "\n" + entity.params);
		entity = parse("http://www.123.com?id=1");
		System.out.println(entity.baseUrl + "\n" + entity.params);
		entity = parse("http://www.123.com?id=1&name=小明");
		System.out.println(entity.baseUrl + "\n" + entity.params);
	}
}

运行输出结果

null
null
http://www.123.com
null
http://www.123.com
{id=1}
http://www.123.com
{name=小明, id=1}
### Java解析URL参数的方法 在Java中,可以通过多种方式解析URL中的参数。以下是几种常见的方法及其对应的代码示例。 #### 方法一:使用`java.net.URL`类正则表达式 可以利用`java.net.URL`类提取查询字符串部分,并通过正则表达式进一步拆分键值对[^1]。 ```java import java.net.URL; import java.util.HashMap; import java.util.Map; public class URLParser { public static Map<String, String> getQueryMap(String query) { Map<String, String> map = new HashMap<>(); if (query != null && !query.isEmpty()) { for (String param : query.split("&")) { String[] pair = param.split("="); if (pair.length >= 2) { map.put(pair[0], pair[1]); } else { map.put(pair[0], ""); } } } return map; } public static void main(String[] args) throws Exception { URL url = new URL("http://example.com/page?name=John&age=30"); String query = url.getQuery(); Map<String, String> params = getQueryMap(query); System.out.println(params); // 输出 {name=John, age=30} } } ``` 此方法适用于简单的GET请求场景,能够有效处理标准的键值对形式的参数。 --- #### 方法二:借助第三方库Apache Commons Codec 如果希望减少手动编码的工作量,可以选择引入Apache Commons Codec库来简化操作[^2]。 ```xml <!-- Maven依赖 --> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.15</version> </dependency> ``` 随后可编写如下代码: ```java import org.apache.commons.codec.net.URLCodec; import java.util.HashMap; import java.util.Map; public class ApacheURLParser { public static Map<String, String> parseQueryString(String queryString) throws Exception { Map<String, String> parameters = new HashMap<>(); URLCodec codec = new URLCodec(); if (queryString != null && !queryString.isEmpty()) { for (String param : queryString.split("&")) { int delimiterIndex = param.indexOf('='); if (delimiterIndex > 0) { String key = codec.decode(param.substring(0, delimiterIndex)); String value = codec.decode(param.substring(delimiterIndex + 1)); parameters.put(key, value); } } } return parameters; } public static void main(String[] args) throws Exception { String queryString = "name=John%20Doe&age=30"; Map<String, String> params = parseQueryString(queryString); System.out.println(params); // 输出 {name=John Doe, age=30} } } ``` 这种方法的优势在于其内置支持解码特殊字符的功能,从而减少了开发者自行实现解码逻辑的需求。 --- #### 方法三:基于Servlet API(仅限于Web应用) 对于运行在服务器端的应用程序,可以直接利用Servlet API提供的工具函数获取请求参数[^3]。 ```java import javax.servlet.http.HttpServletRequest; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; public class ServletParamExtractor { public static Map<String, String[]> extractParameters(HttpServletRequest request) { Map<String, String[]> parameterMap = new HashMap<>(request.getParameterMap()); return parameterMap; } public static void printAllParameters(Map<String, String[]> paramMap) { for (Map.Entry<String, String[]> entry : paramMap.entrySet()) { System.out.print(entry.getKey() + "="); for (String value : entry.getValue()) { System.out.print(value + "; "); } System.out.println(); } } } ``` 上述代码片段展示了如何从HTTP请求对象中提取所有参数并将其存储到映射表中以便后续访问。 --- ### 总结 以上三种方法分别适合不同场合下的需求: - 如果项目规模较小或者不涉及复杂框架,则推荐采用第一种或第二种方案; - 对于大型企业级应用而言,在已有容器环境的前提下优先考虑第三种做法以充分利用现有资源服务能力。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值