要求オブジェクトからパラメタの値を取得する場合には、入力フォームの文字コードを意識した処理をする必要があります。そのため、Webアプリケーションでは文字コードを統一しておくことをお勧めします。
HTML、JSPおよび、サーブレットについては、以下のように文字コードを設定します。
Webコンポーネント | 設定方法 | 記述例 |
|---|---|---|
HTML | metaタグのContent-Type(charset)の値で指定します。 | <meta http-equiv="Content-Type" content="text/html; charset=Windows-31J" /> |
JSP | pageディレクティブのcontentType属性でHTTPヘッダのContent-Type(charset)の値を指定します。 | <%@ page language="java" contentType="text/html; charset=Windows-31J"%> |
サーブレット | HttpServletResponseインタフェースのsetContentTypeメソッドでHTTPヘッダのContent-Type(charset)の値を指定します。 | res.setContentType("text/html; charset=Windows-31J"); |
ポイント
JSPでは、ファイル保存時の文字コードを別に指定できます。pageディレクティブのpageEncoding属性に記述します。
HTMLとJSPの新規ウィザードでは、ファイル生成時に文字コードを埋め込むための方法を提供しています。埋め込む文字コードについては、ワークスペース単位に指定でき、それぞれ設定ダイアログボックスの以下で指定します。
HTML: [Web] > [HTMLファイル]
JSP: [Web] > [JSPファイル]
フィルタで文字コードを考慮する場合は、たとえば、以下のクラスを作成し、web.xmlでフィルタマッピングを定義する必要があります。
この例では、web.xmlの初期パラメタに文字コードを指定し、このフィルタクラスを利用する環境によってカスタマイズできるようになっています。そのため、初期パラメタについても定義する必要があります。
フィルタでの文字コードの考慮例
package filter;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class flt_request implements Filter {
private FilterConfig config=null;
public void init(FilterConfig conf){
this.config=conf;
}
public void destroy(){}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws ServletException, IOException {
request.setCharacterEncoding(config.getInitParameter("encoding"));
chain.doFilter(request,response);
}
} |
注意
setCharacterEncodingの文字コード指定は、POSTメソッドには有効ですが、GETメソッドがパラメタを渡すURL部分には適用されないため、GETメソッドでは有効になりません。