【springMVC】ブラウザで文字化けした時の対応方法

spring

Spring MVCでブラウザ表示時日本語が文字化けしていた時の対処法を記述します。

springsource-tool-suite-webアプリを自動生成してみよう編」でも日本語化対応については解説しました。日本語化対応はweb.xmlにフィルターを追加することで文字化けを防ぐことが出来ます。

springMVCのひな型を作成した時に、こちらの日本語化対応は入っていません。自分で入れる必要があります。

[スポンサーリンク]

この章でやること

web.xmlにフィルター追加(日本語文字化け対応)
サーバ側の設定で、server.xmlにエンコードタイプを指定

web.xmlに文字エンコードフィルターを追加します

全てのリクエストパスがUTF8でエンコードされる設定です。
環境によってはUTF8を変更してもOKです。(多分UTF8で問題ないと思います。)

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

	<!-- マルチバイト対応 ここから追加して下さい。 -->
	<filter>
		<filter-name>characterEncodingFilter</filter-name> 
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
		<init-param> 
			<param-name>encoding</param-name> 
			<param-value>UTF-8</param-value> 
		</init-param> 
		<init-param> 
			<param-name>forceEncoding</param-name> 
			<param-value>true</param-value> 
		</init-param> 
	</filter>
	<filter-mapping>
		<filter-name>characterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<!-- add マルチバイト対応 ここまで -->
・
・
・
・
</web-app>

注意!!

springMVCプロジェクトをSTSで作成した場合、web.xmlにエンコードの設定は入っていないので自分でエンコードの設定を入れる必要があります。うーん。デフォルトで入れてくれてもよいような気もしますが、、、
springMVCプロジェクトをSTSで作成する方法は、「springsource-tool-suite-webアプリを自動生成してみよう編」を参照して下さい。

Tomcatの設定を変更する。

web.xmlの修正だけで文字化けが直らなかった場合、Tomcatのserver.xmlを修正する必要があります。
server.xmlの「Connector」にURIEncoding="UTF-8"を入れて下さい。

<Connector 
    acceptCount="100" 
    connectionTimeout="20000" 
    executor="tomcatThreadPool" 
    maxKeepAliveRequests="15" port="${bio.http.port}" 
    protocol="org.apache.coyote.http11.Http11Protocol" 
    redirectPort="${bio.https.port}" 
    URIEncoding="UTF-8"/>

Eclipse上で動かしている場合は、「Servers」のserver.xmlを修正する必要があります。
webbrowser-japanese-characters1

最後に

文字化けについては以上です。web.xmlにエンコードフィルターを入れること自体は特に珍しいことではないと思います。javaでWebアプリを作る際にはほぼエンコードフィルターは入れていたと思います。springMVC以外でWebアプリを作る際にも注意しましょう。