2017-06-20 1 views
0

私は開発のためにEclipseとTomcatを使用しています。 WebContentフォルダー内のファイルのみがユーザーが閲覧できるようです。
そして、私はサーブレットでファイルを動的に作成する必要がありますが、どうすればWebContentフォルダの実際のパスを取得できますか?
私はgetServletContext().getRealPath("")を試してみました、しかし、それは日食のワークスペースのパスではなく、私のプロジェクトのパスを返します。このD:\git\Monitor\WebContent
誰もが解決策を知っているように私が何かをしたいと思いながら、それがこのD:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\
のようなものだ?〜どうもありがとうサーブレットはどのようにユーザーが直接訪問できるファイルを作成できますか

答えて

0

私は教師の助けを借りて解決策を見つけました。 WebContentの実際のパスを取得できないため、server.xmlを変更して、フロントエンド用のローカルパスを読み取り可能にします。この設定ファイルはServersフォルダにあります。 server.xmlの下部はこのようです。

<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true"> 
    <Context docBase="Monitor" path="/Monitor" reloadable="true" source="org.eclipse.jst.jee.server:Monitor"/> 
</Host> 

そして、私はContextノードを追加し、それがこの

<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true"> 
    <Context docBase="Monitor" path="/Monitor" reloadable="true" source="org.eclipse.jst.jee.server:Monitor"/> 
    <Context docBase="D:\environment\apache-tomcat-9.0.0.M21-dev\user\logs" path="/Monitor/logs" reloadable="true" debug="" crossContext="true"></Context> 
</Host> 

のように、この方法だと、私はサーブレットでD:\environment\apache-tomcat-9.0.0.M21-dev\user\logsにファイルを書き込むと、フロントエンドでURL localhost:8080/Monitor/logs/fileNameを使用してファイルを取得することができます〜

0

これはできません。 Webアプリケーション(WARファイル)は展開されずに、つまり圧縮されたアーカイブファイルとして展開される可能性があります。

一般的な回避策は、エンドユーザーが生成されたファイルをダウンロードできるようにするサーブレットを作成することです。あなたのサーバーFSのどこにでもあなたのファイルを置くことができるこの方法...

+0

'Webcontent'フォルダのhtmlファイルは、' http:// localhost:8080/Monitor/html/index.html'のようなURLでアクセスできます。 – disinuo

+0

私は、サーブレットがファイルを書き込むことができるように、WebContentの実際のパスを取得することが重要な問題だと考えました。 – disinuo

+0

Eclipseの「WebContent」がWARアーカイブのルートになります。そこに書き込むことはできません...ファイルを格納するための安全で書き込み可能なパスを保持する設定プロパティを設定します。これはサーバーの環境によって異なります.... –

関連する問題