2011-04-12 4 views
1

Java Webアプリケーションでは、Jboss 4.2.3でStripesフレームワークを使用しています。私のJSPで私が使用するときJSTLインポートタグが相対URLでjava.lang.IllegalStateExceptionをスローする

<c:import url="http://localhost:8080/contextPath/txts/someID" charEncoding="UTF-8"/> 

それは素晴らしい作品と出力HTMLに含まれています。しかし、これは

<c:import url="/txts/someID" charEncoding="UTF-8"/> 

動作しない、それは(スタック全体がここに貼り付けるには大きすぎるので、私は最初の数行を含む)に、このエラーがスローされます。

java.lang.IllegalStateException: Unexpected internal error during &lt;import&gt: Target servlet called getOutputStream(), then getWriter() 
at org.apache.taglibs.standard.tag.common.core.ImportSupport$ImportResponseWrapper.getOutputStream(ImportSupport.java:492) 
at net.sourceforge.stripes.action.StreamingResolution.stream(StreamingResolution.java:443) 
at net.sourceforge.stripes.action.StreamingResolution.execute(StreamingResolution.java:240) 
at net.sourceforge.stripes.controller.DispatcherHelper$7.intercept(DispatcherHelper.java:508) 
at net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:158) 
at org.stripesstuff.plugin.security.SecurityInterceptor.interceptResolutionExecution(SecurityInterceptor.java:225) 
at org.stripesstuff.plugin.security.SecurityInterceptor.intercept(SecurityInterceptor.java:129) 
at net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:155) 
at net.sourceforge.stripes.controller.HttpCacheInterceptor.intercept(HttpCacheInterceptor.java:99) 
at net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:155) 
at net.sourceforge.stripes.controller.BeforeAfterMethodInterceptor.intercept(BeforeAfterMethodInterceptor.java:113) 
at net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:155) 
at net.sourceforge.stripes.controller.ExecutionContext.wrap(ExecutionContext.java:74) 
at net.sourceforge.stripes.controller.DispatcherHelper.executeResolution(DispatcherHelper.java:502) 
at net.sourceforge.stripes.controller.DispatcherServlet.executeResolution(DispatcherServlet.java:286) 
at net.sourceforge.stripes.controller.DispatcherServlet.service(DispatcherServlet.java:170) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 

何かアドバイスをいただければ幸いです。

ありがとうございます

+0

/contextPathはどこに行きましたか? – alexy13

+0

仕様によると、/ contextPathは現在のものと異なる場合を除き、含まれてはいけません。 – Alex

+1

サーブレットコードをコピーして – Senthil

答えて

3

問題があるのは、StreamingResolutionをReaderで開くと、(自然に)Writerを開いて出力をストリームアウトすることです。 c:importタグは気にせず、レスポンスで単にgetOutputStreamを呼び出します。

これを軽減するには、StreamingResolutionにReaderを使用するのではなく、InputStreamでStreamingResolutionを作成する必要があります。

もう1つの方法は、StreamingResolution.stream()メソッドをオーバーライドすることです。

ストライプスは基本的に「正しいことをやっている」が、あなたのパレードでは雨が降っています。

ありがたいことに、Stripesアクションを制御できます。 c:importsアクションではない。

+0

私はInputStreamを提供するコンストラクタを使用しています。代わりにresponse.getOutputStream()。write(...)を使ってStreamingResolution.stream()をオーバーライドする必要がありますか? – Alex

1

問題はJSTLではなくターゲットサーブレットにあります。例外メッセージはクリアされています。getOutputStream()getWriter()には同じ応答をしないでください。

+0

を参照してください。ターゲットサーブレットで、私は[StreamingResolution](http://stripes.sourceforge.net/docs/current/javadoc/net/sourceforge/stripes/)を使用してStripesでコンテンツをストリーミングする標準的なメカニズムを使用しています。 action/StreamingResolution.html)を使用して、InputStreamを提供する2番目のコンストラクタを使用します。この仕組みがうまくいくかどうかは、これが欠陥かもしれませんか? – Alex

関連する問題