JSPでrequest.getRealPath("/xx/yy")メソッドは、古い代替メソッドを提示します.
2167 ワード
私たちのJSPプロジェクトはファイルをアップロードするときに通常、サーバ上のディレクトリの絶対パスを取得する必要があります.request.getRealPath()メソッドは古いことを示していますが、代替メソッドがあります.
servletまたはstrutsでは、次のように書くこともできます.
以下の説明は以下のとおりです.http://blog.sina.com.cn/s/blog_6dbf810d0100romt.html
関連情報:
現在の最新のJavaサーブレットAPI 2.1バージョンではrequestの使用には賛成しない.getRealPath()このメソッドは、サーブレットContextを使用します.getRealPath(java.lang.String)が代わりになります.
サーブレット2.4ドキュメントでサーブレットContext.getRealPath(java.lang.String)は、指定された仮想パスの実際のパスを含む文字列を返し、変換が間違っている場合nullを返します.たとえば、仮想パス「/index.html」は、サーバファイルシステムにどのような実際のパスがあるかにかかわらず、「/index.html」を使用して常に見つけることができます.返される実際のパスは、servletコンテナ(servlet container)が存在するコンピュータまたはオペレーティングシステムに近いフォーマットを使用し、適切なパスセパレータを含む.servletコンテナが変換できない場合nullが返されます.
ただし、サーブレットContext.getRealPath()の戻り値は、常に異なるパスを返します.
たとえば、2つのファイルがあります.
exper1.txt、C:Tomcat 6.0webappsROOTにあり、
exper2.txt、C:Tomcat 6.0webappsにあり、
C:Tomcat 6.0webappsROOTで1つ書きます.jspファイル:
ServletContext context = getServletContext();
context.getRealPath("exper 1.txt")の結果はC:Tomcat 6.0webappsROOTexper 1.txt;
context.getRealPath("exper 2.txt")結果はC:Tomcat 6.0webappsROOTexper 2.txt;
context.getRealPath(「exper 3.txt」)の結果はC:Tomcat 6.0webappsROOTexper 3のままです.txtですがexper 3というファイルは存在しません.これはgetRealPath()という方法に一定の問題があることを示している.
application.getRealPath()の使い方とサーブレットContext.getRealPath()は基本的に同じであり,前述の例のcontextをアプリケーションに変更すると,得られた結果も同じであり,同じ問題も存在する.
2、requestオブジェクトはjavaxにある.servlet.http.HttpServeretRequestパッケージにはありますがjava APIでは見つかりません
ネット上の資料はJ 2 EE APIあるいはTomcat APIの中で探し当てることができることを表示して、しばらく検証がなくて、興味のある友達は行ってみることができます
3、上記の方法は、ディスク、プロジェクト名などを含むプロジェクトの完全なパスを返すことができる.
HttpSession session = request.getSession(true); // session
// String path = request.getRealPath("/data/userfile/p_w_picpath"); //
String path = session.getServletContext().getRealPath("/data/userfile/p_w_picpath"); //
servletまたはstrutsでは、次のように書くこともできます.
this.getServletContext().getRealPath("/data/userfile/p_w_picpath");
this.getServlet().getServletContext().getRealPath("/data/userfile/p_w_picpath");
以下の説明は以下のとおりです.http://blog.sina.com.cn/s/blog_6dbf810d0100romt.html
関連情報:
現在の最新のJavaサーブレットAPI 2.1バージョンではrequestの使用には賛成しない.getRealPath()このメソッドは、サーブレットContextを使用します.getRealPath(java.lang.String)が代わりになります.
サーブレット2.4ドキュメントでサーブレットContext.getRealPath(java.lang.String)は、指定された仮想パスの実際のパスを含む文字列を返し、変換が間違っている場合nullを返します.たとえば、仮想パス「/index.html」は、サーバファイルシステムにどのような実際のパスがあるかにかかわらず、「/index.html」を使用して常に見つけることができます.返される実際のパスは、servletコンテナ(servlet container)が存在するコンピュータまたはオペレーティングシステムに近いフォーマットを使用し、適切なパスセパレータを含む.servletコンテナが変換できない場合nullが返されます.
ただし、サーブレットContext.getRealPath()の戻り値は、常に異なるパスを返します.
たとえば、2つのファイルがあります.
exper1.txt、C:Tomcat 6.0webappsROOTにあり、
exper2.txt、C:Tomcat 6.0webappsにあり、
C:Tomcat 6.0webappsROOTで1つ書きます.jspファイル:
ServletContext context = getServletContext();
context.getRealPath("exper 1.txt")の結果はC:Tomcat 6.0webappsROOTexper 1.txt;
context.getRealPath("exper 2.txt")結果はC:Tomcat 6.0webappsROOTexper 2.txt;
context.getRealPath(「exper 3.txt」)の結果はC:Tomcat 6.0webappsROOTexper 3のままです.txtですがexper 3というファイルは存在しません.これはgetRealPath()という方法に一定の問題があることを示している.
application.getRealPath()の使い方とサーブレットContext.getRealPath()は基本的に同じであり,前述の例のcontextをアプリケーションに変更すると,得られた結果も同じであり,同じ問題も存在する.
2、requestオブジェクトはjavaxにある.servlet.http.HttpServeretRequestパッケージにはありますがjava APIでは見つかりません
ネット上の資料はJ 2 EE APIあるいはTomcat APIの中で探し当てることができることを表示して、しばらく検証がなくて、興味のある友達は行ってみることができます
3、上記の方法は、ディスク、プロジェクト名などを含むプロジェクトの完全なパスを返すことができる.