はFileInputStream
、作業ディレクトリに関連するローカルディスクファイルシステムで動作し、JavaEEWebアプリケーションから呼び出されるという事実についてはまったく何も知りません。渡される相対パスは、サーバーを起動するコマンドが実行されたときに開かれたフォルダーからの相対パスです。多くの場合、これはサーバー自体のインストールフォルダーですが、IDEの場合は、プロジェクト自体のルートフォルダーにすることもできます。この変数は、Javaコード内から制御することはできません。あなたはそれに頼るべきではありません。
パブリックWebコンテンツのリソースとしてファイルを保存しました。ServletContext#getResourceAsStream()
したがって、を返すWebコンテンツリソースとして利用できますInputStream
。ファイル自体のURLを使用するだけでなく、そのURLでサーブレットを呼び出す正当な理由がある場合はhttp://localhost:8080/ServletExample/OpenMe.xls
、次のようになります。
InputStream input = getServletContext().getResourceAsStream("/OpenMe.xls");
// ...
サーブレットのみによるファイルのアクセスを制限することが目的の場合は、ファイルを/WEB-INF
フォルダに移動して、エンドユーザーがファイル自体のURLを入力してファイルを直接開くことができないようにすることを検討してください。それに応じてリソースパスを変更するだけで済みます。
InputStream input = getServletContext().getResourceAsStream("/WEB-INF/OpenMe.xls");
// ...
getRealPath()
他の回答で示唆されているように使用するべきではありません。これは、servletcontainerがWARファイルをローカルディスクファイルシステムではなくメモリに拡張するように構成されている場合は機能しません。これは、サードパーティのホストでよくあることです。その後、戻りnull
ます。
参照: