4

Java中规范化URL三种方式

 7 months ago
source link: https://www.jdon.com/72365.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Java中规范化URL三种方式

统一资源定位器 (URL)是 Web 开发的重要组成部分,因为它们有助于定位和获取Internet上的资源。然而,URL 可能不一致或格式不正确;这可能会导致加工和获取所需材料出现问题。

URL规范化将给定的数据转换为规范形式,确保一致性并促进可操作性。

在本教程中,我们将研究在 Java 中标准化 URL 的不同技术。

手动标准化
执行手动标准化涉及应用自定义逻辑来标准化 URL。 此过程包括删除无关元素,例如不必要的查询参数和片段标识符,以将 URL 提炼为其基本核心。假设我们有以下 URL:

https://www.example.com:8080/path/to/resource?param1=value1&m2=value2fragment

规范化的 URL 应如下所示:

https://www.example.com:8080/path/to/resource

1、使用 Apache Commons Validator
Apache Commons Validator 库中的 UrlValidator 类是一种用于验证和规范化 URL 的便捷验证方法。首先,我们应该确保我们的项目包含 Apache Commons Validator依赖项,如下所示:

<dependency>
    <groupId>commons-validator</groupId>
    <artifactId>commons-validator</artifactId>
    <version>1.8.0</version>
    <scope>test</scope>
</dependency>

现在,我们准备实现一个简单的 Java 代码示例:

String originalUrl = "https://www.example.com:8080/path/to/resource?param1=value1&param2=value2fragment";
String expectedNormalizedUrl = "https://www.example.com:8080/path/to/resource";
@Test
public void givenOriginalUrl_whenUsingApacheCommonsValidator_thenValidatedAndMaybeManuallyNormalized() {
    UrlValidator urlValidator = new UrlValidator();
    if (urlValidator.isValid(originalUrl)) {
        String normalizedUrl = originalUrl.split("\\?")[0];
        assertEquals(expectedNormalizedUrl, manuallyNormalizedUrl);
    } else {
        fail(originalUrl);
    }
}
在这里,我们首先从 UrlValidator 实例化一个对象。稍后,我们使用isValid()方法来确定原始 URL 是否符合前面提到的验证规则

如果 URL 被证明是合法的,我们会手动对其进行标准化并删除查询参数和片段,尤其是“?”之后的所有内容。最后,我们使用assertEquals()方法来验证expectedNormalizedUrl和normalizedUrl的等价性。

2、利用Java的URI类
在 java.net 包中建立 Java URI类提供了管理 URI 的其他功能,包括规范化。 让我们看一个简单的例子:

@Test
public void givenOriginalUrl_whenUsingJavaURIClass_thenNormalizedUrl() throws URISyntaxException {
    URI uri = new URI(originalUrl);
    URI normalizedUri = new URI(uri.getScheme(), uri.getAuthority(), uri.getPath(), null, null);
    String normalizedUrl = normalizedUri.toString();
    assertEquals(expectedNormalizedUrl, normalizedUrl);
}
在此测试中,我们将originalUrl传递给URI对象,并通过提取和重新组装特定组件(例如方案、权限和路径)来派生规范化的URI 。

3、使用正则表达式
正则表达式是 Java 中 URL 规范化的一种非常有用的机制。它们使您能够指定许多与 URL 匹配的模式和转换,并根据您的需要进行更改。这是一个简单的代码示例:

@Test
public void givenOriginalUrl_whenUsingRegularExpression_thenNormalizedUrl() throws URISyntaxException, UnsupportedEncodingException {
    String regex = "^(https?://[^/]+/[^?#]+)";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(originalUrl);
    if (matcher.find()) {
        String normalizedUrl = matcher.group(1);
        assertEquals(expectedNormalizedUrl, normalizedUrl);
    } else {
        fail(originalUrl);
    }
}
在上面的代码示例中,我们首先创建一个与URL 的方案、域和路径组件相匹配的正则表达式模式。然后,我们将此模式转换为表示正则表达式的Pattern对象。此外,我们使用Matcher将原始 URL 与给定模式进行匹配。

此外,我们利用matcher.find()方法来查找输入序列中与 regex 定义的模式匹配的下一个子序列。如果matcher.find()方法返回 true,则matcher.group(1)会取出与regex匹配的子字符串。在这种情况下,它专门捕获正则表达式中第一个捕获组的内容(用括号表示),这被认为是规范化的 URL。

结论
总之,我们探索了几种方法,例如手动规范化、Apache Commons Validator 库、Java 的 URI 类以及 Java 中 URL 规范化的正则表达式。


Recommend

  • 45

    依然在学习node的艰辛过程中,最近学习了http相关的知识,学到了东西当然第一时间就来和大家分享分享,今天呢就教大家来看看利用node中的http模块去实现不同的缓存策略!!! 我们都知道,对于我们前端开发来说,缓存是一个十分重要的东西,即希望用户不能每次请

  • 56
    • www.sdnlab.com 5 years ago
    • Cache

    kubernetes三种打开方式

    作者简介:好好先生 kubernetes是容器管理编排引擎,是继openstack之后又一个优秀的云计算系统。kubernetes有着灵活,快速,健壮等特点,同时全面拥抱微服务架构,是当前容...

  • 61
    • 掘金 juejin.im 5 years ago
    • Cache

    vue 组件的三种使用方式教程

    在vue angular react三大前端框架的大前端时代。许多人选择了vue,在 github 上的star,vue已经超过react的数量了。虽然star并不能代表vue更强,不过在发展速度上看来,vue确实很快。 在模块化的前端时代,万物皆组件,v

  • 66
    • www.coderqi.com 5 years ago
    • Cache

    iOS设置字体的三种方式

    有时候项目需要显示一些非系统的字体达到一些UI的效果,目前设置字体有三种方式,默认方式、bundle方式,coreText方式。 1 默认方式 这种方式就是正常的字体设置方式 label.font = [UIFont fontwithname...

  • 42

    该文章不存在或者被删除 ...

  • 3
    • note.qidong.name 2 years ago
    • Cache

    让DRF的URL支持前缀的一种方式

    让DRF的URL支持前缀的一种方式 2022-03-08 17:55:31 +08  字数:1023  标签: Python

  • 3
    • www.51cto.com 2 years ago
    • Cache

    三种获取URL参数值的方法

    三种获取URL参数值的方法 作者:天行无忌 2022-09-16 09:56:18 如果在前端处理任何业务或请求逻辑,了解如何从 URL 中检索查询字符串值非常重要。本文分享三种从 URL 获取参数的方法。 在 URL 中,查询参...

  • 3
    • www.51cto.com 1 year ago
    • Cache

    Java实现代理模式的三种方式

    Java实现代理模式的三种方式 作者:顽石九变 2022-11-03 08:44:24 代理模式是项目中常用的一种设计模式。提供了间接访问目标对象的一种方式;即通过代理对象访问目标对象。这样做的好处是,可以在不改变原有目标对...

  • 5
    • surest.cn 1 year ago
    • Cache

    js 模拟点击方式打开URL

    js 模拟点击方式打开URL Published on Nov 29, 2022 in with 0 comment const ope...

  • 5

    Elasticsearch 是一个基于 Lucene 实现的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK