[Seasar-user:18092] Re: 【sastruts】response.setContentTypeを設定しても、HTTPヘッダーに送出されない
aoyogi kouhei
[E-MAIL ADDRESS DELETED]
2009年 7月 29日 (水) 09:15:28 JST
青柳です。
Filterと自前のHttpServletResponseを使って
うまくできました。
竹内さんありがとうございます。
参考までに、ソースの一部を掲載します。
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException
{
MobileHttpServletResponse mobileResponse = new
MobileHttpServletResponse((HttpServletResponse)response);
Mobile mobile = Mobile.getMobile((HttpServletRequest)request);
String meta;
String docType;
if (mobile.isDocomo()) {
meta = "<meta http-equiv=\"Content-Type\"
content=\"application/xhtml+xml; charset=utf-8\" />";
docType = "<!DOCTYPE html PUBLIC \"-//i-mode group (ja)//DTD
XHTML i-XHTML(Locale/Ver.=ja/1.0) 1.0//EN\" \"i-xhtml_4ja_10.dtd\">";
mobileResponse.setContentType("application/xhtml+xml;
charset=utf-8");
} else {
meta = "<meta http-equiv=\"Content-Type\" content=\"text/html;
charset=utf-8\" />";
docType = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0
Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">";
mobileResponse.setContentType("text/html; charset=utf-8");
}
request.setAttribute("meta", meta);
request.setAttribute("docType", docType);
chain.doFilter(request, mobileResponse);
}
2009/07/28 18:54 Shin Takeuchi <[E-MAIL ADDRESS DELETED]>:
> 竹内(stakeuchi)です。
> #横から失礼します。
>
> SAStrutsで普通にJSPを使う場合
> S2RequestProcessor#processContent以下で「text/html」が設定されるため
> これよりも上位でsetContentTypeしないと、
> 上書き設定は非常に困難です。
> #Tomcat/Glassfish等を利用していると仮定しています
>
>
> 逆にS2RequestProcessorよりも上位で設定してしまえば良いので
> Filterを作成して設定すれば思い通りの結果が出せるはずです。
>
> もしくは(こちらもFilter等を利用する必要がありますが)
> HttpServletResponseをラップして、
> 意図的に開発者が呼び出した時のみ、上位のsetContentTypeが呼び出されるように
> setContentTypeメソッドをOverrideしてしまうのも良いかもしれません。
> #これであればActionレベルで指定出来ると思います。
>
>
> mobyletのMobyletFilter/MobyletResponseクラスが
> このあたりの処理を行っているので(今回の事例はまさに携帯ですし)
> 参考になるかもしれません。
>
>
> 2009/07/28 16:38 に aoyogi kouhei<[E-MAIL ADDRESS DELETED]> さんは書きました:
> > お世話になります。青柳と言います。
> >
> > sastruts 1.0.4-sp5で以下のようなコードを実行しました。
> >
> > @Resource
> > protected HttpServletResponse response;
> >
> > public String meta;
> > public String docType;
> >
> > @Execute(validator = false)
> > public String index()
> > {
> > Mobile mobile = Mobile.getMobile(RequestUtil.getRequest());
> > if (mobile.isDocomo()) {
> > meta = "<meta http-equiv=\"Content-Type\"
> > content=\"application/xhtml+xml; charset=utf-8\" />";
> > docType = "<!DOCTYPE html PUBLIC \"-//i-mode group (ja)//DTD
> > XHTML i-XHTML(Locale/Ver.=ja/1.0) 1.0//EN\" \"i-xhtml_4ja_10.dtd\">";
> > response.setContentType("application/xhtml+xml;
> charset=utf-8");
> > } else {
> > meta = "<meta http-equiv=\"Content-Type\"
> content=\"text/html;
> > charset=utf-8\" />";
> > docType = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0
> > Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">";
> > }
> > return "index.jsp"
> > }
> >
> > この時、docomo携帯で見た時だけ特別なContent-Typeを返したいのですが
> > docomoでもそれ以外でもヘッダーを確認すると
> > 「Content-Type: text/html;charset=UTF-8 」
> > となってしまいます。
> >
> > ちなみに、return null;にすると、求めていたヘッダーが返ってきました。
> > jspを表示してかつ、ヘッダーを送出する方法はありますか?
> >
> > _______________________________________________
> > Seasar-user mailing list
> > [E-MAIL ADDRESS DELETED]
> > https://ml.seasar.org/mailman/listinfo/seasar-user
> >
> >
>
>
>
> --
> ―Lei Hau'oli Co.,Ltd.―――――――――――
>
> 竹内 真(TAKEUCHI SHIN)
> Tel: 080-3300-9888
> Mail: [E-MAIL ADDRESS DELETED]
>
> 株式会社Lei Hau'oli
> 〒150-0001 東京都渋谷区神宮前4丁目18番6号
> Tel: 03-5775-0315 Fax: 050-3488-2266
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://ml.seasar.org/archives/seasar-user/attachments/20090729/19cf9c81/attachment.html>
Seasar-user メーリングリストの案内