SiteMesh在weblogic10下部署中文乱码

cuisea 2011-08-17 03:06:42
自己在Eclipse3.6下做了个测试项目,使用了sitemesh2.4做装饰器,在Tomcat6.0下部署显示正常。迁移到Weblogic10.3.4下被装饰的目标页面出现了乱码,装饰器页面的中文显示正常,如图:
正常页面:

我的目标页面很简单:index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<div style="background-color:yellow">测试SiteMesh</div>
</body>
</html>

装饰页面:decorator.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
<html>
<head>
<title>My Site - <decorator:title default="Welcome!" /></title>
<decorator:head/>
</head>
<body>
<decorator:body/>
<p><small>使用了sitemesh页面装饰器</small></p>
</body>
</html>

在网上搜索资料大概有两种方式:
1、修改domains\mydomain\bin\setDomainEnv.cmd,在set JAVA_OPTIONS=%JAVA_OPTIONS%后面添加 -Dfile.encoding=UTF-8,这样被装饰页面中文乱码的问题解决了,但是weblogic控制台中文信息出现乱码
2、修改sitemesh源代码,com.opensymphony.module.sitemesh.filter.TextEncoder.java,将private static final String DEFAULT_ENCODING = System.getProperty("file.encoding");修改为private static final String DEFAULT_ENCODING =”UTF-8”; 但是我在Tomcat下调试发现根本没有执行TextEncoder里的方法。
我又装了Eclipse的Weblogic插件来在Eclipse下启动Weblogic,希望能够调试,可怪异的是:这样部署没有出现中文乱码,而如果我先启动Weblogic再部署项目的话是乱码的,完全晕了,希望高手指点一下,非常感谢!
ps:去掉sitemesh装饰在tomcat和sitemesh下都不会出现乱码。
...全文
219 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zl3450341 2011-08-17
  • 打赏
  • 举报
回复
恩,问题解决了就好。
cuisea 2011-08-17
  • 打赏
  • 举报
回复
在Eclispe下使用Weblogic单步调试了一下,发现Tomcat和Weblogic下com.opensymphony.module.sitemesh.filter.Buffer类的getContents()方法执行方式还真不一样,在Tomcat下是通过bufferedWriter.toCharArray()返回数据,而weblogic下是通过TEXT_ENCODER.encode(bufferedStream.toByteArray(), encoding),同时这个encoding参数为null,所以使用了TextEncoder.DEFAULT_ENCODING,而System.getProperty("file.encoding")的值为GBK,与页面编码UTF-8不一致导致乱码。
cuisea 2011-08-17
  • 打赏
  • 举报
回复
如果明天没人能帮忙解决就结贴,纠结了两天,累了
cuisea 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zl3450341 的回复:]
爱莫能助。。

我的渲染代码,是从openfire中抠出来的,然后自己加以改造。也是基于sitemesh
[/Quote]
可能自己太纠结这个了吧
zl3450341 2011-08-17
  • 打赏
  • 举报
回复
爱莫能助。。

我的渲染代码,是从openfire中抠出来的,然后自己加以改造。也是基于sitemesh
cuisea 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 luohuijun619 的回复:]
Tomcat下的乱码好解决,weblogic不知道,百度吧
[/Quote]
这也不全是乱码,sitemesh装饰页面的中文显示正常,被装饰的内容中文乱码,还是与sitemesh有关。
luohuijun619 2011-08-17
  • 打赏
  • 举报
回复
Tomcat下的乱码好解决,weblogic不知道,百度吧
cuisea 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zl3450341 的回复:]
我在tomcat下也没有出现乱码,没有deploy到jboss中去,

乱码,我觉得还是改源码比较好。。
[/Quote]
我在Tomcat下调试sitemesh,发现运行到com.opensymphony.module.sitemesh.filter.Buffer.getContents()方法中bufferedWriter不为null,而bufferedStream为null,所以就执行了bufferedWriter.toCharArray()方法,而没有执行TextEncoder.encode(byte[] data, String encoding)方法。所以我认为修改TextEncoder.DEFAULT_ENCODING变量没有作用,由于下载的sitemesh2.4源码有些错误所以本人没有修改后打包测试。。。。
剑神一笑 2011-08-17
  • 打赏
  • 举报
回复
很久没用weblogic了 都忘了
zl3450341 2011-08-17
  • 打赏
  • 举报
回复
我在tomcat下也没有出现乱码,没有deploy到jboss中去,

乱码,我觉得还是改源码比较好。。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