博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jsp通过include指令引入html乱码的解决方法
阅读量:7111 次
发布时间:2019-06-28

本文共 2524 字,大约阅读时间需要 8 分钟。

hot3.png

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

jsp页面内容:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>        
  
测试JSP的include指令      <%@include file="in.html" %>
  <%@include file="in1.jsp"%>
  <%@include file="in2.html" %>      

in.html文件内容:

      
  
      我是in.html文件的内容      

 

生成的Servlet内容:

out.write("\r\n");  out.write("\r\n");  out.write("\r\n");  out.write("
\r\n");  out.write("
\r\n");  out.write("\r\n");  out.write("\r\n");  out.write("ææ¯in.htmlæ件çå容\r\n");  out.write("\r\n");  out.write("\r\n");  

 

通过上面生成的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添加<% pageEncoding="UTF-8"%>,尽管html不能识别该指令,但通过include指令引入时该指令就能起作用了,如下:

<%@page pageEncoding="UTF-8"%>        
  
      我是in.html文件的内容      

方法二:在web.xml里统一配置pageEncoding的编码,在web-app标签里添加如下配置:

采用<%@ include file=""%>方式包含文件时,需要在被包含文件里指定其pageEncoding.

否则无法获取到对应的pageEncoding,则tomcat采用iso8850-1来读取被包含文件,被包含文件含有中文时就会出现乱码。但如果include的是一个html,txt等静态文件就比较麻烦。现在测试出一个方案就是在web.xml里添加:

   
         
JSPConfiguration
         
*.html
         
UTF-8
     

就可以了。指定以html结尾的文件都以utf-8编码去读取。

      
          
html encoding
          
JSPConfiguration
          
*.html
          
true
          
UTF-8
          
false
          
          
      
  
  

方法一和方法二原理是一样的,都是通过设置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://my.oschina.net/u/2331760/blog/1591859

你可能感兴趣的文章
VMWARE 7 USB设备的服务VMware USB Arbitration 无法启动,解决
查看>>
Arms是一个整合了大量主流开源项目的Android Mvp快速搭建框架
查看>>
下一代大数据计算引擎之争,你更看好 Spark 还是 Flink?
查看>>
上下文交换
查看>>
vim操作使用
查看>>
烂泥:【解决】Ubuntu下使用SSH连接centos系统很慢
查看>>
C语言 模拟三次密码输入
查看>>
NagiosQL插件的安装应用
查看>>
MVC设计模式的总结
查看>>
muddleftpd配置和用法
查看>>
Oracle 学习之RMAN(九)BACKUP常用参数
查看>>
如何对待上司的弱项(或缺点)
查看>>
【C#入门经典(第五版)】第二章 编写C#程序
查看>>
Cassandra – 数据结构设计概念和原则
查看>>
编译安装python3.7和ipython
查看>>
SSDCRM正式推出基于linux系统的一键安装版
查看>>
js prototype 。 网上摘抄
查看>>
Fastdfs安装心得
查看>>
sql入门
查看>>
统一设置Eclipse编码
查看>>