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
コメントする