- PR -

Servlet+JSPで日本語を出力するには?

投稿者投稿内容
しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2001-09-21 13:41
ついでに補足。



if (なんちゃら) {
// エラー処理
response.setContentType(...
:
} else {
// JSP にフォワード(というかリダイレクト?)
:
}



ということです。おそらくもとの状態では JSP にフォワードしようがしまいが response.setContentType("text/html"); なーんてことをやっていたのでは。

そうすると、JSP さんはもう設定されてしまった ContentType を上書きできず、
デフォルトの ISO8859-1 でしか処理できなかった、というのが真相では。
ume
ベテラン
会議室デビュー日: 2001/09/19
投稿数: 55
投稿日時: 2001-09-21 14:15
ご回答ありがとうございます。
さっそく助言いただいたコードを入れてみたのですが、実行すると以下のエラーが検出されます。

java.lang.IllegalStateException: OutputStream is already being used for this request

どのような対処が考えられるでしょうか?
度々すみませんがよろしくお願いします。
おがわ
大ベテラン
会議室デビュー日: 2001/08/01
投稿数: 199
お住まい・勤務地: 千葉県
投稿日時: 2001-09-21 17:17
> さっそく助言いただいたコードを入れてみたのですが、実行すると以下のエラーが検出されます。
>
> java.lang.IllegalStateException: OutputStream is already being used for this request
>
> どのような対処が考えられるでしょうか?
すでに取得手続済のServletOutputStreamを、再度取得しようとしているために発生しています。
Servletの仕様ですので、Servletコンテナのバグではありません。

Servlet API ドキュメントの
・ServletResponse#getOutputStream()
・ServletResponse#getWriter()
を参照してみてください。
ume
ベテラン
会議室デビュー日: 2001/09/19
投稿数: 55
投稿日時: 2001-09-21 17:17
ご回答ありがとうございました。
問題は解決しました。ご指摘の通りservletで
response.setContentType("text/html; charset=iso-2022-jp");
と設定していたのがじゃまをしていたようです。
response.setContentType("text/html; charset= Shift_JIS");
で正常に表示されました。
お騒がせ致しました。
どうもありがとうございました。

しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2001-09-25 18:39
うーん…まだよくわかっていらっしゃらないようですね…

setContentType は、OutputStream をいじってしまいます。
ここではたまたま Shift_JIS で同じだからいじられなくて…という結果でしょう。

現状の問題は、おそらく Servlet の doPost か doGet で、

コード:

response.setContentType(....);
if (<なにかの条件>) {
:
out.print....
} else {
<JSP へのフォワード>
}



とされており、サーブレットから JSP に制御が移った時、JSP は JSP で setContentType を内部的に行なわなければならないのですが、すでにサーブレット側でこれを行なってしまっているので、「2回は初期化できんぞ」とおこられるわけです。
今回 Shift_JIS にしたらうまくいったのは、おそらく実装上たまたま、かと。

正しくは

コード:

if (<なにかの条件>) {
response.setContentType(....);
:
out.print....
} else {
<JSP へのフォワード>
}



として、JSP にフォワードする前に response をいじらないようにすべきです。
# むしろエラー処理部分も JSP に出しちゃったほうがいいのでは…
# とか思ったり…
# サーブレットはあくまで MVC におけるコントローラに徹し、
# ビュー部分はすべて JSP、というのがスマートではないかと。
ume
ベテラン
会議室デビュー日: 2001/09/19
投稿数: 55
投稿日時: 2001-09-28 15:12
ご指摘の通りです!
貴重なアドバイスありがとうございました。
とても勉強になりました。
ありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)