weblogic get ServletConttext().getRealPath(/)

1690 ワード

http://1185734295.iteye.com/blog/2073459
問題の説明:tomcatサーバーとwebspareサーバーでは、このような方法でサーバーの完全なパスを得ることができます。
                 でもweblogicに移転したら、得られなくなります。帰ってきたのはnullです。
理由:weblogicはwarパッケージとしてリリースされていますが、realPathはありませんので、get Servlet Contect().getRealPath(/)で絶対パスを得ることができません。
解決方法:コードを修正して相対パスを得る:
コードを
getServletContext().getRealPath("/")  
変更
getServletContext().getResource("/")
この問題を解決できます。
提案:
URL url = request.getSession().getServletContext().getResource("/");
String path = request.getSession().getServletContext().getRealPath("/")
get RealPath()が取得したのは絶対パスで、getResource()が取得したのは相対パスです。開発者にとっては相対パスを使用しています。絶対パスを使用しているので、一旦サーバやシステムを変更すると、経路やクラスのローディングエラーが発生します。典型的な場合、windowsの下にC、Dディスクの点数があります。ただし、Linuxシステムではディスクの区別がなくなりますので、getsResource()を使うことをおすすめします。
もしあなたが使っているのがget Resource()なら、myeclipseやeclipseを使ってプロジェクトをwarに圧縮してからあなたの部署の仕事に影響はありません。
String path=this.getClass().getClassLoader().getResource("/").getPath();
上のこれはweb-inf/clasesの中の経路を取得しました。
使ってもいいです
ServletContext.getResourceAsStream("/WEB-INF/config/db.config")
メソッドです
String tmpFolderPath = request.getSession().getServletContext().getResource("/phototemp/photo").getFile();  
注意this.get Servlet Contect()はTomcatで使用できますが、WebLogicでは使用できません。WebLogicでは次のような方法で代替できます。
request.getSession().getServletContext()