如何找出网络服务器显示的默认页面的名称?

时间:2011-03-14 15:45:42

标签: java http-headers urlconnection directoryindex

我正在Java应用程序中通过I / O-streaming下载各种文件。只要我有一个包含文件名的完整URL路径,接收和保存这些文件就可以正常工作,但是如何找到索引文件的名称(例如,在Apache的DirectoryIndex中定义)域? HTTP标头不提供此信息,URLConnection方法也不提供。

非常感谢!

好吧 S上。

2 个答案:

答案 0 :(得分:5)

据我所知,无法检索此信息。 HTTP规范没有提供它,我认为这不是一件坏事。您的客户请求URL“/”,由Web服务器决定如何处理,没有义务返回文件名。

值得指出的是(我确定你已经知道了,但以防万一)因为网址看起来像/somedir/somefile.html,这并不意味着实际< / em>正在提供的文件。它可以通过代理服务到另一个主机,mod_rewrite等 - 换句话说,该名称是任意的,并不一定与磁盘上的物理名称有任何关系。

简而言之,我认为您最好的选择是选择默认文件名,例如对于那些情况index.html并坚持下去。

答案 1 :(得分:1)

唯一的出路是:

  1. 检查Content-Disposition标头并使用它来生成文件名。如果服务器正在提供文件,则会设置此标头。例如。 http://server:port/DownLoadServlet URL可能会设置此标头以将名称指定为“statement.pdf”。
  2. 如果缺少此标头,请使用启发式算法生成文件名。这就是浏览器生成Doc [10] .pdf Doc [12] .pdf等文件名的方法。
  3. 使用内容类型标头(如果可用)来猜测文件扩展名。