|
jsp中include HTML页面,中文乱码解决办法(tomcat)
最近做了个私人项目,用到include,为了维护人员方便,所以想引入静态的html页面。本来一切都很顺利,没想到引入的html都是乱码。一看就知道编码问题,页面编码我都采用utf-8,所以在html页面头部加上<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />,心想这下应该没问题了,可运行时还是不行。没办法,只好暂时把include的页面改成jsp的,并在头部加上<%@ page contentType="text/html; charset=utf-8" %>运行一切ok.
奥运结束,终于有时间解决这个问题了。上网上一通海查,遇见这种问题的还真不少,可给的解决回复都是一堆屁话,没一个能解决实际问题的。那就自己动脑解决吧。
先看一下include 的用法
动态INCLUDE
用jsp:include动作实现 <jsp:include page="included.jsp" flush="true" />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。
静态INCLUDE
用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面<%@ include file="included.htm" %>
主要有两个方面的不同
1. 静态include的结果是把其他jsp引入当前jsp,两者合为一体
动态include的结构是两者独立,直到输出时才合并( 看看jsp生成的java文件就可以知道了)
2.正是因为这样,动态include的jsp文件独立性很强,是一个单独的jsp文件,需要使用的对象,页面设置,都必须有自己创建,当然,还好它和include它的页面的request范围是一致的.
而静态include纯粹是把代码写在外面的一种共享方法,所有的变量都是可以和include它的主文件共享,两者高度紧密结合,不能有变量同名的冲突.而页面设置也可以借用主文件的.
可以看出静态include不管是jsp,html,还是txt文件,都会作为jsp页面来处理,如果页面中没有设置编码,系统会以默认编码方式编译,如果与你采用的编码不同就会出现乱码。所以不管是jsp,html,还是txt都需要指定编码,如:<%@ page contentType="text/html; charset=utf-8" %>,但这种<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />是不管用的,只会作为页面内容来处理。 |
|