各位高手:jsp文件包含jsp文件时的中文问题

cherami 2001-10-09 02:46:51
一个jsp文件(假设名字为query.jsp)由几个文件组成,包含header.jsp,style.jsp,title.jsp,meunu.jsp,footer.jsp,
在query.jsp文件中,结构为:
<%@ include file="header.jsp" %>
<%@ include file="style.jsp" %>
<%@ include file="title.jsp" %>
<%@ include file="menu.jsp" %>
...
...
...
<%@ include file="footer.jsp" %>
而在header.jsp中的开头:
<%@ page contentType="text/html;charset=gb2312" import="java.sql.*,java.util.*"%>
结果在menu.jsp和query.jsp文件中的中文全部变成了乱码,但是从数据库中查询的结果正常,如果将header.jsp中的<%@ page contentType="text/html;charset=gb2312" import="java.sql.*,java.util.*"%>
移动到query.jsp的开头,则query.jsp中的中文都正常,而menu.jsp中的中文还是不正常!为什么呢?如何解决?
...全文
288 点赞 收藏 28
写回复
28 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
jacklondon 2002-01-15
response.setContentType("text/html; charset=GB2312");
或者response.setContentType("text/html; charset=UTF-8");
charset前面留一个空格
回复
cherami 2001-10-19
resin的国际化支持我觉得比tomcat好!resin好像也支持多平台。
回复
cocia 2001-10-19
看来必须要修改源码了阿!
另外:resin支持多平台么?
回复
lliang2 2001-10-18
谢谢你的信任和你的分!
回复
cherami 2001-10-18
lliang2(ll)的方法还有一个问题是对页面属性设置<%@ page contentType="text/html;charset=gb2312" import="java.sql.*,java.util.*"%>
必须放在query.jsp中,如果放在header.jsp中则query.jsp中的静态中文还是不能正常显示,只是其它被包含页面中的中文没有问题了。
回复
lliang2 2001-10-17
另外,我遇到你的这个问题时,就是这么修改的,很有效,没有发现什么不对的
回复
lliang2 2001-10-17
1.这种修改只适用于<%@ include 形式,要在最外层的jsp文件开头设置charset=gb2312
2.对于<jsp:include ,每个文件开头都设置charset=gb2312,不用修改任何tomcat的源
文件都是对的
回复
lliang2 2001-10-17
这说明你的jasper.jar文件可能不止一个,而你又没有全部覆盖,
看看你实际启动tomcat时的classpath吧
回复
cherami 2001-10-17
to secball(一片秋叶):
这个方法我试过,不行的。
回复
secball 2001-10-17
不知这样行不行:
你把charset=gb2312这个东西去掉,然后在页面里所有涉及到有中文的地方,就用这种形式。
{%>
....
<%=var%>//var就代表汉字
.....

<%}
我以前在用MYSQL时就是这样搞定的,不知在这里行不行,我只是随便说说而已。
回复
cherami 2001-10-17
OK,你的方法是对的,我把原来的那个jasper.jar文件在该目录下存为了jasper2.jar,结果tomcat启动的路径里面包含了它,而那个在类路径的后面,可能比前面的优先,结果。。。:)。非常感谢你的帮助!
另外我已经不用tomcat了,因为在页面间使用request.getParameter()传递参数时得到的中文还是需要进行编码转换,而resin这两个都没有问题,现在我的问题是我在使用apache的jakarta project的taglibs,其中的DBTags里面的一个标签getNumber在resin下不支持,而tomcat支持,哎,为什么免费的东西总有问题呢?
回复
cherami 2001-10-17
我不是没有对你的方法没有信心,只是不知道错在那里了,我在国外的一个站点上也看到说修改tomcat的源代码可以解决中文问题,但是没有具体的代码,我也不知道该改哪儿。我还装了tomcat4,不知道是否是这个原因,我在试试,不要急,我会给分的。
回复
lliang2 2001-10-17
如果哪位按照我说的能解决问题,请在此说一下,给大家一点信心。
回复
cocia 2001-10-17
http://www.csdn.net/expert/topic/318/318066.shtm
我的也是没有解决,使用<jsp:inclue...>
错误:
Page directive: can't have multiple occurrences of contentType
回复
cherami 2001-10-16
即使我将所有的<%@ include 形式换成<jsp:include 都不好用啊!!!!
你这样做过吗?我到底错在那里呢?
回复
cherami 2001-10-16
else if (match.equals("include")) {
JspUtil.checkAttributes ("Include directive", attrs,
includeDvalidAttrs, start);
attrs.put("encoding","gb2312");
System.out.println("ok");
}
我修改了你所说的类,并按照你的要求重新构造了jasper.jar文件,我确实看到了新的类文件的生成日期是我编译的时间,而且在你的要求上加了System.out.println("ok");,但是我重新启动tomcat后没有反应啊,既没有输出ok也没有看到menu.jsp中的中文正常,我甚至在该方法的入口处打印ok也没有任何反应,无论我使用的是<%@ include file="menu.jsp" %>
还是<jsp:include page="xxxxx.jsp" flush="true"/>,
问题出在什么地方呢?难道要将所有的<%@ include 换成<jsp:include 吗
回复
lliang2 2001-10-16
tomcat 修改方法
1。找到src\org\apache\jasper\compiler\Parser.java,打开它
2。找到函数public boolean accept(...
3。在这个函数下找到这样几行
else if(match.equals("include"))
JspUtil.checkAttributes("Include directive",attrs,includeDvalidAttrs);
4。这样修改
else if(match.equals("include"))
{
JspUtil.checkAttributes("Include directive",attrs,includeDvalidAttrs);
attrs.put("encoding","gb2312");
}
5。编译此文件,得到一堆.class文件
6。找到tomcat\lib\jasper.jar
7。使用jar命令行展开该文件,得到一个目录结构及文件
8。将5中产生的.class文件按照目录放在7中的对应目录下,覆盖原来的文件
9。使用jar命令行工具重新打包成jasper.jar文件
10。将9中生成的jasper.jar拷贝到tomcat\lib下,覆盖原来的文件
11。重启tomcat
大功告成
赶快加分!
回复
cherami 2001-10-16
当然想要了,如果有用,分数全归你!谢谢
回复
bigroc888 2001-10-16
<%@ page contentType="text/html;charset=gb2312"%>
回复
lliang2 2001-10-16
对于tomcat 3.2.1,这是它的一个bug,
包含文件中的汉字不能正确显示,解决的方法有两个
1。对每一个包含文件中的每一处汉字,进行字符集转换
2。修改tomcat的源代码,更正这个错误,然后重新编译,
如果想要修改方法,请回个帖!
回复
加载更多回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2001-10-09 02:46
社区公告
暂无公告