为了网站的风格统一,于是就把网站的header和footer给独立出来了,其他的页面的头和脚都来引用它就行了,但是实际上这样做的时候,因为footer我们经常喜欢使用的是html的格式,这样的话,我们就会经常的出现乱码,有的时候还不好解决,你就算是把html重新的使用utf-8的格式保存了一遍还是没有用的,再去访问还是乱码。
问题:jsp里面动态引用footer.html文件html 文件里的中文乱码
检查:
footer.jsp文件的编码方式都指定了,设置编码的有两个:pageEncoding和contentType均一致
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
footer.html文件也指定了编码方式:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
我是某某某公司版权所有
</body>
</html>
解决办法:
a. 在footer.html的文件最上方加上<%@page pageEncoding="UTF-8"%> ,尽管html不能识别该指令,但通过jsp文件里的include指令引入时该指令就能起作用了 :
<%@page pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
我是某某某公司版权所有
</body>
</html>
b.把footer.jsp文件里的动态引用<jsp:include page="footer.html" >,改成静态引用<%@ include file="footer.html"%>。这一步可有可无,具体看项目是否不再乱码。记得要清理缓存再查看运行结果。
知识点补充:
JSP中有两种包含:
静态包含:<%@ include file="被包含页面"%>
动态包含:<jsp:include page="被包含页面" flush="true">
JSP在WEB服务器中都要转换成一个java文件,java文件再编译成一个class文件。当请求JSP页面的时候,实际上运行的是这个class文件。
静态包含发生在:JSP---->java文件阶段。
动态包含发生在:执行class文件阶段。动态加入。
静态包含:只生成一个java文件,动态包含:生成多个class文件。
静态导入适合导入不会经常变化的资源,而动态导入适合一个时常变化的资源例如JSP文件。
pageEncoding是jsp文件本身的编码,是指定web容器将jsp编译成java文件时采用什么编码读取jsp文件。
contentType的charset设置的编码是指服务器发送给客户端时的内容编码。
参考链接:http://blog.csdn.net/gnail_oug/article/details/51707061
方法二动态引用我试了不管用,还有一种办法就是改成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>