2012-03-26 6 views
3

同じプロジェクト内のWebサービスのメソッドからWebContentフォルダ内のファイルにアクセスしたいとします。たとえば:WebサービスメソッドからWebContentフォルダにアクセスする方法

@WebMethod 
public String test() { 
    File configFile = new File("config.xml"); 
    return configFile.getAbsolutePath(); 
} 

それは "/usr/share/glassfish3/glassfish/domains/domain1/config/config.xml" を返します。私は "/ usr/share/glassfish3/glassfish/domains/domain1/applications/my_project_name /"というディレクトリにあるファイルに行きたいと思っています。どうすればそれにアクセスできますか?

+0

はhttp://stackoverflow.com/questions/6878275/how-get-the-を見ますbase-url –

答えて

0

あなたのコードから、私はあなたがJAXWS Webサービスであることを理解しています。 JAXWSで

、あなたが得ることができるのHttpServletRequest、HttpServletResponseの、のServletContext、

は、あなたのWebServiceクラスでプライベート変数を持っているし、あなたの方法では、このように、その後

@Resource 
private WebServiceContext context; 

そして、それに注釈を付け、次のことができますこのようにServletContextを取得する

ServletContext servletContext = 
    (ServletContext) context.getMessageContext().get(MessageContext.SERVLET_CONTEXT); 

servletContextから、パスを取得できます。

あなたに次のパラメータを追加します。あなたがたHttpServletRequestを取得する必要がある場合、あなたはこのよう

HttpServletRequest request = 
      (HttpServletRequest) context.getMessageContext().get(MessageContext.SERVLET_REQUEST); 

でそれを得ることができますし、

request.getContextPath() ; 
+1

ありがとうございました。私はこの文を新しいファイルの作成に使用しますが、動作しません: 'String filePath = String.format("%s%s%s "、request.getContextPath()、File.separatorChar、" config.xml ") ;たconfigFile =新しいファイル(filePathに)ファイル; ' –

+0

を私は – Arun

+0

ではなく、入力ストリームとして、それを取得しよう... Uに正確なコードを与えるために、ローカルにコードを記述します:元のServletContextのServletContext =(のServletContext)コンテキスト \t \t \t \tのために言います。 getMessageContext()。get(MessageContext.SERVLET_CONTEXT); FileInputStream fis = new FileInputStream( \t \t \t \t \t servletContext.getContextPath()+ "/" + fileName); – Arun

1

のようにアプリのコンテキストパスを取得することができたとウェブサービスクラス:

@Context 
ServletContext context; 

次に、あなたの​​3210ファイルがth e WebContentフォルダにある場合は、context.getRealPath(String)というメソッドを呼び出して絶対パスを取得できます。あなたの例のコードを使用すると、それは次のようになります。

@WebMethod 
public String test() { 
    File configFile = new File(context.getRealPath("config.xml")); 
    return configFile.getAbsolutePath(); 
} 

、または直接、Fileオブジェクトで渡さず:

@WebMethod 
public String test() { 
    return context.getRealPath("config.xml"); 
} 
関連する問題