Java Webでパスの問題を解決する:
Javaで使用されるパスは、絶対パスと相対パスの2つのタイプに分割されます。最終的に、Javaは絶対パスを使用してリソースを見つけることができます。相対パスでリソースを見つけるすべての方法は、いくつかの便利な方法です。しかし、リソースを見つけるために下部に絶対的なパスを構築するのに役立つのはAPIです!
Webアプリケーションを開発するときは、サーバー内の現在のWebrootの物理パスを取得する必要があることがよくあります。
サーブレット、アクション、コントローラー、またはフィルター、リスナー、インターセプター、およびその他の関連クラスである場合、ServletContextを取得し、ServletContext.getRealPath( "/")を使用してサーバー上の現在のアプリケーションの物理アドレスを取得する必要があります。
ServletContextをクラスで取得できない場合、それを行うには2つの方法があります。
1。Javaのクラスロードメカニズムを使用して、xxx.class.getClassLoader()。getResource( "")を呼び出します。 ClassPathを取得し、WebRootディレクトリを取得するための処理方法。この方法は、WebRoot/Web-INF/クラスでのみ有効になります。クラスがJARファイルにパッケージ化されている場合、メソッドは無効になります。現時点では、次の方法を使用する必要があります。
2。スプリングフレームワークのアイデア。 web-inf/web.xmlで、webAppRootkeyのparamを作成し、キー値として値(デフォルトはwebapp.root)を指定し、string webapprootkey = getervletcontext()。getRealPath( "/");リスナー、またはフィルター、またはサーブレットを介して。次に、システムプロパティシステムプロパティのキーと値としてWebAppRootkeyに対応するWebApp.Rootを書き込みます。次に、Webrootの物理的パスは、プログラムのSystem.GetProperty( "webapp.root")を介して取得されます。
2番目のアイデアによると、さらに拡張できます。ただし、サーバーに展開されているアプリケーションの場合、ニーズがない場合は、読み続けてください。
ClassPathと現在のクラスへの絶対的なパスを取得するいくつかの方法を以下に示します。これらの方法のいくつかを使用して、必要なリソースへの絶対的なパスを取得できます。
1。
DebitNoteAction.class.getResource( "")
あなたが得るのは、現在のクラスfiletest.classファイルのURIディレクトリです。自分を含まない!
のように:
file:/d:/eclipse/springtest/webroot/web-inf/classes/
atcarnet/src/com/evi/modules/atacarnet/action/
2。
DebitNoteAction.class.getResource( "/")
あなたが得るのは、現在のクラスパスの絶対的なURIパスです。
のように:
file:/d:/eclipse/springtest/webroot/web-inf/classes/
3。
thread.currentthread()。getContextClassLoader()。getResource( "")
あなたが得るものは、現在のクラスパスの絶対的なURIパスでもあります
のように:
file:/d:/eclipse/springtest/webroot/web-inf/classes/
4。
DebitNoteAction.class.getClassLoader()。getResource( "")
または
classloader.getSystemResource( "")
あなたが得るのは、現在のクラスパスの絶対的なURIパスでもあります。
のように:
file:/d:/eclipse/springtest/webroot/web-inf/classes/
5.サーバーの相対パスを取得します
System.getProperty( "user.dir")
例:e:/apache-tomcat-5.5.16/apache-tomcat-5.5.16/bin
thread.currentthread()。getContextClassLoader()。getResource( "")を使用して、現在のクラスパスの絶対パスのURI表記を取得することをお勧めします
6.プロジェクトの絶対パスを取得します
一般的に使用されます
request.getRealPath( "/")
または
request.getRealPath( "/config/")
ただし、request.getRealPath( "/")を使用することはお勧めしません。 servletcontext.getRealPath( "/")メソッドを試して、Webアプリケーションのルートディレクトリへの絶対パスを取得できます
SRCはデフォルトの相対ディレクトリであるため、SRCファイルを取得するのは非常に簡単です。たとえば、SRCの下のcomディレクトリでtest.javaファイルを取得したい場合は、これで十分である必要があります。
ファイルf = newファイル(com/test.java);
ただし、SRCディレクトリまたはWebrootディレクトリにないファイルを取得したい場合は、同じレベルのSRCまたはWebroot、たとえばDocからそれらを取得する必要があります。
私の難しい方法は次のように実装されています:
string path = this.getServletContext()。getRealPath( "/"); Properties p = new Properties(); p.load(new fileinputStream(new File(bet.Substring(0、(path.lastindexof( "// webroot") + 1) +) + "doc/db.properties")))); system.out.println(p.getProperty( "drivername"));
読んでくれてありがとう、私はそれがあなたを助けることができることを願っています。このサイトへのご支援ありがとうございます!