2011-11-09 9 views
0

以下のURLが与えられたときにそのディレクトリ/ファイルを再帰的に列挙するJavaクライアントアプリケーションを作成する必要があります。私は、既知のタイムスタンプからの変更にのみ関心があるので、最後に変更されたタイムスタンプを取得する必要もあります。JavaクライアントアプリケーションからHTTPサーバー上のディレクトリ/ファイルを列挙する

http://www.myserver.com/testproduct/ 

たとえば、次のものがサーバー上に存在するとします。

http://www.myserver.com/testproduct/red/file1.txt 
http://www.myserver.com/testproduct/red/file2.txt 
http://www.myserver.com/testproduct/red/black/file3.txt 
http://www.myserver.com/testproduct/red/black/file4.txt 
http://www.myserver.com/testproduct/orange/anotherfile.html 
http://www.myserver.com/testproduct/orange/mymovie.avi 
http://www.myserver.com/testproduct/readme.txt 

私は、指定されたURLから始まる(http://www.myserver.com/testproduct/)それぞれの最終更新タイムスタンプと一緒に再帰的にその下のディレクトリとファイルを列挙する必要があります。ディレクトリ/ファイルのリストを取得したら、タイムスタンプとその他のクライアントサイドフィルタに基づいてファイルの一部を選択的にダウンロードします。

サーバーでApacheが実行されており、ディレクトリの一覧を表示できるように構成されています。

私はApacheのHttpClient Javaクラスを使用していくつかの実験を行いましたが、http://www.myserver.com/testproduct/の内容をリクエストすると、HTMLファイルが返ってきます。フォルダの内容を示すHTMLページ。

これは唯一の方法ですか?つまり、生成されたHTMLページをスクラップしてファイルとディレクトリを解析しますか?また、返されたHTMLに基づいてディレクトリからファイルを確実に区別することができないと確信していません

結果のHTMLをスクラブしないでディレクトリやファイルを列挙する方法がありますか?

+1

アプリケーションでクエリを実行したときに、より読みやすいディレクトリリストを返すようにApacheを設定できます。 HTTP自体にはディレクトリを読み取る手段が指定されていません。しかし、HTTPステータスコード304 "Not modified"と共に、選択的にダウンロードするのに適した、要求されたオブジェクトの最終更新時刻を返すことができる "Last-Modified"ヘッダーフィールドがあります。 – JimmyB

+0

ありがとう!現在設定されているので、最後に変更されたフィールドが表示されます。私はちょうどそのページを掻くことが一般的には適用できないかもしれないと心配していました。 – Nerdtron

答えて

1

サーバーを制御できる場合は、WebDAVを実装するように依頼する必要があります。これは、まさにそのようなシナリオのためのものです。 Apacheにはmod_davという設定が必要です。 Javaクライアント側では、this question

+0

ありがとう!それが私のために働くかどうかを決定するためにwebdavで読んで行く必要があるように聞こえる。 – Nerdtron

1

を参照してください。アプリケーションがサーバーと同じマシンにない場合、探しているデータを削り取ることはあまりありません。サーバー上に存在するすべての製品について知っていれば、各ファイルに対してWebリクエストを発行するだけで、取得できます。ただし、ルートパスまたは単一の製品ページのみが分かっている場合は、基本的にWebサイトをクロールし、同じWebサイトから他の製品へのリンクを抽出する必要があります。クロールするURLを選択するのは、同じホスト上にあり、以前は見たことがない/クロールしていない場合のみです。例えば

http://www.myserver.com/testproduct/

http://www.myserver.com/testproduct/red/file1.txt 
http://www.myserver.com/testproduct/red/file2.txt 
http://www.devboost.com/ 
http://www.myspace.com/ 
http://blog.devboost.com/ 
http://beta.devboost.com/ 
http://www.myserver.com/testproduct/red/file2.txt 

へのリンクが含まれている場合、あなたはホストwww.myserver.comで始まらない任意のリンクを無視します。

ディレクトリとタイムスタンプについてコメントで指摘されているようにHTTPはディレクトリブラウジングをサポートしていません。ファイルが最後に変更されたときにタイムスタンプを取得しようとしている場合、そのファイルも不運です。

さらに重要なことは、ファイルが動的コンテンツを生成しているときにファイルが変更されていないことを知っていることがどれほど有益なのか分かりません。たとえば、製品ページの表示を担当するファイルが長期間に渡って変更されていない可能性が非常に高いです。通常、同じファイルは、データベース内のすべての製品を表示する責任があり、MVC型フレームワークの一部である場合は責任を負います。つまり、HTMLを解析して気になる変更があるかどうかを判断し、それに応じてファイルを処理する必要があります。

+0

ありがとう!外部リンクを無視することについての良い点。今私はちょうどかわすか、webdavをするかどうかを決定する必要があります – Nerdtron

関連する問題