スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

基礎からのサーブレット/JSP(4日目)

基礎からのサーブレット/JSP 改訂版 (プログラマの種シリーズ)基礎からのサーブレット/JSP 改訂版 (プログラマの種シリーズ)
(2007/03/01)
宮本 信二

商品詳細を見る


CHAPTER5 日本語の表示とコンテンツタイプ

HTMLを出力するサーブレット

この項ではコンテンツタイプの設定をして
HTML、日本語の出力を行うサーブレットを作成した。

ここでわかったことはEclipse(Windows上)のデフォルトのエンコーディングはShift-JISであるということ
である。特段設定をした覚えはないが日本語がキチンと表示されている。

TomcatではデフォルトのエンコーディングがISO-8859-1で設定されてしまっているため
日本語を利用する際はsetContentType()で必ず文字エンコーディングを指定しないといけないらしい。
また、コンテンツタイプの設定はgetWriterを実行する前にやっておかないといけないらしい。コレも覚えておこう。

今後、UTF-8への変更は絶対あるはずなので今のうちに確認しておく
プロジェクト→プロパティ→リソース→テキストファイルエンコード→その他(UTF-8を選択)
これで保存される形式がUTF-8に変更されるはず。
今まで日本語で書かれていた文字が完全に化けてしまうので修正。

そして、コンテンツタイプの設定をWindows-31J→UTF-8へ変更するとキチンと見れる。

response.setContentType("text/html; charset=UTF-8");


ただ、コレだとプロジェクト単位で文字コードを指定する方法になってしまう。
もし、元々UTF-8のファイルで保存してあり、コンテナから継承(デフォルトの設定)でも
うまくいくようであればそちらを利用(変更しない)方が良いかもしれない。

んで、章とはあんまり関係ないけどいつも文字化けには悩まされるので
備忘として。

Tomcat5以降ののserver.xmlのConnectorタグにURIEncoding=UTF-8と付け加えて
コンテンツタイプにUTF-8としておくと現在日本で使われているほとんどのブラウザで無難らしい。
覚えておこう。

サーブレット側の出力とTomcatでの出力を同じエンコーディングにあわせておく。
server.xml

<Connector port="8080" protocol="HTTP/1.1"
       connectionTimeout="20000"
       redirectPort="8443"
       URIEncoding="UTF-8" />



HelloHtmlServlet.java

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class HelloHtmlServlet extends HttpServlet {
    /**
     *
     */
    private static final long serialVersionUID = -5815663197134766062L;

    public void doGet(HttpServletRequest request,
          HttpServletResponse response )
        throws IOException , ServletException {
    // getWriterする前にコンテンツタイプを設定しておく
    //charsetにはISO-8859-1、Shift_JIS、EUC-JP、UTF-8、Windows-31J、ISO-2022-JPが設定できるらしい
    response.setContentType("text/html; charset=UTF-8");
    
    PrintWriter out = response.getWriter();
    out.println("<HTML>");
    out.println("<HEAD>");
    out.println("<TITLE>HTMLサーブレット</TITLE>");
    out.println("</HEAD>");
    out.println("<BODY>");
    out.println("こんにちは");
    out.println("</BODY>");
    out.println("</HTML>");
  }
}



プレーンテキストを表示するサーブレットは読み飛ばして
明日は練習問題かCHAPTER6へ。
スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

ラム君(モヒカンVer)

Author:ラム君(モヒカンVer)
都内でプログラマのようなものをやっています。
まだまだ初心者ですがよろしくお願いします。

最新記事
最新コメント
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。