0

動的 Web プロジェクトを作成し、サーバーとして Apache Tomcat を使用しています。

サーブレットでテキスト ファイルを作成していて、それを JSP で再利用したいと考えています。ただし、次のような簡単なことをすると、デフォルトでEclipseのインストールフォルダーに作成されます。

File f = new file("test.txt"). 

なぜこれが起こるのかわかりません。WebContentJSP でそのファイルをダウンロードできるようにしたいので、ディレクトリにファイルを作成する方法はありますか。

4

2 に答える 2

0

Java には「現在のディレクトリ」という概念があります。Eclipse 経由でアプリケーションを起動すると、これは実際にインストール ディレクトリを指している場合があります。パスを指定しない場合、ファイルはこの現在のディレクトリに作成されます。したがって、あなたがそこにたどり着く理由test.txt

ディレクトリはEclipseに固有のWebContentものです。あなたのコードは、そこに何かを置くことに依存すべきではありません。アプリケーションをライブ サーバーにデプロイするときではなく、開発するときにのみ Eclipse 経由でアプリケーションを起動します。

このディレクトリのコンテンツはroot.war の .war になります。これは、アプリの起動方法と展開方法に関係なく、よく知られている場所ですが、実行時にこの場所に何かを書き込むことに依存することはできません。アプリケーションをパッケージ化された .war としてデプロイするか (ライブ デプロイの場合)、アプリケーションをパッケージ化せずにデプロイしても、実行時に行われた変更をアプリケーション サーバーが取得できない場合があります。

アプリケーションが単一のサーバーでのみ実行されることが確実な場合にできることは、ファイル システム上の既知の場所 ( 、 、 など) にファイルを書き込むことです/tmp/var/yourapp/filesこれらのファイルを提供するコードは、そこからファイルを取得できます。位置。

Java EE ルールに従って 100% 安全にプレイしたい場合は、設定可能なアドレスを持つ FTP サーバーのようなものにファイルを保存します。技術的には、戦争はクラスター上のノード間で出荷され、リクエストが異なるマシンに送信される可能性があるため、ローカルファイルシステムに依存することは機能しません。

于 2012-08-28T21:50:52.967 に答える
0

このステートメントthis.getServletContext().getRealPath ("")を実行すると、実行時に Tomcat WebServer が指しているパスが取得されます。フォルダー「MyFolder」を追加して、次のステートメントを呼び出すことができます。

new File(this.getServletContext().getRealPath ("") + "/MyFolder/test.txt");

とにかく、デフォルトのパスは次のようになります。

...\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\<NameOfYourProject>

新しいファイルを作成しても、Tomcat が指すランタイムの場所を変更しない限り、直接のワークスペースには表示されないことに注意してください ( .metadataパスを確認してください)。

于 2014-06-23T02:04:49.307 に答える