2009-07-16 12 views
7

にファイルをロードする方法:.propertiesファイルは、私は、この限りで得ているJSP

private Properties logoUrls = new Properties(); 
logoUrls.load(new FileInputStream("channelLogos.properties")); 

channelLogos.propertiesは私のJSPと同じディレクトリにあります。私はFileNotFound例外が発生します。私のアプリは、実際には "channelLogos.properties"を意味すると思いますが、JSPと同じディレクトリではないのですか?プロパティファイルをロードする正しいパスを特定するにはどうすればよいですか?

+0

関連するhttp://stackoverflow.com/questions/3920088/jsp-servlet-read-parameters-from-properties-file –

答えて

3

ServletContext.getRealPath()をご覧ください。それはプロパティファイルへの完全なパスを与えるはずです。

+0

これは素晴らしいことです。ありがとう!そのテクニックを使用すると、私のパスは私のプロパティファイルに一見正しいとわかりますが、私はまだ例外的にファイルを取得しません。何か案は? – morgancodes

6

非常にModel 2 Servletsをお読みください。モデル1のサーブレットをやっている皆さん、つまりJSPで「本物の仕事」をしている皆さんにお勧めします。あなたの質問に関しては

:まず、その後、getResourceAsSttreamを使用してファイルを読み取り、プロパティをクラスパスにファイルを投げる:

 
Thread.currentThread().getContextClassLoader().getResourceAsStream("channelLogos.properties"); 

はもちろんの多くのオプション、ありますが、誰もが自分の好きなを持つことになります。これは、仕事をする

+0

私はjspルールで本当のことをやっていないと全面的に取り組んでいますが、私はそれを壊しています。 – morgancodes

+0

+1クラスパスを使用しています – Thilo

+0

@morgancodes:私は時々自分のルールを破って全面的に乗り込んでいます。 ;) –

10

<%@page import="java.io.InputStream" %> 
<%@page import="java.util.Properties" %> 

<% 
    InputStream stream = application.getResourceAsStream("/some.properties"); 
    Properties props = new Properties(); 
    props.load(stream); 
%> 

はとにかく私は本当にあなたがプロパティがクラスパスにファイルを持っていて、「JSPと同じディレクトリ」と言うとき、サーブレット

+2

はい、それは正しい方法です。私はこのことを間違いなく速く、醜い、汚い、悪い方法でやっていると確信しています。 – morgancodes

+0

はい私は知っている、hehe ...私はちょうどあなたが尋ねたものに答えた;) –

+0

FYI、あなたのコードの数行を保存するapplication.getResourceAsStream( "...")があります。 –

4

を使用すべきだと思います、それはどういう意味ですか?たとえば、/mywebapp/somefolder/my.jspのどこかにJSPがあり、アプリケーションルートにmywebappがあり、プロパティファイルが/mywebapp/somefolder/channelLogos.propertiesの場合、

もしそうなら、それらはおそらく同じディレクトリにはありません。 JSPがコンパイルされており、実際に配置されている場所はサーブレットコンテナによって異なる場合があります。あなたの最善の策は、ServletContext.getRealPath()のように、で、を使用して、webappコンテキストに関連するプロパティファイルパスを引数として使用することです。上記の例を使用:

あなたはJSPと同じフォルダにあなたの特性を置くことを主張する場合(つまり、意図でない限り)あなたは、公的にアクセス可能であることから、それを制限するように注意する必要があることに注意してください、と述べ
private Properties logoUrls = new Properties(); 
logoUrls.load(new FileInputStream(servletContext.getRealPath("/somefolder/channelLogos.properties"))); 

+0

ありがとう。これは機能します。しかし、私はservletContextへの簡単なアクセス権を持たないjspInitの内部でこれをすべて行うことを計画していました。多分、クラスパスのアプローチが最高です。 – morgancodes

+0

'getServletConfig()。getServletContext() 'は' jspInit'メソッドの中からservletContextを取得します。つまり、クラスパスのアプローチは完全に優れていますが、MVCはまだ良いです:-)私はあなたがJSPだけでやりたいと主張してきたので、この答えを提供しました。 – ChssPly76

関連する問題