龙空技术网

Java 验证 URL的合法性

小王子向着标竿直跑 184

前言:

目前看官们对“apacheurl中文”可能比较看重,小伙伴们都想要分析一些“apacheurl中文”的相关知识。那么小编也在网上网罗了一些关于“apacheurl中文””的相关知识,希望我们能喜欢,朋友们快快来了解一下吧!

概述

URL 代表统一资源定位器,它是网络上唯一资源的地址。

在本教程中,我们将讨论使用 Java 验证 URL。 在现代 Web 开发中,通过应用程序读取、写入或访问 URL 非常常见。 因此,成功的验证可确保 URL 有效且合规。

有不同的库用于验证 URL。 我们将讨论两个类——JDK 中的 java.net.Url 和 Apache Commons 库中的 org.apache.commons.validator.routines.UrlValidator。

使用 JDK 验证 URL

让我们看看如何使用 java.net.URL 类验证 URL:

    static boolean isValidURL(String url){        try {            new URL(url).toURI();            return true;        } catch (MalformedURLException e) {            return false;        } catch (URISyntaxException e) {            return false;        }    }

在上述方法中,new URL(url).toURI()方法 尝试使用 String 参数创建 URI。 如果传递的字符串不符合 URL 语法,则抛出异常。

内置 URL 类在输入 String 对象中发现格式错误的语法时会引发 MalformedURLException。 当 String 的格式不兼容时,内置类会引发 URISyntaxException。

现在,让我们验证我们的方法:

@Testpublic void testIsValidUrl() {    assertFalse(ValidateUrlApplication.isValidURL(" java-%%$^&& iuyi"));    assertTrue(ValidateUrlApplication.isValidURL(";));}

执行单元测试,显示绿条通过:

我们必须了解 URL 和 URI 之间的区别。 toURI() 方法在这里很重要,因为它确保任何符合 RC 2396 的 URL 字符串都被转换为 URL。 但是,如果我们使用 new URL(String value),它不能确保创建的 URL 是完全兼容的。

让我们看一个例子,如果我们只使用 new URL(String url),许多不符合要求的 URL 将通过验证:

static boolean isValidUrlByNewURL(String url) {    try {        // it will check only for scheme and not null input        new URL(url);        return true;    } catch (MalformedURLException e) {        return false;    }}

让我们看看上述方法如何通过一些测试来验证不同的 URL:

@Testpublic void testIsValidUrlByNewURL() {    assertTrue(ValidateUrlApplication.isValidUrlByNewURL(";));    assertTrue(ValidateUrlApplication.isValidUrlByNewURL(" java-%%$^&& iuyi"));    assertFalse(ValidateUrlApplication.isValidUrlByNewURL(""));}

执行单元测试,绿条通过

在上述方法中,new URL(url) 只检查有效协议和空字符串作为输入。 因此,如果协议是正确的,即使它不符合 RC 2396,它也会返回一个 URL 对象。

因此,我们必须使用 new URL(url).toURI() 来确保 URL 有效且合规。

使用 Apache Commons 验证 URL

我们需要将 commons-validator 依赖项导入 pom.xml 文件:

		<dependency>			<groupId>commons-validator</groupId>			<artifactId>commons-validator</artifactId>			<version>1.7</version>		</dependency>

让我们使用这个库中的 UrlValidator 类来验证:

static boolean isValidURLByUrlValidator(String url){    UrlValidator validator = new UrlValidator();    return validator.isValid(url);}

在上述方法中,我们创建了一个 URLValidator,然后使用 isValid() 方法检查 String 参数的 URL 有效性。

让我们检查一下上述方法对于不同输入的行为:

@Testpublic void testIsValidURLByUrlValidator(){    assertFalse(isValidURLByUrlValidator(" java-%%$^&& iuyi"));    assertTrue(isValidURLByUrlValidator(";));}

URLValidator 允许我们微调条件以验证 URL 字符串。例如,如果我们使用重载的构造函数 UrlValidator(String[] scheme),它只会为提供的方案列表(http、https、ftp 等)验证 URL。

同样,还有一些其他标志 – ALLOW_2_SLASHES、NO_FRAGMENT 和 ALLOW_ALL_SCHEMES 可以根据要求进行设置。我们可以在官方文档中找到该库提供的所有选项的详细信息。

结论

在本文中,我们学习了两种不同的方法来验证 URL。我们还讨论了 URL(String url) 和 URL.toURI() 之间的区别。

如果我们只需要验证协议和非空字符串,那么我们可以使用 URL(String url) 构造函数。但是,当我们必须验证并通过合规性检查时,我们需要使用 URL(url).to URI()。

此外,如果我们添加 Apache Commons 依赖项,我们可以使用 URLValidator 类来执行验证,并且该类中还有其他可用选项来微调验证规则。

标签: #apacheurl中文