XMLファイルを生成して_/WEB-INF/pages/
_に保存しようとしています。
以下は、相対パスを使用する私のコードです。
_File folder = new File("src/main/webapp/WEB-INF/pages/");
StreamResult result = new StreamResult(new File(folder, fileName));
_
ローカルマシンでアプリケーションとして実行すると正常に動作します_(C:\Users\userName\Desktop\Source\MyProject\src\main\webapp\WEB-INF\pages\myFile.xml).
_
ただし、サーバーマシンにデプロイして実行すると、次の例外がスローされます。
javax.xml.transform.TransformerException:Java.io.FileNotFoundException C:\ project\Eclipse-jee-luna-R-win32-x86_64\Eclipse\src\main\webapp\WEB INF\pages\myFile.xml
getServletContext().getRealPath()
も試しましたが、サーバーにnull
が返されます。誰かが助けることができますか?
Nevernew File("filename.xml")
などのJava EEWebアプリケーションで相対ローカルディスクファイルシステムパスを使用する。詳細な説明については、 getResourceAsStream()とFileInputStream も参照してください。
決してファイルを書き込む場所を取得する目的でgetRealPath()
を使用しないでください。詳細な説明については、 servletcontext.getRealPath( "/")の意味と、いつ使用する必要があるか も参照してください。
とにかくフォルダをデプロイするためにファイルを書き込まない。詳細な説明については、 アップロードされたファイルをサーブレットアプリケーションに保存するための推奨される方法 も参照してください。
常に事前定義された絶対パス上の外部フォルダに書き込みます。
ハードコードされている:
File folder = new File("/absolute/path/to/web/files");
File result = new File(folder, "filename.xml");
// ...
または、 多くの方法のいずれかで構成されます :
File folder = new File(System.getProperty("xml.location"));
File result = new File(folder, "filename.xml");
// ...
または コンテナ管理の一時フォルダ を利用する:
File folder = (File) getServletContext().getAttribute(ServletContext.TEMPDIR);
File result = new File(folder, "filename.xml");
// ...
または OSが管理する一時フォルダ を利用する:
File result = File.createTempFile("filename-", ".xml");
// ...
別の方法は、(埋め込み)データベースを使用することです。