2017-12-28 22 views
0

Java Webアプリケーション内のPOJOでは、実行中のウェブサイトのルートへのパスをどのようにして見つけることができますか?そこでファイルを読むことができますか?Java Webアプリケーション内で実行されるPOJOからWebルートへのパスを取得するにはどうすればよいですか?

  • getServletContext()
  • application(サーブレットのように)

(JSPのように):

これはPOJOであるので、私が持っていない、覚えておいてください私はSystem.getProperty("user.dir")のための推薦を見ましたが、これは正しく見えません(私のラップトップでは、私が欲しいものではない明確にC:\Program Files\eclipse\eclipseを返します)。

アプリはAzureにデプロイされるため、技術的に事前にアプリケーションのパスを知ることはできません。つまり、プロパティまたは設定として設定することはできません。私はそれをリアルタイムで薄い空気から作り出す必要があります。

  • PHP:$_SERVER['DOCUMENT_ROOT']
  • .NET:AppDomain.Current.BaseDirectory

あなたはその後、Webルートからの相対パスでこれらの値を組み合わせることで、パスを形成することができる

他の言語には、グローバルを持っています。

Javaと同等のものは何ですか?

+0

正確に何が必要ですか? '/'またはあなたのウェブアプリケーションのリソースの場所。 '/ mywebapp /'?これらは完全に異なる場所になる可能性があります。したがって、PHPと.NETの例が同等かどうかはわかりません。 – Lothar

+0

Webルートからファイルを読みたい。そのためには、その道が必要です。 – Deane

+0

あなたはそれを行うことはできません、システムファイルの場所を知らない限り、ファイルはWebから保護され、アクセスできません。 –

答えて

0

PHPや.NETの変数と似ているとは思えません。単純にシステムに複数のWebルートがあるからです.1つはプレーン接続に使用され、もう1つはTLS接続に使用されます。アプリケーション内の複数のHTTPサーバー(私は定期的にJettyとやっています)

システムプロパティのような「グローバル変数」はここでは機能しません。

私の考えは、実際にはServletContextや、POJO以外のクラス(サーブレットのようなもの)内で利用可能なものをwebappのクラスに含まれる静的メンバーに保存しているため、あなたのPOJOからそれを取得し、そこからウェブルートを取得します。私のコメントの1つで述べたように、そのルートはWARファイルの中にあるかもしれないので、java.io.Fileが実際に動作するとは思わないはずです。

同じWebアプリケーションを同じサーバー内(または同じVM内の複数のサーバー)で複数回使用しても、これらのWebアプリケーションは異なるクラスローダーを使用して、Webappごとにストレージクラスをロードする必要があるため、

+0

これは動作したのでこれを受け入れるつもりです。私は 'ServletContext'をPOJOに渡し、それを使ってファイルを探しました。最も洗練されたソリューションではありませんが、機能しました。実際に使用したソリューションのオリジナルの質問に関する私の最後のコメントを参照してください。 – Deane

+0

@Deane答えを受け入れてくれてありがとう。上記のコメントで説明したあなたの解決策は、この特定の質問とは関係ありません;-) – Lothar

+0

私は同意します。私の基本的なアプローチはすべて間違っていた。上記のあなたの答えは私の質問に答えるが、私の質問は根本的に悪かった。 – Deane

関連する問題