サーブレットの基礎知識 |
|
サーブレットからの日本語を含むHTMLを出力しようとしたとき、日本語の部分がブラウザ側で正しく表示されない(日本語がすべて「?」になってしまう)ことがあります。
この現象は、サーブレットから送信された文字のエンコーディングを明示的に指定していないために起こります。
これを解決するためには、サーブレットから送信する文字のエンコーディングの種類を明示的に指定しなければなりません。
Servlet 2.2では、HttpServletResponseクラスのsetContentTypeメソッドで「charset=」を使用してエンコーディングを指定しないと、ISO-8859-1(いわゆるLatin文字)で出力をエンコードする仕様になっています。ですから、何も指定しないと日本語はすべて「?」に変わってしまいます。こうなってしまうと、ブラウザ側でいくらエンコードに関する設定を変更しても対応できません(もともとの出力で「?」になってしまっているため)。
ですから、出力に日本語が含まれる場合は、必ず出力のMIMEタイプにエンコーディングを指定する必要があります。例えば、以下のように設定します。
|
こうすることによって、その後にgetWriter()メソッドで取得するPrintWriterでは、ここで指定したエンコーディングに変換されて出力されることが保証されます(注意:上の2行の順序を逆にすると、MIMEタイプの設定内容が反映されません。必ず上の順序で記述してください)。
ここで指定するエンコーディングは、サーブレットを実行するプラットフォームのデフォルトのエンコーディングと一致する必要はありません。例えば、LinuxやSolarisでSJISを指定しても問題ありません。
ただしブラウザの種類によっては、特定のエンコーディングを正しく解釈できない可能性もあるので、そういった場合はブラウザが正しく解釈できるエンコードを使用する必要があります。
(注:本記事では、 Servletのバージョンは、2.2を仮定しています)
[参考URL]
http://java.sun.com/products/servlet/2.2/javadoc/index.html
「Java Solution FAQ」 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|