jsp通过include指令引入html乱码的解决方法

本文转自:https://blog.csdn.net/gnail_oug/article/details/51707061

在jsp中使用<%@include file="in.html" %>导入html页面时,如果html页面里有中文,就会产生乱码。检查jsp文件和html文件的编码,编码一致,都是统一使用的utf-8,检查生成的Servlet类文件,发现里面直接就乱码了。

通过生成的Servlet内容可以看出,在将jsp文件编译成java类这一过程就出现了乱码,问题肯定是编码一致的,而设置编码的有两个:pageEncoding和contentType,这两个属性的区别如下:

pageEncoding是jsp文件本身的编码,是指定web容器将jsp编译成java文件时采用什么编码读取jsp文件。

contentType的charset设置的编码是指服务器发送给客户端时的内容编码。

而客户端访问一个jsp文件要经过如下三个阶段:

1、(第一次访问时)web容器将jsp编译成java文件,这个阶段编译器会根据pageEncoding设置的编码读取jsp文件,翻译成统一的utf-8的Servlet类,如果pageEncoding设置错误或未设置,编译出来的java文件就会出现中文乱码。

2、由javac将java源码编译成class字节码,javac用utf-8编码读取java源码,编译成utf-8编码的二进制文件。

3、web容器载入class字节码文件,将内容输出结果到客户端,这一过程内容的编码为contentType设置的编码。

由此可见,是由于pageEncoding设置问题导致翻译jsp时乱码。有两种方式处理:

方法一:在每个引入的html文件设置pageEncoding编码,即在html添加<%@page pageEncoding="UTF-8"%>,尽管html不能识别该指令,但通过include指令引入时该指令就能起作用了,如下:

<%@page pageEncoding="UTF-8"%>

在<!DOCTYPE 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)

原文地址:https://www.cnblogs.com/marvelousone/p/9074459.html

时间: 2024-11-07 19:43:51

jsp通过include指令引入html乱码的解决方法的相关文章

jsp用include指令引入html时的乱码问题

在jsp中用include指令引入html文件时遇到的问题: jsp和html都可以正确的显示,当jsp引入html时访问jsp页面html出现乱码,jsp原有的输出无乱码,解决方案: 在html第一行加入:<%@ page language="java" import="java.util.*" pageEncoding="gb18030"%> jsp的编码格式为:<%@ page language="java&qu

JSP表单提交出现中文乱码的解决方法

1)post方式 在servlet的doGet( )  doPost( )  中增加以下代码: response.setContentType("text/html;charset=utf-8"); request.setCharacterEncoding("utf-8"); 2)get方式 在tomcat中con/server.xml中修改 <Connector port="8088" protocol="HTTP/1.1&qu

JSP中include指令和include动作区别

首先 <%@ include file=" "%>:为指令元素 <jsp:include page=" " flush="true"/>:为 动作元素 先说指令元素: include指令元素读入指定页面的内容.并把这些内容和原来的页面融合到一起. 然后经过两个阶段: 1.将jsp翻译成 servlet  2.servlet 翻译成 .class文件 这样的话,在被引入文件中请不要加入 contentype 的属性 ,因为j

[JSP]JSP中include指令和include动作的区别

include指令是编译阶段的指令,即include所包含的文件的内容是编译的时候插入到JSP文件中,JSP引擎在判断JSP页面未被修改,否则视为已被修改.由于被包含的文件是在编译时才插入的,因此如果只修改了include文件内容,而没有对JSP修改,得到的结构将不会改变,所以直接执行已经存在的字节码文件,而没有重新编译.因此对不经常变化的内容,用include指令是合适的,如果需要的内容是经常变化的,则需要动作元素<jsp:include>.下面将详细区分他们之间的不同 1.include指

jsp的include指令:静态包含

include编译指令的语法如下: <%@include file="relativeURLSpec"%> 最佳实践:如果被嵌入的文件经常需要改变,建议使用动态包含操作指令,因为它是动态的include语句. 静态包含的意义:包含页面在编译时将完全包含了被包含页面的代码.即只生成一个Servlet的class文件. 注意:静态包含还会将被包含页面的编译指令也包含进来,如果两个页面的编译指令冲突,那么页面就会出错. jsp的include指令:静态包含,布布扣,bubuko.

AJAX在Post中文的时候乱码的解决方法

加上设置字符编码的方法: response.setHeader("charset","gb2312"); ******************************************** 看到的说明原文如下: 用AJAX来GET回一个页面时,RESPONSETEXT里面的中文多半会出现乱码,这是因为xmlhttp在处理返回的responseText的时候,是把resposeBody按UTF-8编码进解码考形成的,如果服务器送出的确实是UTF-8的数据流的时候

zabbix2.2.3中乱码的解决方法

当将zabbix2.2.3中的语言改为中文后图形后显示如下 解决方法: 1.查看zabbix的字体文件 [[email protected] ~]# cd /usr/share/zabbix/fonts/[[email protected] fonts]# lsgraphfont.ttf 2.将windows系统中你想用的字体文件复制到linux系统中,然后再将字体文件复制到zabbix字体所在的目录中 [[email protected] ~]# cp STXIHEI.TTF /usr/sha

Sublime Text 3打开txt中文乱码的解决方法

Sublime Text是一个非常强大的编辑器,可是对中文的支持并不好,在Sublime Text 2 时,可以通过命令行的方式安装编码包来解决,但Sublime Text 3不能通过这样的方式解决 在安装完Sublime Text 3后要下载一个ConvertToUTF8包放到C:\Users\用户名\AppData\Roaming\Sublime Text 3\Packages(安装目录可能不是这个,但可以在sublime中preference - browse packages打开此目录)

Ubuntu Server 14.04 选择中文安装后日期乱码的解决方法

Ubuntu Server 14.04选择中文安装后,默认的/etc/default/locale会使某些中文日期乱码,执行ll和date可见. /etc/default/locale 原来内容为: LANG="zh_CN.UTF-8" LANGUAGE="zh_CN:zh" LC_NUMERIC="zh_CN" LC_TIME="zh_CN" LC_MONETARY="zh_CN" LC_PAPER=&q