[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 メーリングリストの案内