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>

详细内容可以查看 https://blog.csdn.net/gnail_oug/article/details/51707061 谢谢博主对我帮助.

评论 7 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:岁月 设计师:pinMode 返回首页

打赏作者

Aoess丶

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值