`
seaman
  • 浏览: 19646 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Websphere与Tomcat的差异

阅读更多

由于公司开发环境用的是tomcat,测试环境用的是websphere,所以经常造成很多奇奇怪怪的问题,例如我上一篇笔记中写到的pageContextImpl的问题等等,这里对工作中遇到的另外两个问题做一下记录。

1、page Content-Type的问题

 在tomcat中,如果a.jsp包含b.jsp,那么a.jsp和b.jsp两个文件上都要加上<!---->,否则jsp页面上会出现中文乱码,然而在websphere上,如果a.jsp和b.jsp上都存在<!----> 的话,那么将抛出异常:不能出现多个 contentType', 没办法只能在开发环境和测试环境维护两个版本,希望能找到更好的解决办法,也希望业界能统一标准。

2、request.getRequestURL() 的问题

我们将mytest.action 通过配置文件映射到mytest.jsp文件上,mytest.jsp的内容为:

java 代码
  1. <% request.getRequestURL()%>  

如果你在浏览器中输入地址http://localhost:8080/mytest.action,在tomcat下返回的值是http://localhost:8080/mytest.action,而在websphere5.1上将返回的是解析过以后的真实的jsp地址:http://localhost:8080/mytest.jsp

身价几十万的WAS比免费的Tomcat确实要高贵许多,而且也挑剔得很,不过我们这些程序员为了口饭吃,还是要小心的伺候着。

 

分享到:
评论
1 楼 lanxing 2007-03-22  
web应用中 jsp 的page contentType的不能重复的问题

在tomcat中,如果a.jsp包含b.jsp,那么a.jsp和b.jsp两个文件上都要加上< %@ page contentType="text/html;charset=GBK" % >,否则jsp页面上会出现中文乱码,然而在websphere上,如果a.jsp和b.jsp上都存在< %@ page contentType="text/html;charset=GBK" % >的话,那么将抛出异常:不能出现多个 contentType', 出现这种情况,




解决方法为:将b.jsp中的< %@ page contentType="text/html;charset=GBK" % >去掉。


用以上的方法解决的话,会导致你的web应用程序代码在jboss和websphere不一致, 如果你想保持在jboss和websphere版本上的兼容的话,可以采用如下的方式。在servlet2.4的规范中,利用jsp-config 来制定pageEncoding为gbk(参考资料3),这样的话,在jsp页面中都不需要加上< %@ page contentType="text/html;charset=GBK" % >,在tomcat4.1以上的版本就已经支持servlet2.4了,但是在websphere5.1上只支持j2ee1.3,servlet支持到2.3,不支持2.4,最新的websphere 6支持j2ee1.4(servlet支持到2.4),如果你想在websphere5.1上保持应用程序和jboss上兼容的话,那么你可以在两个种版本中应用不同的web.xml,即在websphere5.1的版本上用servlet2.3的规范、jboss的tomcat中用servlet2.4的规范。


新的问题,如果只在websphere5.1上使用的话,a.jsp用静态方式包含b.jsp文件的话,由于只能在a.jsp上用< %@ page contentType="text/html;charset=GBK" % >,b.jsp上不能加上此行语句。如果b.jsp文件也需要单独进行访问的话,那么b.jsp文件将会出现乱码。


解决方法:由于b.jsp可以单独访问,所以b.jsp是可以独立a.jsp存在的,那么就不应该用静态包含(< %@include ...)应该将a.jsp换成动态包含b.jsp的方式(< jsp:include.../ >)

相关推荐

Global site tag (gtag.js) - Google Analytics