Java 从基本链接获取URL层次结构

Java 从基本链接获取URL层次结构,java,url,hierarchy,Java,Url,Hierarchy,在问我的问题(基本上就是标题所说的)之前,我想提供一些背景知识,以便更好地了解我的情况 我正在用Java编写一个小应用程序,主要是为了学术目的,但也考虑到一个非常具体的任务。这个应用程序所做的基本上是从一个基本URL开始构建一个URL层次结构,然后提供组织链接并对其执行一些操作的能力 想象一下以下URL: http://www.example.com http://www.example.com/sub001 http://www.example.com/sub002 http://www.ex

在问我的问题(基本上就是标题所说的)之前,我想提供一些背景知识,以便更好地了解我的情况

我正在用Java编写一个小应用程序,主要是为了学术目的,但也考虑到一个非常具体的任务。这个应用程序所做的基本上是从一个基本URL开始构建一个URL层次结构,然后提供组织链接并对其执行一些操作的能力

想象一下以下URL:

http://www.example.com
http://www.example.com/sub001
http://www.example.com/sub002
http://www.example.com/sub002/ultrasub
我希望我的程序在提供基本URL
http://www.example.com
(或
http://www.example.com/

在我的代码中,我有一个能够编码URL的类,并且我已经想到了一种验证它们的方法,我只是找不到一种方法来找出基本URL下的URL层次结构

有没有直接的方法,或者我只需要从基本URL下载文件,然后从文件中存在的相对链接和绝对链接开始构建层次结构

我并不是要求具体的代码,只是一个(某种程度上)完整的解释我可以采取什么方式来做,也许有一些骨架代码来指导我

此外,我将URL存储在
TreeMap
结构中,其中
布尔值
表示URL是否已被分析。我在快速浏览了Java7API规范之后选择了这种结构,但是您是否建议有哪种结构更适合这种特定用途


提前感谢:)

在HTTP协议中,无法请求给定URL下的所有URL。你真倒霉

一些协议(ftp://... 例如)确实有明确的机制

如果您请求一个“目录”,一些HTTP服务器将打印一个索引页,但不推荐这种做法,也没有多少服务器会这样做

底线是,为了确定服务器层次结构是什么,您必须遵循链接,即使这样,您也可能无法找到指向层次结构所有区域的链接

编辑:我应该补充一点,作为一个行为良好的网络管理员,您应该遵守您访问的任何服务器上的文件

编辑2:(在评论FTP机制之后) FTP协议有许多命令:。其中一个命令是:
NLIST
,它“返回指定目录中的文件名列表。” 在FTP协议URL的URL格式中以及在第3.2.2节中做出了特殊规定:

FTP url的url路径具有以下语法:
/…/;类型=

如果typecode为“d”,则以作为参数执行NLST(名称列表)命令,并将结果解释为文件目录列表

当我从命令行(而不是浏览器)尝试此操作时,可以看到效果:

type=d
我得到:

rolfl@home ~ $ curl 'ftp://sunsite.unc.edu/README;type=d'
HEADER.images
incoming
HEADER.html
pub
unc
README

出于好奇,在
ftp://...
cases,具体的机制是什么?这是针对许多不同主机的通用解决方案,还是您只对一个特定主机感兴趣?我对一个特定主机感兴趣,我的大学网站,因此我可以找到一种方法来自动检索教师提供的笔记,但是当我创建它的时候,我试图让它变得一般,因为学术部分(当然我对具体的大学案例更感兴趣)啊,好的。对于一个或几个特定主机,您可以检查它们是否发布站点地图。它通常链接在robots.txt中;或者可以在
/sitemap.xml
上找到。我会去看看。我发现的另一种方法(在与我的一些同事交谈后)是使用Google站点:www.xxx.yyy搜索选项来获取指定目录下的所有文件,但我仍在努力找出如何从Java程序中的Google搜索结果中获取所有URL
rolfl@home ~ $ curl 'ftp://sunsite.unc.edu/README;type=d'
HEADER.images
incoming
HEADER.html
pub
unc
README