`
小网客
  • 浏览: 1243709 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java基于url获取host的两种方法

 
阅读更多

需求:

基于url获取host,case如下:

http://snv.iteye.com/blog/1992991结果为snv.iteye.com

snv.iteye.com/blog/1992991结果为snv.iteye.com

https://snv.iteye.com/blog/1992991结果为snv.iteye.com

http://snv.iteye.html结果为“”

http://snv.iteye.htm结果为“”

snv.iteye.html结果为“”

teye.html结果为“”

http://www.iteye.com/blog/1992991结果为www.iteye.com

www.iteye.com/blog/1992991结果为www.iteye.com

https://www.iteye.com/blog/1992991结果为www.iteye.com

 

方法实现如下:

方法1:基于URI或者URL

依赖:

<dependency>
	<groupId>commons-lang</groupId>
	<artifactId>commons-lang</artifactId>
	<version>2.6</version>
</dependency>

代码:

private static String getHost(String url) {
	if (!(StringUtils.startsWithIgnoreCase(url, "http://") || StringUtils
			.startsWithIgnoreCase(url, "https://"))) {
		url = "http://" + url;
	}
	String returnVal = StringUtils.EMPTY;
	try {
		URI uri = new URI(url);
		returnVal = uri.getHost();
	} catch (Exception e) {
	}
	if ((StringUtils.endsWithIgnoreCase(returnVal, ".html") || StringUtils
			.endsWithIgnoreCase(returnVal, ".htm"))) {
		returnVal = StringUtils.EMPTY;
	}
	return returnVal;
}

 

方法2:基于正则

依赖:

<dependency>
	<groupId>commons-lang</groupId>
	<artifactId>commons-lang</artifactId>
	<version>2.6</version>
</dependency>

代码:

public static String getHost(String url) {
	if (!(StringUtils.startsWithIgnoreCase(url, "http://") || StringUtils
			.startsWithIgnoreCase(url, "https://"))) {
		url = "http://" + url;
	}

	String returnVal = StringUtils.EMPTY;
	try {
		Pattern p = Pattern.compile("(?<=//|)((\\w)+\\.)+\\w+");
		Matcher m = p.matcher(url);
		if (m.find()) {
			returnVal = m.group();
		}

	} catch (Exception e) {
	}
	if ((StringUtils.endsWithIgnoreCase(returnVal, ".html") || StringUtils
			.endsWithIgnoreCase(returnVal, ".htm"))) {
		returnVal = StringUtils.EMPTY;
	}
	return returnVal;
}

 

0
1
分享到:
评论
4 楼 小网客 2013-12-26  
diggywang 写道
小网客 写道
diggywang 写道
不太完善
如netty.io
m-team.cc
这种你就算不出来了

能算出来,你试试

呃,是说的不对,第一次没仔细看...
但URI只解释协议头(可选)和第一个分隔符之间的内容,你的方法只是把这中间内容最后做个处理,看是不是html、htm结尾,但不能判断域名有效性(或后缀有效性,如svn.iteye.xxoo,但实际是没有xxoo域名的)

总之还是看实际需要了。

恩 ,我获取完成之后做了下过滤,因为单纯的ip也是可以校验同构的,过滤条件为可列的顶级域名后缀
3 楼 diggywang 2013-12-26  
小网客 写道
diggywang 写道
不太完善
如netty.io
m-team.cc
这种你就算不出来了

能算出来,你试试

呃,是说的不对,第一次没仔细看...
但URI只解释协议头(可选)和第一个分隔符之间的内容,你的方法只是把这中间内容最后做个处理,看是不是html、htm结尾,但不能判断域名有效性(或后缀有效性,如svn.iteye.xxoo,但实际是没有xxoo域名的)

总之还是看实际需要了。
2 楼 小网客 2013-12-26  
diggywang 写道
不太完善
如netty.io
m-team.cc
这种你就算不出来了

能算出来,你试试
1 楼 diggywang 2013-12-26  
不太完善
如netty.io
m-team.cc
这种你就算不出来了

相关推荐

    基于URL的Java网络编程

    综上所述,`java.net.URL`类及其相关方法为基于URL的Java网络编程提供了强大的支持,使得开发人员能够方便地实现对网络资源的访问和操作。通过对URL的理解和掌握,开发人员可以更加灵活地利用Java进行网络编程。

    java中URL以及URLConnection类的使用

    在JDK6.0版本中,URL类提供了6种构造方法,这里介绍两种常用的构造方法: 1. `URL(String spec)`:这个构造方法使用一个字符串(URL地址)来创建一个URL对象。例如,`new URL("***")`可以根据提供的URL字符串来创建...

    使用使用使用

    首先,创建`URL`对象可以通过两种方式: 1. 调用`URI`类的`toURL()`方法,前提是已经有一个`URI`对象。 2. 直接通过`URL`类的构造函数。最常见的是`URL(String url)`,它接受一个字符串形式的URL作为参数。如果URL不...

    Java 获取网络302重定向URL的方法

    本文将详细介绍两种在Java中获取302重定向URL的方法。 ### 方法一:使用`HttpURLConnection` `HttpURLConnection`是Java内置的HTTP客户端,它提供了一种低级的API来处理HTTP请求。以下是使用`HttpURLConnection`...

    Java网络编程基础-InetAddress类与URL类

    你可以通过InetAddress类的getByName()方法获取与特定主机名关联的IP地址,或者通过getAllByName()获取所有可用的IP地址。 下面是一些InetAddress类的关键方法: 1. `getLocalHost()`: 返回本地主机的InetAddress...

    Java软件开发实战 Java基础与案例开发详解 19-4 URL和URL Connection类 共10页.pdf

    - `getHost()`:获取URL的主机名。 - `getPort()`:获取URL的端口号。 - `getPath()`:获取URL的路径部分。 - `getFile()`:获取URL的文件名部分。 - `getRef()`:获取URL的片段标识符。 - `getQuery()`:获取URL的...

    JAVA网络编程

    通过这些方法,我们可以方便地解析和获取URL的各种组成部分,以便进一步处理。 #### 总结 Java网络编程涉及多种技术,包括TCP和UDP协议的选择、基于URL的网络访问等。选择合适的协议和方法能够有效提高程序的性能...

    面向对象的程序设计-java张白一第三版第15章.ppt

    2. URL类:java.net.URL类提供了四种构造方法来创建URL对象,分别是:(1)根据String表示形式创建URL对象;(2)根据指定的protocol、host、port号和file创建URL对象;(3)根据指定的protocol、host、port号和file...

    Android检测url地址是否可达的两种方法

    本文将介绍两种在Android环境中检查URL可达性的方法。 **方法一:使用HttpURLConnection** 这种方法是通过建立一个HTTP连接来检查URL是否有效。以下是具体的步骤: 1. 创建`URL`对象,传入待检测的URL地址。 2. ...

    php结合java解析二维码图片里的URL地址

    在IT领域,二维码作为一种高效的信息传递方式,广泛应用于各种场景,如网站链接、电子名片、支付凭证等。本文将深入探讨如何使用PHP结合Java来解析二维码图片中的URL地址。这个过程涉及两个主要步骤:首先使用Java的...

    java网络编程 socket

    在Java中,Socket和DatagramSocket是两种主要的网络通信机制,分别对应于TCP和UDP两种传输协议。 首先,让我们深入了解Socket。Socket,也称为套接字,是基于TCP协议的,它提供了一种可靠的、面向连接的通信方式。...

    第14章Java网络编程ppt课件.ppt

    一旦有了URL对象,我们可以通过调用`openStream()`方法获取一个指向资源的`InputStream`,进而可以读取远程服务器上的数据。这样,客户端就可以从服务器获取资源信息。 3. **InetAddress类**: 这个类用于处理...

    java连接Oracle数据库详解

    有两种方式可以实现这一点: 1. **使用`Class.forName()`方法**: ```java Class.forName("oracle.jdbc.driver.OracleDriver"); ``` 这行代码的作用是通过反射机制加载Oracle JDBC驱动。需要注意的是,如果类...

    第13章-Java网络编程-Java面向对象程序设计教程-微课视频版-程杰-清华大学出版社.pptx

    TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)是传输层的两种主要协议。TCP提供面向连接的服务,确保数据的可靠传输,而UDP则是一种无连接协议,注重效率但不保证数据的可靠性。 在Java中...

    net.java.tar.gz_JAVA 域名

    本文将深入探讨JAVA语言中处理域名和IP地址的相关知识,以及如何实现这两种上网方式。 首先,我们要理解域名和IP地址的基本概念。IP地址是互联网上设备的唯一标识,通常表现为一组数字,如192.168.1.1。然而,为了...

    java ppt

    - 构造URL对象通常有两种方式: - `new URL(String spec)`:通过一个包含完整URL信息的字符串创建对象。 - `new URL(String protocol, String host, String file)`:分别指定协议、主机和资源路径。 2. **读取...

    java中Servlet Cookie取不到值原因解决办法

    解决办法有两种: 第一种方法是修改Servlet的domain设置,使其与服务器的域名匹配。例如,可以使用String host=request.getHeader("host");然后将host设置为Cookie的domain。 第二种方法是使用request.getHeader(...

    java-Teradata-MySQL.rar_JAVA连接teradata_teradata_teradata java_te

    Teradata和MySQL则是两种广泛应用的关系型数据库管理系统(RDBMS)。Teradata以其高性能、可扩展性和大数据处理能力而闻名,常用于大型企业的数据仓库解决方案。而MySQL则以轻量级、易于使用和开源特性深受开发者...

Global site tag (gtag.js) - Google Analytics