weblogic需要注意的问题

这几天,将一个原来在tomcat下的项目移植到weblogic上,开始接到这个任务的时候,觉得没啥问题,毕竟只是个服务器而已。开始运用是跑在tomcat 5.0下 jdk 1.4 一切正常,当我把项目移植到weblogic8.16上时出了几个让我头疼的问题:
1 action配置里的 scope=“request”始终报错,死活通不过。具体错误忘了记下来。
2 页面中文乱码。(项目里的所有页面均有<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />)。
3 项目里用于获取服务器ip地址的getRequest().getLocalAddr(),getRequest().getLocalPort()方法报不存在,getRealPath("")以及getRealPath(".")均返回不正确的值。
4 原来用ajax方法从后台输出的中文返回为乱码。
以上方法在tomcat5.0上均正常。
这让我很郁闷。
对于第一个问题,将所有request换成prototype,实现效果一样,在weblogic8.16下通过。
第二个问题,在运用的WEB-INF目录下(与web.xml同文件夹)下增加一个名为weblogic.xml的文件(weblogic默认会先加载此文件),里面加入下面一段代码:
<weblogic-web-app>
<jsp-descriptor>
<jsp-param>
<param-name>
pageCheckSeconds
</param-name>
<param-value>
1
</param-value>
</jsp-param>
<jsp-param>
<param-name>
verbose
</param-name>
<param-value>
true
</param-value>
</jsp-param>
</jsp-descriptor>
<context-param>
<input-charset>
<resource-path>/</resource-path>
<java-charset-name>utf-8</java-charset-name>
</input-charset>
</context-param>
</weblogic-web-app>
第一段<jsp-descriptor>是针对jsp页面的过滤规则(我们的项目里面没有jsp页面,所以完全可以不用)。
第二段<context-param>是对所有页面均采用utf-8编码,这样页面上的中文就没问题了(前提是你所有页面都加了我前面所说的utf-8编码),至此第二个问题解决。
第三个问题,一查文档,发现weblogic8.16的Serverlet的版本是2.3(这是一个很低的版本),里面根本就没有getLocalAddr(),getLocalPort()方法,没办法只有换着法子来实现了,对于获取本地id地址改用InetAddress.getLocalHost().getHostAddress(),此方法属于jdk里的方法,从jdk1.0里就开始有了,所以肯定能支持。getLocalPort(),用request.getServerPort()方法代替(好在serverlet2.3里有此方法,否则就郁闷了)。至此第三个问题也解决了。在serverlet2.3里面getRealPath("")返回null,getRealPath(".")返回“.",没办法只能修改成能够支持的方式getRealPath("/WEB-INF"),这样返回WEB-INF文件夹所在的物理路径,然后对这个路径进行处理,得到运用所在的物理路径。如此修改一番,OK;
第四个问题,此问题属于最隐晦的了。给大家贴一段代码,大家认为会有什么问题:
PrintWriter pw = response.getWriter();
response.setContentType( "text/html;charset=utf-8");
pw.write(result);
此段代码在tomcat下完全能正常返回中文。但在weblogic8.16下中文就是乱码。以前只碰到过从页面用ajax抛到后台的数据中文会是乱码,这会从后台 抛到前台的中文既然成乱码了,岂不怪哉。诚然此问题有悖常理。肯定是一个很隐蔽的地方导致的。最后查阅sun官方对于serverlet2.3的文档才发现,原来在2.3里必需将:
response.setContentType( "text/html;charset=utf-8");
写在
PrintWriter pw = response.getWriter();
的前面,否则无法设置编码!!!!!!
也就是说必需写成:
PrintWriter pw = response.getWriter();
response.setContentType( "text/html;charset=utf-8");
pw.write(result);
Oh my god!!!!好在在以后的版本里不会有此问题。
总结一下:weblogic8.16(8.1x应该都这样)所支持的serverlet版本太低,导致很多我们看起来很正常的东西都用不了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值