JSP通过include标签引入html出现乱码问题

今天使用jsp的include标签引入html文件时发现出现了乱码问题,通过百度后解决了,写个小水文记录下

jsp文件

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>登录</title>
  </head>
  <body>
 
<!--
    <%@include file="title.html"%>
-->
    登录成功
 
    老王
    123456
 
  </body>
</html>

 


html文件

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>导航栏</title>
<style>
*{
margin: 0px;
}
#title1{
width: 100%;
height: 50px;
background-color:coral;
}
.li1{
text-decoration: none;
display: inline;
margin-left: 70px;
margin-right: 70px;
font-weight: bold;
}
#ul1{
height: 50px;
padding-top: 16px;
text-align: center;
}
#search{
height: 25px;
position: absolute;
left: 20px;
top: 10px;
}
</style>
</head>
<body>
<div id="title1">
<ul id="ul1">
<li class="li1">开始</li>
<li class="li1">选项</li>
<li class="li1">编辑</li>
<li class="li1">工具</li>
<li class="li1">退出</li>
<input type="text" id="search">
</ul>
<div>

</div>
</div>
</body>
</html>

 


两个文件都用了UTF-8编码,并且单独显示的时候都没有问题,但是当通过JSP的include标签把html页面引入后显示时出现了乱码

 

 

 

JSP没有乱码,引入的html发生了乱码

首先看看jsp翻译的java文件

 

 

 

红线圈住的部分是引入的html文件,可以发现在翻译为java文件时就发生了乱码,但是绿线圈住的jsp文件则没有发生乱码.两个文件都已经设置了UTF-8编码,怎么只有一个乱码呢?

那jsp翻译到java时我在两个页面设置的两个编码方式都是怎么被识别和处理的呢

在jsp我指定了contentType为text/html;charset=utf-8.表示jsp翻译后servlet给客户端传送html代码时告诉客户端文件的格式为utf-8编码的html文件.

ps:在jsp还有一个pageEncoding属性,这两个属性的区别如下:

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

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

在html中我指定了charset=utf8,作用是告诉客户端展示这个html文件时用utf-8编码.

 

这其中是不是少了什么呢?

少了html指定从jsp翻译为java文件时规定的编码,在jsp中有pageEncoding这个属性指定(我的编译器默认设定为utf-8),但是html就缺少了这个配置,所以包含了html的jsp文件在翻译为java文件时就不知道该怎么处理这段html代码了,但是jsp文件原本的代码却可以正常翻译,这才导致了最后的结果是jsp正常,html部分发生异常.

解决

在html文件的html标签标签下加入这行代码

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

html本身并不能识别这个指令,所以它并不影响html文件的使用,并且当这个html被引入jsp文件后被翻译为java文件时这段代码能够让html文件以utf-8编码方式被翻译,就不会出现之前的错误了.

 

 

 

还有一种方法就是在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>

 



posted @ 2021-11-30 22:42  ZikC  阅读(769)  评论(0编辑  收藏  举报