Technorati タグ:
java,
filter,
プログラム javaでAjaxを使用すると文字コードをUTF-8にすべてのソースをあわせないと文字化けがおきます。
jspはUTF-8で動かすのはしょうがないとしても、その裏で動くservletやデータベースの文字コードを変えないでjavaでAjaxを再現する方法です。
Ajaxは文字コードUTF-8で作成。
Java側はwindows-31Jで作成。
jspでAjaxを動く仕掛けがあります。
そのため、jspの文字コードをUTF-8で作成しないと動きません。
○jsp(UTF-8)→servlet(windows-31J)でデータを送った場合。
文字化けを起こします
○servlet(windows-31J)→jsp(UTF-8)でデータを送った場合。
文字化けを起こさない。
以上のことからjsp→servletとデータを送る間ににservletの機能のfilterを使用して文字コードUTF-8に変換して文字化けを直しました。
[コード]
package filter;
import java.io.*;
import javax.servlet.*;
public class EncodingFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
// エンコーディング指定
req.setCharacterEncoding("UTF-8");
System.out.println("Filter:" + req.getParameter("test"));
// 元々要求されていたリソースを呼び出します
chain.doFilter(req, res);
}
public void init(FilterConfig config) throws ServletException {
}
public void destroy() {
}
}
---
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<filter>
<filter-name>filter1</filter-name>
<filter-class>filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern>/data</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>servlet</servlet-name>
<servlet-class>servlet.Data</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servlet</servlet-name>
<url-pattern>/data</url-pattern>
</servlet-mapping>
</web-app>
[用語]
フィルタとは?
Java Servlet API2.3から導入された新機能で、
クライアントからの要求になんらかの処理をしてサーブレット、
JSPまたはその他のリソースにその要求を渡す機能のこと。
[参考にしたサイト]
【Java & Ajax】UTF-8 でない HTML での Ajax 通信方式
http://yashawks.seesaa.net/article/31369773.html
サーブレット(フィルタ)編
http://www.hellohiro.com/filter.htm