[转帖]不同容器应用迁移问题总结帖子_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4188 | 回复: 0   主题: [转帖]不同容器应用迁移问题总结帖子        下一篇 
masy
注册用户
等级:少校
经验:1234
发帖:182
精华:0
注册:2011-11-4
状态:离线
发送短消息息给masy 加好友    发送短消息息给masy 发消息
发表于: IP:您无权察看 2011-11-10 13:39:31 | [全部帖] [楼主帖] 楼主

     我们的项目在研发阶段,一般情况下都是使用tomcat,但是项目部署到客户现场之后,我们的mantis就不断的收到回馈的“莫名其妙”的BUG list,之所以说是“莫名其妙”,是指:不同的容器设置与处理方法不同,导致一些功能逻辑在此容器下正常,换个容器就出问题的现象。
我也是初学者,只是看到许多人也有像我这样痛苦的问题,所以经艾依然大哥的同意与支持,记在这里,也欢迎各位同道不断提出各自经验,交流学习。

格式如下:

【现象描述】:tomcat下getRemoteHost可以获取客户端IP,但是放到was下则是主机名
【问题分析】:tomcat 下getRemoteHost默认是获取客户端IP,但是规范的使用是使用getRemoteAddr方法获取IP地址。
【差异总结】:如果你想在tomcat使用getRemoteHost方法下获取主机名,那么请修改tomcat:server.xml文件中设置enableLookups="true"。TOMCAT的一些版本默认getRemoteHost是获取客户端IP,因此导致一些程序员产生了错觉。我们应该使用规范的getRemoteAddr方法获取客户端IP地址。

【现象描述】:sun的jdk与IBM JDK差异
【问题分析】:大多的现场问题都是由它们之间的差异引起的,我没有办法告诉你具体的差异~~ 这里只能谈感觉:IBM的JDK要严谨一些,对于tomcat的一些问题也是这样的。
【差异总结】:建议如果现场会大量使用was,那么建议研发、测试的时候也使用IBM的jdk,以及使用was部署测试。这样会避免许多问题。因为IBM下的JDK开发的程序放到TOMCAT下大多没有问题,反之则郁闷多多。这算不算“向下兼容”?~  呵·~

【现象描述】:tomcat下没事,其他容器出现乱码问题
【问题分析】:tomcat没有问题 说明语句语法都过得去。首先使用常见的编码过滤机制(EncodingFilter),然后在was的控制台中将设置编码(论坛上说的很多了,这里就不说了)。如果使用了ajax的话(如:某些表单组件),还需针对js的提交时做编码转换处理,否则js提交上去的也是乱码。还有jsp中这样写:pageEncoding="UTF-8"。不要写成UTF8或者小写utf。
【差异总结】:乱码问题确实是个大问题,并且在现场如果无法调试的情况下,问题很难定位。我们一个项目现场就曾经出过这样的问题:搜索一个资源,英文搜索词都没问题,中文的资源就搜索不到,后来现场调试了才知道,中文搜索的都是“???”。呵~~ 最终定位是js异步提交乱码。

绝对与相对都不能完美解决。。 user.dir在was中与tomcat与weblogic都是互不一样的。
我个人倾向于将路径写死在一个配置文件中,然后将这个配置文件放到一个无论哪个容器都能顺利读取的地方~~~,总之我们需要完美的解决办法,但是遗憾的是,完美的解决办法暂未发现。这个应该跟个人能力有关,而我正好是个新手......

现象描述】:ClassLoader导致的文件路径问题
【问题分析】:我们通常写类似于这样的代码:

  1. ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
  2. classLoader.getResourceAsStream("myPropFile.properties");


复制代码

    但是,在WAS下getResourceAsStream方法并没有如我们所愿的返回文件的InputStream,在这种情况下,我们不得不使用

  1. InputStream inStream=new FileInputStream(path/+"myPropFile.properties");


复制代码

的形式来处理这个配置文件了。
【差异总结】:无疑,ClassLoader这种相对于基本语法来讲,更涉及底层实现,所以每个容器存在差异也很容易理解了。

【现象描述】:el表达式tomcat下正常,websphere出现语法错误。
【问题分析】:仔细查看el表达式,并不符合规范书写方式,将表达式调整为规范书写格式后was才通过
【差异总结】:was7.0以及其以前版本不支持书写不够严谨的el表达式,在7.0以后的版本中才对此放宽检查。

因为广大WAS人员都忽略了一个很朴实的现象,迁移本身来说,用户迁移的初衷往往并没有对迁移中的技术细节有理解,只知道售前忽悠承诺了迁移到WAS的好处,因此,快速,可用是第一要务,所以作为项目来说,保证这一点很重要,需要的工具可以有效保证这一点,这也是IBM提供此工具而非卖此工具的初衷,可用保证了,然后由各位专家结合业务需求的情况进行微雕和调试、配置、调优才是后续,但是不能过度设计,为了迁移的完美而产生新的项目风险。所以,废话了这么多——关注工具及技巧很重要,但是业务人员的体验更重要。

【现象描述】:struts2 下载名字为乱码,内容不乱码,
【解决办法】:1.websphere上配置字符集为UTF-8
                     2.响应的时候把头设置成下面

ServletActionContext.getResponse().setHeader("Content-Disposition", "attachment; filename="+new String(fileName.getBytes("gb2312"),"iso-8859-1"));


                     3.struts2中action中设置为:

 <action name="download" class="downLoadAction">
<result name="success" type="stream">
<!-- <param name="contentType">application/x-msdownload;charset=UTF-8</param>-->
<param name="contentType">application/x-msdownload;charset=ISO8859-1</param>
<param name="contentDisposition">attachment;filename="${fileName}"</param>
<param name="fileName">struts2中文附件.txt</param>
<param name="inputName">downloadFile</param>
</result>
</action>


     【字符集乱码总结】   1.首先都设置成UTF-8.这样大部分乱码问题都能解决,但不是万能的。
                        2.传输过程中是二进制传输ISO格式的,��可能需要ISO编码解码。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论