=======================
©Copyright 蕃薯耀 2021-01-22
http://fanshuyao.iteye.com/
import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; public class UrlUtils { private static Logger log = Logger.getLogger(UrlUtils.class); public static final String QUESTION_MARK = "?"; public static final String AND_MARK = "&"; public static final String EQUAL_MARK = "="; /** * 获取链接的参数 * @param url 链接 * @return */ public static LinkedHashMap<String, String> getParamsMap(String url){ log.info("url=" + url); if(StringUtils.isBlank(url)){ return null; } url = url.trim(); int length = url.length(); int index = url.indexOf(QUESTION_MARK); if(index > -1){//url说明有问号 if((length - 1) == index){//url最后一个符号为?,如:http://wwww.baidu.com? return null; }else{ //情况为:http://wwww.baidu.com?aa=11或http://wwww.baidu.com?aa=或http://wwww.baidu.com?aa String baseUrl = url.substring(0, index); String paramsString = url.substring(index + 1); log.info("baseUrl=" + baseUrl); log.info("paramsString=" + paramsString); if(!StringUtils.isBlank(paramsString)){ LinkedHashMap<String, String> paramsMap = new LinkedHashMap<String, String>(); String[] params = paramsString.split(AND_MARK); for (String param : params) { if(!StringUtils.isBlank(param)){ String[] oneParam = param.split(EQUAL_MARK); String paramName = oneParam[0]; if(!StringUtils.isBlank(paramName)){ if(oneParam.length > 1){ paramsMap.put(paramName.trim(), oneParam[1]);//键可以去空格,值不能去空格 }else{ paramsMap.put(paramName.trim(), ""); } } } } return paramsMap; } } } return null; } /** * 向url链接追加参数(会覆盖已经有的参数) * @param url 链接地址 * @param params LinkedHashMap<String, String> 参数 * @param isOverride 是否覆盖参数,true表示将新参数覆盖链接原参数,false不覆盖 * @return */ public static String addParams(String url, LinkedHashMap<String, String> params, boolean isOverride){ if(StringUtils.isBlank(url)){ return ""; }else if(params == null || params.size() < 1){ return url.trim(); }else{ url = url.trim(); int index = url.indexOf(QUESTION_MARK); String baseUrl = ""; if(index > -1){ baseUrl = url.substring(0, index); }else{ baseUrl = url; } LinkedHashMap<String, String> paramsMapInUrl = getParamsMap(url); if(paramsMapInUrl == null){ paramsMapInUrl = new LinkedHashMap<String, String>(); } if(!isOverride){ //移除Url链接已经存在的参数 LinkedHashMap<String, String> newParams = new LinkedHashMap<String, String>(params.size()); for (Map.Entry<String, String> entry : params.entrySet()) { if(!StringUtils.isBlank(entry.getKey())){ newParams.put(entry.getKey().trim(), entry.getValue()); } } for (Map.Entry<String, String> entry : newParams.entrySet()) { for (Map.Entry<String, String> urlEntry : paramsMapInUrl.entrySet()) { if(!StringUtils.isBlank(entry.getKey())){ if(entry.getKey().trim().equals(urlEntry.getKey())){ params.remove(entry.getKey().trim()); } } } } } for (Map.Entry<String, String> entry : params.entrySet()) { paramsMapInUrl.put(entry.getKey().trim(), entry.getValue()); } //重新拼接链接 if(paramsMapInUrl != null && paramsMapInUrl.size() > 0){ StringBuffer paramBuffer = new StringBuffer(baseUrl); paramBuffer.append(QUESTION_MARK); Set<String> set = paramsMapInUrl.keySet(); for (String paramName : set) { paramBuffer.append(paramName).append(EQUAL_MARK) .append(paramsMapInUrl.get(paramName) == null ? "" : paramsMapInUrl.get(paramName)) .append(AND_MARK); } paramBuffer.deleteCharAt(paramBuffer.length() - 1); return paramBuffer.toString(); } return baseUrl; } } /** * 向url链接追加参数(单个) (会覆盖已经有的参数) * @param url 链接地址 * @param name String 参数名 * @param value String 参数值 * @param isOverride 是否覆盖参数,true表示将新参数覆盖链接原参数,false不覆盖 * @return */ public static String addParam(String url, String name, String value, boolean isOverride){ if(StringUtils.isBlank(url)){ return ""; }else if(StringUtils.isBlank(name)){ return url.trim(); }else{ LinkedHashMap<String, String> params = new LinkedHashMap<String, String>(); params.put(name.trim(), value); return addParams(url, params, isOverride); } } /** * 向url链接追加参数(单个) (会覆盖已经有的参数) * @param url 链接地址 * @param name String 参数名 * @param value String 参数值 * @return */ public static String addParam(String url, String name, String value){ return addParam(url, name, value, true); } /** * 向url链接追加参数(单个) (不会覆盖已经有的参数) * @param url 链接地址 * @param name String 参数名 * @param value String 参数值 * @return */ public static String addParamNotExist(String url, String name, String value){ return addParam(url, name, value, false); } /** * 向url链接追加参数(会覆盖已经有的参数) * @param url 链接地址 * @param params LinkedHashMap<String, String> 参数 * @return */ public static String addParams(String url, LinkedHashMap<String, String> params){ return addParams(url, params, true); } /** * 向url链接追加参数(不会覆盖已经有的参数) * @param url 链接地址 * @param params LinkedHashMap<String, String> 参数 * @return */ public static String addParamsNotExist(String url, LinkedHashMap<String, String> params){ return addParams(url, params, false); } /** * 移除url链接的多个参数 * @param url String 链接地址 * @param paramNames String... 参数 * @return */ public static String removeParams(String url, String... paramNames){ if(StringUtils.isBlank(url)){ return ""; }else if(paramNames == null || paramNames.length < 1){ return url.trim(); }else{ url = url.trim(); int length = url.length(); int index = url.indexOf(QUESTION_MARK); if(index > -1){//url有问号 if((length - 1) == index){//url最后一个符号为?,如:http://wwww.baidu.com? return url; }else{ LinkedHashMap<String, String> paramsMap = getParamsMap(url); //删除参数 if(paramsMap != null && paramsMap.size() > 0){ for (String paramName : paramNames) { if(!StringUtils.isBlank(paramName)){ paramsMap.remove(paramName.trim()); } } } String baseUrl = url.substring(0, index); //重新拼接链接 if(paramsMap != null && paramsMap.size() > 0){ StringBuffer paramBuffer = new StringBuffer(baseUrl); paramBuffer.append(QUESTION_MARK); Set<String> set = paramsMap.keySet(); for (String paramName : set) { paramBuffer.append(paramName).append(EQUAL_MARK).append(paramsMap.get(paramName)).append(AND_MARK); } paramBuffer.deleteCharAt(paramBuffer.length() - 1); return paramBuffer.toString(); } return baseUrl; } } return url; } } public static void main(String[] args) { /* String a = "http://wwww.baidu.com"; String b = "http://wwww.baidu.com?"; String c = "http://wwww.baidu.com?aa=11"; String d = "http://wwww.baidu.com?aa"; String e = "http://wwww.baidu.com?aa=11&bb=222&cc=33"; String f = "http://wwww.baidu.com?aa=11&bb=222&cc=33&dd="; String g = "http://wwww.baidu.com?aa=111&bb=222&cc=33&dd"; */ /* List<String> params = new ArrayList<String>(); params.add("aa"); System.out.println("d="+removeParams(d, params)); params.add("bb"); System.out.println("e="+removeParams(e, params)); params.add("cc"); System.out.println("f="+removeParams(f, params)); params.add("dd"); System.out.println("g="+removeParams(g, params)); */ /* System.out.println("g="+removeParams(g, "cc","aa","dd")); System.out.println("g2="+removeParams(g, "cc","aa","dd")); System.out.println("d="+removeParams(d, "cc")); System.out.println("d2="+removeParams(d, "aa")); System.out.println("a="+removeParams(a, "aa")); System.out.println("b="+removeParams(b, "aa")); */ /* System.out.println("a==="+addParam(a, "p", "cc")); System.out.println("b==="+addParam(b, "p", "cc")); System.out.println("c==="+addParam(c, "p", "cc")); System.out.println("d==="+addParam(d, "p", "cc")); */ /* System.out.println("g1==="+addParam(g, "bb", "000")); System.out.println("g2==="+addParamNotExist(g, "bb", "000")); */ /* LinkedHashMap<String, String> paramsMap = new LinkedHashMap<String, String>(); paramsMap.put("jj", "j13"); paramsMap.put("kkk", "k1243"); paramsMap.put("mm", ""); paramsMap.put("nn", null); paramsMap.put("bb", "new"); //System.out.println("a==="+addParams(a, paramsMap)); //System.out.println("b==="+addParams(b, paramsMap)); //System.out.println("c==="+addParams(c, paramsMap)); //System.out.println("d==="+addParams(d, paramsMap)); System.out.println("f1==="+addParams(f, paramsMap)); System.out.println("f2==="+addParamsNotExist(f, paramsMap)); */ //System.out.println("g2="+getParamsMap(g)); } }
=======================
©Copyright 蕃薯耀 2021-01-22
http://fanshuyao.iteye.com/
相关推荐
Apache 官方 URLEncodedUtils.java 工具类,可以用来获取Url中的字段value值
在Java编程中,有时我们需要利用已有的C或C++库,这些库通常以动态链接库(Dynamic Link Library, DLL在Windows上,Shared Object, SO在Linux上)的形式存在。Java本身并不直接支持调用原生代码,但它通过Java ...
`RabbitmqUtil` 是一个专门为Java开发者设计的工具类,简化了与RabbitMQ交互的复杂过程,使得开发者能够更快速、更方便地发送和接收消息。 首先,我们来详细了解一下`RabbitmqUtil`工具类的主要功能: 1. **连接...
总结来说,Java中处理URL带请求参数(GET/POST)主要依赖`java.net`包下的类进行网络通信,而在Servlet环境中,通过`HttpServletRequest`提供的方法可以方便地获取请求的URL和参数。在实际应用中,这些基础知识对于...
这个名为"java短链接生成.zip"的压缩包文件提供了一个基于SpringBoot框架的Java实现,用于生成短链接。让我们深入探讨一下这个项目的核心知识点,以及如何利用它来创建和管理短链接。 首先,我们要了解SpringBoot。...
jedis的工具类,java代码写的,非常全面,jedis的工具类,java代码写的,非常全面jedis的工具类,java代码写的,非常全面jedis的工具类,java代码写的,非常全面jedis的工具类,java代码写的,非常全面jedis的工具类...
JAVA 根据Url 接口 获取文件名称和类型,亲测可用。输入参数地址即可。
在Java编程中,有时我们需要对一组参数按照字典顺序(ASCII码值从小到大)进行排序,例如在创建签名或构建URL查询字符串时。这里提供了一个名为`createSign`的方法,它接受一个`Map, Object>`类型的参数,并返回一个...
总结,Java解析WSDL文档获取具体的方法与参数涉及的主要知识点包括:XML解析(DOM)、JAX-WS框架、`javax.xml.ws.Service`类的使用,以及如何基于WSDL生成服务客户端代码。理解这些概念,将有助于开发和消费Web服务...
java判空工具类 可以判断字符串数组,字符串类型,List对象集合,Map集合map,object>,map和多个String参数,对象类型,是否为空。 java判断对象属性是否全部为空,只要有一个属性不为空,那么就不是所有的属性值都...
8. **封装工具类**:为了代码的可重用性和可维护性,可以将上述步骤封装成一个工具类方法,接受URL作为参数,返回文件流或处理后的结果。这样,在需要下载文件的地方,只需调用这个工具类即可。 在提供的压缩包文件...
### Java程序中加载动态链接库文件 #### 一、引言 在开发Java应用程序时,有时需要调用一些底层硬件接口或执行特定平台的操作,这些功能通常无法仅通过纯Java代码实现。这时,就需要借助于Java Native Interface ...
该工具类是Java编写下载即可使用,该工具类中有生成各种长度的订单号,有英文数字混合的,有数字的
- **构建HttpGet请求**:使用`HttpGet`类创建一个HTTP GET请求,指定要下载的URL作为参数。 - **设置请求头**(可选):如果URL需要身份验证或其他特定头信息,可以通过`setHeader()`方法添加。 - **执行请求**:...
在实际操作中,可能会遇到反爬虫策略,比如动态加载、JavaScript加密等,这时可能需要使用更复杂的工具,如Selenium或Puppeteer来模拟浏览器行为,或者利用浏览器插件如Postman来调试请求,以便找出正确构造请求的...
java磁力链接,本文包含概念及实例代码
使用微信接口制作的转短链接工具,需要有自己的微信测试号或者公众号生成的accesstoken,配置jdk环境变量才能使用(由于使用了exe4j打包,提示配置EXE_JAVA_HOME是和jdk环境变量一样的配置方法)
此工具可以对参数拦截并转义后提交到对应的处理类。 除了添加两个JsFilter.java和GetHttpServletRequestWrapper.java之外,需要在web.xml添加对应的配置。 <!-- 特殊字符过滤 --> <filter-name>sqlFilter ...
本项目涉及的"java调用C++动态链接库dll接口"是解决这种跨语言交互问题的一种方法,主要利用了Java Native Interface(JNA)这一技术。 JNA是Java平台的标准库,它允许Java代码直接调用本机库(如DLL或.so文件)的...
java信任SSL证书的工具类 忽略HTTPS请求的SSL证书,必须在openConnection之前调用