[Seasar-user:7003] Re: [Teeda]ServletResponseのContentTypeの設定タイミングについて
Shinpei Ohtani
[E-MAIL ADDRESS DELETED]
2007年 4月 2日 (月) 13:53:48 JST
大谷です。
フィードバック頂いた内容にそって対応しました。
次のバージョンにて反映されます。
宜しくお願いします。
07/04/02 に Shinpei Ohtani<[E-MAIL ADDRESS DELETED]> さんは書きました:
> 関さん、
>
> 大谷です。
>
> フィードバックありがとうございます。
> 下記内容を調査・検討してみます。
>
> 宜しくお願いします。
>
> 07/03/30 に 関 真理子<[E-MAIL ADDRESS DELETED]> さんは書きました:
> > いつもお世話になっております。関です。
> >
> > Teeda-1.0.6 を利用しております。
> >
> >
> > ServletResponseのContentTypeの設定タイミングについてのご相談です。
> >
> > 現在開発中のアプリで、8Kを超えるHTMLを表示しようとすると、
> > ResponseのContentTypeがnullとなる問題が発生しております。
> >
> > そのため、サーバ構成をApache + Tomcat とした場合に、
> > FireFoxにてHTMLがテキストとして表示されてします。
> > ※IEでは問題無し。
> > ※Tomcatのみでは、IE・FireFoxともに問題無し。
> >
> >
> > ResponseRenderPhaseの処理を確認したところ、以下の点に気づきました。
> >
> > TViewTag.doStartTag()にてsetContentType()が呼び出されているのですが、
> > その処理の前のsuper.doStartTag()にて実行される各ConponentのencodeBegin()の処理によって
> > ResponseのBufferSizeを超えるwrite()が実行され、
> > Servlet内部でsendBuffer()をされてしまっているように思えました。
> >
> > # HTMLのサイズがおよそ8Kを超えたあたりでisCommitted()がtrueの状態になりました。
> > # また、事前にResponse.setBufferSize()を極端に大きく設定すると現象は発生しませんでした。
> >
> >
> > どうやら、ResponseにsetContentType()する前に、
> > ResponseのBufferSizeを超えるwrite()が実行されると、
> > Responseがコミット(isCommitted()がtrueの状態)となり、
> > その後のsetContentType()が反映されず、
> > ServletResponse.getContentType()がnullとなってしまうようです。
> >
> >
> > 回避策として、独自のServletFilterで、
> > Request開始時に明示的にsetContentType()を指定しています。
> >
> >
> > TViewTag.doStartTag()内のsetContentType()の呼び出しタイミングを
> > もっと早くすればよいのかなと思うのですが、いかがでしょうか?
> > (それとも、ContentTypeはアプリ側で明示的に設定するべきでしょうか?)
> >
> >
> > 以上です。
> > --
> > 関真理子 <[E-MAIL ADDRESS DELETED]>
> >
> >
> > _______________________________________________
> > Seasar-user mailing list
> > [E-MAIL ADDRESS DELETED]
> > https://ml.seasar.org/mailman/listinfo/seasar-user
> >
>
>
> --
> =============================
> Shinpei Ohtani
> [E-MAIL ADDRESS DELETED]
> =============================
>
--
=============================
Shinpei Ohtani
[E-MAIL ADDRESS DELETED]
=============================
Seasar-user メーリングリストの案内