java web 在jsp中使用include指令导入带中文的HTML文件乱码问题

在jsp中会用<%@ include file= "pageName.html" %>导入带中文的HTML文件时,最后编译浏览网页时会出现乱码问题。

MyHtml.html代码文件:

java web 在jsp中使用include指令导入带中文的HTML文件乱码问题


Index.jsp代码文件

java web 在jsp中使用include指令导入带中文的HTML文件乱码问题

调试部署后在浏览器中浏览乱码:

java web 在jsp中使用include指令导入带中文的HTML文件乱码问题

我们在打开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之后就能起作用了。如下:

java web 在jsp中使用include指令导入带中文的HTML文件乱码问题

java web 在jsp中使用include指令导入带中文的HTML文件乱码问题


方法二:在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)