java web 在jsp中使用include指令導入帶中文的HTML文件亂碼問題

在jsp中會用<%@ include file= "pageName.html" %>導入帶中文的HTML文件時,最後編譯瀏覽網頁時會出現亂碼問題。

MyHtml.html代碼文件:



Index.jsp代碼文件


調試部署後在瀏覽器中瀏覽亂碼:


我們在打開tomcat下由jsp編譯成對應的Java源碼文件,此時發現這裏面對應從HTML文件中導入部分的編譯成的Java源碼也是亂碼的。這可以猜想,出現亂碼的問題應該出現在把jsp文件轉換成Java類的過程中。

設置編碼的代碼有兩個:pageEncoding和contentType,他們有,以下區別:

1、(第一次訪問時)web容器將jsp編程成Java文件,這個階段編譯器會根據pageEncoding設置的編碼來讀取jsp文件,翻譯成utf-8的Java類文件。,如果pageEncoding設置錯誤或者未設置,編譯出來的Java文件就會出現亂碼。

2、由javac將Java類的源碼編譯成.class字節碼文件,javac將用utf-8編碼讀取Java源碼,編譯成二進制文件。

3、web容器載入class字節碼文件,將內容輸出到客戶端,這一過程內容的編碼爲contentType設置的編碼。

可以分析出,出現亂碼的問題是HTML文件並沒指定pageEncoding的編碼。

有兩種解決方法:

方法1、在每個將要被指令引入的HTML文件前聲明文件的pageEncoding的編碼。即在<html>標籤前添加<%@ page pageEncoding=”utf-8”%>。儘管HTML無法識別該指令,但是通過include指令引入jsp之後就能起作用了。如下:




方法二:在web.xml裏統一配置pageEncoding的編碼,在web-app標籤裏添加如下配置:

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


方法一和方法二原理是一樣的,都是通過設置pageEncoding編碼來指定jsp將html文件include時使用的編碼。

方法一和方法二任選一種即可,如果同時使用需要注意兩個地方設置的pageEncoding編碼必須一致,否則將會報如下編碼不一致的錯誤:

org.apache.jasper.JasperException: /in.html (line: 1, column: 2) Page-encoding specified in jsp-property-group (UTF-8) is different from that specified in page directive (GBK)



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章