URL 参数解析方法:
-
httpclient org.apache.http.client.utils.URLEncodedUtils
URLEncodedUtils.parse(query, Charset.forName("UTF-8"));
-
jettyUtil org.eclipse.jetty.util.UrlEncoded
MultiMap<String> values = new MultiMap<String>(); UrlEncoded.decodeTo(query, values, "UTF-8", 1000);
-
tomcat org.apache.catalina.util.RequestUtil
Map<String, String> values = new HashMap<String, String>(); RequestUtil.parseParameters(values, query, "UTF-8");
-
regex 正则表达式
String u = URLDecoder.decode(url, "UTF-8"); for (String s : parameters) { Pattern p = Pattern.compile(s + "=([^&]*)(&|$)"); Matcher m = p.matcher(u); if (m.find()) { m.group(1); } }
-
split 使用String 的split 方法对 URL 进行分割,然后用equals 匹配对应的 参数
String u = URLDecoder.decode(url, "UTF-8"); for (String s : parameters) { String[] a = new String[100]; if (u.indexOf(s) != -1) { a = (u.substring(u.indexOf(s))).split("&"); a[0].split("="); } }
前三者是 httpclient, jetty, tomcat 使用的 URL 解析工具。Split 方法是最简单 也是最直观的解析方法,regex 则使用了正则表达式去匹配参数。
性能比较
用这五种方法分别解析同一个URL 100000遍,得到如下的数据。考虑到 Java 的代 码缓存特性,共运行4遍这样的测试,测试数据取最后一次的结果。
---first---
httpclient: 3063
jettyUtil: 1767
tomcat: 2405
regex: 9226
split: 22905
---second---
httpclient: 2766
jettyUtil: 1618
tomcat: 2229
regex: 9025
split: 23661
---third---
httpclient: 2799
jettyUtil: 1632
tomcat: 2251
regex: 8761
split: 23476
---fouth---
httpclient: 2989
jettyUtil: 1634
tomcat: 2251
regex: 8895
split: 23571
在最后一组数据中,我们可以看到 jettyUtil 的性能最高,split 和 regex 的方法性 能较差。
总结
jettyUtil 解析URL的性能在五种中最高,如果我们在项目中需要解析 URL ,应该 尽可能的考虑使用 jettyUtil 来解析。
参考链接
- 本测试的代码 https://gist.github.com/hellojinjie/5651936
- Tomcat RequestUtil 的代码http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/util/RequestUtil.java?view=markup
- jettyUtil UrlEncoded 的代码 http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/jetty-util/src/main/java/org/eclipse/jetty/util/UrlEncoded.java
- httpclient URLEncodedUtils 的代码 https://svn.apache.org/repos/asf/httpcomponents/httpclient/tags/4.0-beta1/module-client/src/main/java/org/apache/http/client/utils/URLEncodedUtils.java
URL 参数解析方法:
-
httpclient org.apache.http.client.utils.URLEncodedUtils
URLEncodedUtils.parse(query, Charset.forName("UTF-8"));
-
jettyUtil org.eclipse.jetty.util.UrlEncoded
MultiMap<String> values = new MultiMap<String>(); UrlEncoded.decodeTo(query, values, "UTF-8", 1000);
-
tomcat org.apache.catalina.util.RequestUtil
Map<String, String> values = new HashMap<String, String>(); RequestUtil.parseParameters(values, query, "UTF-8");
-
regex 正则表达式
String u = URLDecoder.decode(url, "UTF-8"); for (String s : parameters) { Pattern p = Pattern.compile(s + "=([^&]*)(&|$)"); Matcher m = p.matcher(u); if (m.find()) { m.group(1); } }
-
split 使用String 的split 方法对 URL 进行分割,然后用equals 匹配对应的 参数
String u = URLDecoder.decode(url, "UTF-8"); for (String s : parameters) { String[] a = new String[100]; if (u.indexOf(s) != -1) { a = (u.substring(u.indexOf(s))).split("&"); a[0].split("="); } }
前三者是 httpclient, jetty, tomcat 使用的 URL 解析工具。Split 方法是最简单 也是最直观的解析方法,regex 则使用了正则表达式去匹配参数。
性能比较
用这五种方法分别解析同一个URL 100000遍,得到如下的数据。考虑到 Java 的代 码缓存特性,共运行4遍这样的测试,测试数据取最后一次的结果。
---first---
httpclient: 3063
jettyUtil: 1767
tomcat: 2405
regex: 9226
split: 22905
---second---
httpclient: 2766
jettyUtil: 1618
tomcat: 2229
regex: 9025
split: 23661
---third---
httpclient: 2799
jettyUtil: 1632
tomcat: 2251
regex: 8761
split: 23476
---fouth---
httpclient: 2989
jettyUtil: 1634
tomcat: 2251
regex: 8895
split: 23571
在最后一组数据中,我们可以看到 jettyUtil 的性能最高,split 和 regex 的方法性 能较差。
总结
jettyUtil 解析URL的性能在五种中最高,如果我们在项目中需要解析 URL ,应该 尽可能的考虑使用 jettyUtil 来解析。
参考链接
- 本测试的代码 https://gist.github.com/hellojinjie/5651936
- Tomcat RequestUtil 的代码http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/util/RequestUtil.java?view=markup
- jettyUtil UrlEncoded 的代码 http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/jetty-util/src/main/java/org/eclipse/jetty/util/UrlEncoded.java
- httpclient URLEncodedUtils 的代码 https://svn.apache.org/repos/asf/httpcomponents/httpclient/tags/4.0-beta1/module-client/src/main/java/org/apache/http/client/utils/URLEncodedUtils.java
相关推荐
Java URL转换工具是一种用于解析和处理URL的程序,它能够帮助开发者获取URL背后的真实地址,尤其是在面对重定向、参数编码等情况时。在Web开发中,URL(Uniform Resource Locator)是互联网资源的统一地址,它包含了...
针对上述问题,我们可以编写一个自定义的解码函数`URLDecode`,该函数能够将经过编码的URL参数转换回原始的中文字符。下面将详细介绍此函数的实现细节。 #### 解码函数实现 ```vb Function URLDecode(enStr) Dim ...
以下是一些常见的MySQL JDBC URL参数: 1. **user** 和 **password**: 指定连接数据库的用户名和密码,通常在连接字符串之外设置,以避免明文暴露。 ```text jdbc:mysql://localhost:3306/mydb?user=myusername...
总的来说,"Js日历控件传递url参数"涉及到客户端JavaScript的事件处理和URL操作,以及服务器端ASP的参数解析和数据库查询。通过这种技术结合,我们可以创建一个能够动态筛选内容的交互式日历,提供更个性化的浏览...
这通常涉及构造一个protobuf消息(包含请求参数),发送到Web服务的URL,然后接收并解析服务返回的响应。 5. **HTTP请求与响应**:在这个过程中,pb客户端会构建一个HTTP请求,可能包含POST或GET方法,以及必要的...
1. **快速解析**:`jurl`库设计时考虑了性能,它提供了快速的URL解析功能,可以高效地分解URL的各个组成部分,如协议、主机、端口、路径、查询参数等。 2. **UTF-8编码支持**:在处理URL时,字符编码是一个重要的...
**概念解释**:QueryString是一种非常基础且常用的数据传递方式,它通过URL后面添加参数的形式来进行数据传输。这种方式简单易用,但是由于所有参数都明文显示在URL上,因此不太适合传递敏感信息。 **优点**: - ...
下面我们将基于上述基础知识,介绍几种常用的获取URL参数的方法: ##### 方法一:正则表达式匹配 这种方法是通过编写正则表达式来匹配URL中的特定参数。给出的示例代码正是采用这种方式: ```javascript function...
1. **URL重写的基本原理**:解释URL是如何被解析和处理的,以及如何通过服务器配置或编程来改变URL的显示形式。 2. **URL重写的重要性**:阐述优化URL对于用户体验、搜索引擎优化、网站可维护性等方面的好处。 3. ...
### JavaScript 添加 URL 参数知识点详解 在 Web 开发中,经常需要动态地修改 URL 地址中的查询参数。本文档详细介绍了如何使用 JavaScript 来添加或更新 URL 的查询参数,并提供了完整的示例代码。 #### 一、核心...
以下是对"postgresql参数解析"的详细说明。 1. **服务器配置文件** PostgreSQL的主配置文件通常名为`postgresql.conf`,这是设置数据库服务器参数的主要途径。在描述中提到的`postgresql 参数注释.conf`可能是这个...
7. **性能优化**: 由于直接操作内存结构而非字符串,Boost.URL库在处理大量URL时能提供良好的性能。 8. **错误处理**: 提供清晰的错误信息,帮助开发者快速定位和修复问题。 9. **代码示例和文档**: Boost.URL库...
Flex,作为一种基于Adobe Flash的富互联网应用开发框架,能够创建高性能、跨平台的应用程序。然而,Flex程序如何从HTML容器中获取URL参数值,成为了一个重要的技术知识点。 ### Flex程序与HTML容器间的URL参数传递 ...
URL重写是Web开发中的一种技术,主要用于优化和管理网站的URL结构,使其更符合搜索引擎优化(SEO)标准,提高用户体验,并便于服务器管理和应用程序处理。这个技术主要涉及到服务器配置、HTTP请求处理以及URL路径与...
标题 "URL 重写类 url class" 涉及的核心技术是 URL 重写,这是一种优化网站 URL 结构,使其更美观、更易读的方法。在网页开发中,URL 重写通常用于实现 SEO(搜索引擎优化)友好和用户友好的网址。通过 URL 重写,...
以上介绍了如何使用Java通过JDBC连接不同类型的数据库,并详细解释了各个数据库连接的配置参数。在实际应用中,根据不同的数据库类型选择合适的驱动程序,并正确设置URL、用户名、密码以及其他连接参数是非常重要的...
通过比较不同搜索结果中这部分共享密文后的不同部分,可以推断出这些不同的部分可能对应着目标URL的不同字符。在例子中,`6427d385`似乎与`www.`这个域名前缀有固定的关系,表明可能每两个密文字符对应URL的一个...
本文将详细介绍如何利用Nginx结合Lua脚本来实现一个基于URL参数的动态代理系统。 #### 技术背景 - **Nginx**:是一款高性能的HTTP和反向代理Web服务器,同时也是IMAP/POP3/SMTP代理服务器。Nginx以其出色的稳定性...
文件“Common”可能是用于实现这些功能的通用代码或工具集,可能包含了分页逻辑、存储过程调用和URL参数解析的代码片段。 总之,掌握分页控件的实现、存储过程的运用以及URL参数的传递,是构建高效、安全且用户友好...