2009-09-25 13 views
7

FOPを使用してPDFドキュメントを生成しようとしています。 pdf生成コードはサーブレットに保存され、xslはWebContentフォルダ内の特定のフォルダに格納されます。サーブレットからWebContentフォルダのファイルにアクセスする

相対パスを使用してこのxslファイルにアクセスするにはどうすればよいですか?これは、Fileオブジェクトで完全なパスを指定した場合にのみ機能します。

xmlコンテンツを動的に生成する必要があります。 Fileオブジェクトではなく、この動的生成XMLをソースとしてどのように与えることができますか?

ご意見をお寄せください。あなただけ行うことができますパスを取得するには

答えて

16

String path = s.getServletContext().getRealPath("/WEB-INF/somedir/hdfeeh");   

sはそのサーブレットクラスならばHTTPServlet。あなたもthis.getServletContext()を使用することができます実装するクラスです。

これをパラメータとして渡します。

動的に生成されたXMLを使用する限り、使用しているライブラリは入力ストリームの使用、XMLの書き込み、バイト配列への変換をサポートし、ByteArrayInputStreamにラップして使用する必要があります。直接的かつ独立したコンテナの実装のために

+4

それを取得しないでください。 's'は何か分からない? – newbie

+2

@newbie's'は、['ServletConfig'](http://docs.oracle.com/javaee/5/api/javax/servlet/ServletConfig.html)を実装するオブジェクトです。 'HttpServlet'は' ServletConfig'を実装するクラスを拡張します。つまり、あなたのクラスが 'HttpServlet'を拡張している場合、' this.getServletContext() 'を行うことができます。 –

+0

それは私のために働かない。このようなパスにファイルが存在することをチェックすると、falseを返します。私の質問を見て:http://stackoverflow.com/questions/36598562/unable-to-access-file-in-web-inf-folder-from-servlet –

6

、次の方法のgetResource(resourcewithにアクセスすることができます)サーブレット内部:

/開始サーブレット/

public InputStream getResource(String resourcePath) { 
    ServletContext servletContext = getServletContext(); 
    InputStream openStream = servletContext.getResourceAsStream(resourcePath); 
    return openStream; 
} 

public void testConsume() { 
    String path = "WEB-INF/teste.log"; 
    InputStream openStream = getResource(path); 

    int c = -1; 
    byte[] bb = new byte[1024]; 
    while (-1 != (c = openStream.read(bb))) { 
    /* consume stream */ 
    } 
    openStream.close(); 
} 

/エンド・サーブレット/

+0

残念ながら、私はリソースをロードすることができませんストリーム。 私はのServletContextを印刷し、その[email protected] として任意のアイデアを示した?例外java.net.MalformedURLException を取得 – jobinbasani

+1

servletContext.getRealPath(filePath)を使用した後。そのうまく動作します:) – jobinbasani

+0

ここでは、コードは正常に動作します。 私はTomcat 6を使用しています。*。 今はIBMプラットフォームを使用していることがわかります。たぶん、それは結果の違いです。 – apast

1

私は以下の方法を使用して、Webコンテンツのファイルを読み取った。

BufferedReader reader = new BufferedReader(new InputStreamReader(request.getSession().getServletContext().getResourceAsStream("/json/sampleJson.json"))); 

これで、すべてのファイルコンテンツがリーダーオブジェクトで利用可能になりました。

関連する問題