jsp中include使用html静态文件出现乱码问题

来源:互联网 发布:复变函数 知乎 编辑:程序博客网 时间:2024/05/17 02:10

问题:在jsp中include jsp动态页面不会产生乱码问题,可是如果include file="*.html"时候出现了中文乱码的问题


问题根源:pageEncoding的问题


解决方法:

1.修改html文件的pageEncoding属性

2.修改web.xm文件的配置


思路:

1.为什么使用使用jsp时不出错,而使用html的时候出错


原理:

这里include中的东西要先被读成二进制(这里用到一次编码,即encoding)然后再算到包含他的父jsp中,这个父jsp用的是什么编码格式呢,也是看encoding

一般myeclipse中自己生成的jsp文件有这么一行:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

就说明了这个父jsp用的encoding格式是utf-8,那么这个include中的html的encoding也应该是utf-8


答案:

在jsp文件中包含一个jsp文件,2个文件都有上面一行page’标签‘,那么他们都是以utf-8的格式去解析,当然不会出错。

而在html中没有这一行东西,所以他就出错了,html中的

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

只是指定了到时候该程序发送到浏览器的时候,你浏览器按照utf-8的格式来搞,而现在在服务器我就已经因为编码的问题挂掉了。


所以应该怎么做呢,一可行的办法是在html文件的第一行加上

<span style="white-space:pre"></span><%@ page language="java" pageEncoding="utf-8"%>
到时候这句话就被解析了,程序到这里就知道了以utf-8的格式来解析这段html代码,准确说应该是编码。


2.是不是可以跟request.setCharacterEncoding()一样来通过修改配置文件呢?

答:可以的,这个可以在web.xml中修改,网上的一些答案,答案是给出来的,怎么来的呢,看着有些复杂,这里分析一下,就不复杂了。

首先,配置web.xml文件嘛,就要知道一个web程序,他的web.xml文件由两部分组成,一部分在WEB-INF目录下的web.xml,也就是最亲近的,我们最常用的那个配置文件;另外一部分他在tomcat里面存放着,当WEB-INF下没有web.xml文件,或者说是WEB-INF下的web.xml文件中有些属性没有指明,那么这些配置,用的都是这个默认的web.xml配置文件。这个文件他在%CATALINA_HOME%/conf/下

现在我要修改include html文件的读取(编码)格式,怎么改,我想法就是先去找这个web.xml文件,然后去看下他原先怎么写的,然后把他原先写的拷过来,修改一下编码格式,放到当前的web.xml中(覆盖,并且保证其他相关的不变)。可是并没有这个到<jsp-config>这个标签,那么好,既然没找到,就说明我可以不去管其他属性了,应该默认的那都没有设置,那我重写<jsp-config>标签的时候就不用担心把原本有用的配置给覆盖了。那就直接在web,xml文件里面的<web-app>节点内加上:

<span style="white-space:pre"></span><jsp-config><jsp-property-group><url-pattern>*.html</url-pattern><page-encoding>UTF-8</page-encoding></jsp-property-group></jsp-config>
其他写多了也是废话,,,这样更清晰,什么意思一看就明白。

这里在html中的

<span style="white-space:pre"></span><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
别忘了,不然在服务器没问题了,到了客户端挂了。

0 0