ホームページ  >  記事  >  Java  >  Java(Web)の相対パスと絶対パスの詳しい説明

Java(Web)の相対パスと絶対パスの詳しい説明

零下一度
零下一度オリジナル
2017-06-29 14:43:282030ブラウズ

前書き:
少し前、Web アプリケーションでのファイルの作成と移動を処理するため、Java
の相対パス、絶対パス、その他の問題に関する多くの問題が発生しました。同時に、Web アプリケーションの相対パス、絶対パス、Java.io.File
クラスについても学びました。いくつかの情報も見つけました。同様の問題が発生した場合は、より効果的に解決できることを願っています。

=============================================== == ================================
1. 基本概念の理解

絶対パス: 絶対パスハードディスク上のホームページ上のファイルまたはディレクトリの実際のパス (URL および物理パス) 例:
C:/xyz/test.txt は、test.txt ファイルの絶対パスを表します。 www.sun.com/index.htm は
URL 絶対パスも表します。

相対パス: 特定のベースディレクトリからの相対パス。 Web の相対パス (HTML の相対ディレクトリ) が含まれます。例: サーブレットでは、「/」は Web アプリケーションのディレクトリを表します。物理パスの相対表現。たとえば、「./」は現在のディレクトリを表し、「../」は上位ディレクトリを表します。この同様の表現も相対パスに属します。

なお、URI、URL、URN等については、RFC関連文書規格を参照してください。

RFC 2396:Uniform Resource Identifiers (URI): Generic Syntax、

(www.ietf.org/rfc/rfc2396.txt)


2. JSP/サーブレットの相対パスと絶対パスについて。


2.1 サーバー側のアドレス

サーバー側の相対アドレスは、Web アプリケーションに関連するアドレスを指します。このアドレスはサーバー側で解決されます

(クライアントによって参照される HTML や JavaScript の相対アドレスとは異なります)。つまり、この時点での JSP とサーブレットの相対アドレスは、Web アプリケーション、つまり http://192.168.0.1/webapp/ に対する相対アドレスである必要があります。


使用される場所は次のとおりです:
forward: request.getRequestDispatcher(address) サーブレット内; このアドレスはサーバー側で

解析されるため、a.jsp に転送したい場合は次のように記述します。

