2

RSS フィードを動的に作成してサーバーに保存しようとしています。作成した RSS フィードにアクセスするには、ブラウザから URL を入力するだけです。そうすることは可能ですか?

FileOutputStream("WebContent/filename.xml")RSS フィードを作成できますが、それを使用してサーバーに保存しようとすると、FileNotFoundException. 私のアプローチは正しいですか、それともサーバーにファイルを保存し、単純な URL を使用してアクセスする他の方法はありますか?

Spring スケジューラを使用して毎分アプリケーションを実行し、RSS フィードを動的に作成しています。

4

5 に答える 5

4

通常、そのようなものを「生成して保存」することはありません。動的にサービスを提供し、それらをキャッシュします (http キャッシュ (クライアント用) と内部キャッシュ (複数回フェッチしないようにするため) の両方)。Spring 3.1 キャッシュの抽象化は、それを簡単に可能にします。

サーバーにファイルを保存するには、webapp のルート ディレクトリが何であるかを知る必要があります。で入手できますrequest.getServletContext().getRealPath("/")。これらのファイルはアンデプロイ後に失われることに注意してください。そのため、アプリ外の絶対的な場所に保存することを検討してください。また、不発弾戦のアーカイブには書き込めませんのでご注意ください。もう1つのこと-WebContentデフォルトではありません-それは直接プロジェクトですが、配布可能なWebアプリのディレクトリには対応していません。

于 2011-07-12T18:27:55.177 に答える
2

私のお勧めは、HTTP デーモン (おそらく Apache) を使用してサーバー上のディレクトリを公開し、アプリケーションでそこに書き込むことです。私の知る限り、WAR/EAR 内にファイルを書き込むことはできません。

于 2011-07-12T18:24:09.393 に答える
1

プロジェクトのソース ファイルを格納するために使用しているディレクトリと、サーバー上でアプリケーションがデプロイされているディレクトリを混同しています。

最初に、アプリケーションをデプロイする方法と場所を定義し (war ファイルの場合は、ルート ディレクトリさえありません)、それに応じてアプリケーションを設計します。

移植性を維持したい場合は、外部ファイルの保存場所を定義する構成パラメーターを (web.xml で) 定義し、このディレクトリーからファイルを読み取り、その内容を応答出力ストリームに書き込むサーブレットを用意する必要があります。

ただし、特定のディレクトリから静的ファイルを提供し、XML ファイルをこのディレクトリに書き込むようにサーバーを構成することもできます。サーバーのドキュメントを読んで、それが可能かどうか、またその方法を確認してください。

于 2011-07-12T18:28:18.703 に答える
0

これがサーブレットメソッドdoGet(...)での私の解決策です。RSS をファイル システムに保存せず、毎回 (要求がある場合) 作成されます。HTTP レスポンスとして書き出します。

response.setContentType("application/rss+xml");
response.setHeader("Cache-Control", "no-cache"); // HTTP 1.1
response.setHeader("Pragma", "no-cache"); // HTTP 1.0
response.setDateHeader("Expires", 0); // prevents caching at the proxy server

PrintWriter out = response.getWriter();
out.print("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n");
[...]
out.print("</xml>");
out.flush();
out.close();
// set header information

ファイルシステムに書き込む必要がある場合、ここに解決策があります。サーバーに画像を保存するために使用しました。これもサーブレットメソッドです。

String absoluteFilesystemPath = getServletContext().getRealPath("/");
System.out.println(absoluteFilesystemPath);
File f = new File(absoluteFilesystemPath+"file.xml")
于 2011-07-12T18:37:53.860 に答える
0

ジャスティンの言うことは正しいですが、さらに進んで、実際にディスクに保存する必要があると思いますか?

ファイルがそれほど大きくない場合(私の賭けではそうではないでしょう)、URLがキャッシュされたメモリからそれを返すサーブレットを指すようにし、そのサーブレットにも毎分ファイルを再構築させます。

于 2011-07-12T18:28:14.133 に答える