JSPは命令includeを含んでhtmlファイルを含んで文字化けして分析して解決します

2909 ワード

JSPページにおけるpageEncodingとcontentTypeの2つの属性の違いについて:pageEncodingはjspファイル自体のコードcontentTypeのcharsetでありサーバがクライアントに送信する際のコンテンツコードである
JSPは2回の「コード」を経て、第1段階はpageEncoding、第2段階はutf-8からutf-8、第3段階はクライアントブラウザで見たページでcontentTypeを使う.
 
第1段階はjspのコンパイルである.JAvaは、pageEncodingの設定に従ってjspを読み出し、その結果、指定された符号化スキームによって統一されたUTF-8 JAVAソースコード(すなわち.java)に翻訳され、pageEncodingの設定が間違っていたり、設定されていなかったりした場合、中国語の文字化けが発生します.
 
第2段階はJAVACのJAVAソースからjava byteCodeへのコンパイルであり、JSP作成時にどのような符号化スキームを用いたかにかかわらず、この段階を経た結果はすべてUTF-8のencodingのjavaソースである.
JAVACはUTF-8のencodingでjavaソースコードを読み出し、UTF-8 encodingのバイナリコード(すなわち.class)にコンパイルする.これはJVM対定数文字列がバイナリコード(java encoding)内で表現される仕様である.
 
第3段階はTomcat(またはそのアプリケーションcontainer)がフェーズ2のJAVAバイナリコードを読み込み実行し、出力した結果、つまりクライアントで見たものであり、このときフェーズ1とフェーズ2に隠されたパラメータcontentTypeが機能する
一方、include命令は、第1段階より前に実行するものであり、これは第1段階より前であることに注意するので、ファイルを含むファイルと含まれるファイルの符号化がutf-8でないと、この命令は動作が正常ではなく、含まれるファイルを元の符号化から含むファイルの符号化に正しく変換できず、文字化が乱れる現象が発生する.
 
解決策はいろいろありますが、簡単な方法として、ファイルを含むpageEncodingをutf-8に設定するとともに、ファイルを含むpageEncodingもutf-8に設定し、含まれるファイルがhtmlであれば、あなたが使用するideがeclipseであれば、このようにして、含まれるファイル名を右クリックして属性(properties)、Resourceの下でtext file encodingでutf-8を選択することができます.これにより正常に表示することができる.Dream weaverのような他の編集ツールを使用すると、ページの符号化を変更する応答がある.もう一つの方法は面倒ですが、使いやすいので、いろいろな符号化方式をサポートし、webを修正するだけです.xmlファイルでいいです.
 
方法は:web.xmlに追加(javaeeバージョン2.5は
 
<web-app xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5″>

	<jsp-config>
		<jsp-property-group>
			<description>jsp encoding example</description>
			<display-name>JSPConfiguration</display-name>
			<url-pattern>*.jsp</url-pattern>
			<el-ignored>true</el-ignored>
			<page-encoding>gbk</page-encoding>
			<scripting-invalid>false</scripting-invalid>
			<include-prelude></include-prelude>
			<include-coda></include-coda>
		</jsp-property-group>
		<jsp-property-group>
			<description>html encoding example</description>
			<display-name>JSPConfiguration</display-name>
			<url-pattern>*.html</url-pattern>
			<el-ignored>true</el-ignored>
			<page-encoding>gbk</page-encoding>
			<scripting-invalid>false</scripting-invalid>
			<include-prelude></include-prelude>
			<include-coda></include-coda>
		</jsp-property-group>
	</jsp-config>
</web-app>