request.getRequestDispatcher(( "/user/a.jsp") この / は現在の Web アプリケーション webapp に対する相対アドレスであり、その絶対アドレスは 192.168.0.1/webapp/user/a.jsp です。
sendRedirect: jsp
2.22 では、クライアントのアドレス

HTML ページ内のすべての相対アドレスはサーバーからの相対アドレスです ルート ディレクトリ (http ://192.168.0.1/) ではなく、(ディレクトリ下の Web アプリケーションのディレクトリ) http://192.168.0.1/webapp/ ではありません。

HTML のフォームの action 属性のアドレスは、サーバーのルート ディレクトリ 192.168.0.1/) を基準にする必要があります。

したがって、a.jsp に送信される場合: action="/webapp/user/a.jsp" または action ="784ef932070c663c70d86af5e4d3d09c"/user/a.jsp;
actiom="/webapp/handleservlet" としてサーブレットに送信されます
JavaScript はクライアント側でも解析されるため、その相対パスと形状 形状は同じです。


したがって、通常の状況では、CSS、JavaScript.Action、および JSP/HTML ページによって参照されるその他の属性の前に
784ef932070c663c70d86af5e4d3d09c を追加して、参照されるファイルが確実にはすべて Web アプリケーション内のディレクトリに属します。
さらに、ファイルの場所を基準とした「.」、「./」、「../../」などの相対パスの使用は避けるようにしてください。この方法では、
問題が発生しやすくなります。ファイルを移動するときの問題。


3. JSP/Servletで現在のアプリケーションの相対パスと絶対パスを取得する
3.1 JSPで現在のアプリケーションの相対パスと絶対パスを取得する
ルートディレクトリに対応する絶対パス: request.getRequestURI()

ファイルの絶対パス:application.getRealPath(request.getRequestURI());

現在の Web アプリケーションの絶対パス: application.getRealPath("/");
要求されたファイルの上位ディレクトリを取得: new File (application.getRealPath(request.getRequestURI()) ).getParent()

3.2 Servlet 内の現在のアプリケーションの相対パスと絶対パスを取得します
ルート ディレクトリに対応する絶対パス: request.getServletPath();
ファイルの絶対パス:request.getSession().getServletContext()。getRealPath
(request.getRequestURI())

現在の Web アプリケーションの絶対パス: servletConfig.getServletContext().getRealPath("/");


  (ServletContext对象获得几种方式:
       javax.servlet.http.HttpSession.getServletContext() 
       javax.servlet.jsp.PageContext.getServletContext() 
       javax.servlet.ServletConfig.getServletContext() 
     )

4.java のクラスで相対パスと絶対パスを取得するメソッド
4.1 別の Java クラスで絶対パスを取得します
java.io.File のドキュメントによれば、次のことがわかります:
デフォルトでは、 new File("/") で表されるディレクトリは System.getProperty("user.dir") です。

次のプログラムは実行クラスの現在のパスを取得します


package org.cheng.file;import java.io.File;
public class FileTest {    public static void main(String[] args) throws Exception {      
  System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));    
  System.out.println(FileTest.class.getClassLoader().getResource(""));       
  System.out.println(ClassLoader.getSystemResource(""));          System.out.println(FileTest.class.getResource(""));          System.out.println(FileTest.class.getResource("/")); //Class文件所在路径    System.out.println(new File("/").getAbsolutePath());          System.out.println(System.getProperty("user.dir"));     }}

4.2 サーバーのJavaクラスは(ネットワークから)現在のパスを取得します
(1).Weblogic

WebApplication のシステム ファイルのルート ディレクトリは、Weblogic インストールのルート ディレクトリです。
例: Weblogic が c:/bea/weblogic700... にインストールされている場合、ファイルのルート パスは c:/.
したがって、サーバー側ファイルにアクセスするには 2 つの方法があります。
a. 絶対パスを使用します:
たとえば、パラメーター ファイルを c:/yourconfig/yourconf.properties に置きます。
new FileInputStream("yourconfig/yourconf.properties") を使用します。
b. 相対パスを使用します。ルート ディレクトリは Web アプリケーションのルート パスであり、WEB-INF の上位ディレクトリです。パラメータ ファイルを yourwebapp/yourconfig/yourconf.properties に配置し、次のように使用します。
new FileInputStream("./yourconfig / yourconf.properties");
両方の方法が利用可能で、お好みで選択してください。クラス内の

(2).Tomcat

出力 System.getProperty("user.dir"); 表示されるのは %Tomcat_Home%/bin

(3).Resin

は JSP の相対パスではありませんこの JSP を実行して SERVLET にコンパイルするのは JSP エンジンです

たとえば、 new file メソッドを使用して File f = new File("a.htm");

この a.htm をテストします。はresin

(4)のインストールディレクトリにあります。相対パスの見方は?


Java ファイルで getResource または getResourceAsStream を使用できます

例: getClass().getResourceAsStream(filePath);//filePath は「/filename」にすることができます。ここで、/ は公開ルート パスの下の web

WEB-INF/classes を表します

このメソッドを使用するデフォルトのパスは WEB-INF/classes です。 Tomcat ではすでにテストされています。

5. ファイルを読み取るときは、ハードコーディングと絶対パスの使用を避けるための相対パス。 (インターネットより)

5.1 ハードコーディングを避けるために、Spring の DI メカニズムを使用してファイルを取得します。

以下の接続内容を参照してください:

www.javajia.net/viewtopic.php?p=90213&

5.2 設定ファイルの読み込み

以下の接続内容を参照してください:
dev.csdn.net/develop/article/39/39681 shtm
5.3 ハードコーディングを避けるために、仮想パスまたは相対パスを介して XML ファイルを読み取ります
次の接続コンテンツを参照してください:
club.gamvan.com/club/clubPage.jsp?iPage=1&tID=10708&ccID=8
6 .Java ファイルに対する一般的な操作 (コピー、移動、削除、作成など) (インターネットから)
一般的に使用される Java ファイル操作クラス
www.easydone.cn/014/200604022353065155.htm

Java ファイル操作の完全なコレクション(JSP 内)
www.pconline.com.cn/pcedu/empolder/gj/java/0502/559401.html

Java ファイル操作の詳細な説明 (Java 中国語 Web サイト)
www.51cto.com/html/2005/ 1108/10947.htm

JAVA ディレクトリとファイルを作成/削除/変更/コピーする方法
www.gamvan.com/developer/java/2005/2/264.html

概要:
上記のコンテンツの使用を通じてを使用すると、Web アプリケーション サーバー側でのファイルの移動の問題を解決でき、ファイルの検索、ファイルのコピー

削除などの操作が可能になり、同時にサーバーの相対アドレスと絶対アドレスの概念が明確になります。

URIのRFC標準ドキュメントを参照することをお勧めします。同時に、Java.io.File、Java.NET.URI およびその他の内容についてもより深く理解できるようになります。


以上がJava(Web)の相対パスと絶対パスの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。