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


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

jsp文件

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

  
    登录
  
  
 

    登录成功
 
    老王
    123456
 
  


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标签里添加如下配置:



html encoding
JSPConfiguration
*.html
true
UTF-8
<scripting-invalid>false





相关