概述

近期参与了公司的另一个项目,将业务系统的中间件由Weblogic替换为Tomcat,具体的版本为:
Weblogic10 + JDK6 ==> Tomcat7 + JDK6
针对过程中遇到的问题与解决做总结记录。

总结

主要差异点

  • 中间件差别:Weblogic10与Tomcat7,Weblogic为Oracle公司的商用中间件支持Servlet规范EJB规范等,Tomcat只支持servlet规范,但是开源免费,但两者在一些实现上还是有些差别
  • weblogic的JVM为jrockit,目前我们配套tomcat使用的JVM为Hotspot
  • 目前公司所用Tomcat支持分布式会话存储,Redis Session

永久代问题

在这里插入图片描述

  • 方法区主要用来存储运行时常量池、静态变量、类信息、JIT编译后的代码等数据。
  • 永久代(Permanent Generation)是 HotSpot 虚拟机在 JDK7 及以前对方法区的具体实现
  • 当永久代内存溢出时:java.lang.OutOfMemoryError: PermGen space
  • 永久代配置:-XX:PermSize=512m -XX:MaxPermSize=512m(默认为64m)

Redis Session

存储在session的对象需要支持Java序列化,否则不会存入session任何信息,但不会报错,只是无法获取期望的内容

public class GlobalInput implements Serializable {
    ...
}

url中文字符乱码问题

url中的参数如果包含中文,则可能出现乱码问题
首先在js中设置url编码

showInfo = window.open(encodeURI( "../sys/LDPersonIdQueryMain.jsp?queryFlag=queryAppnt&appntIDNo="+""+"&appntName="+appntName+"&appntSex="+appntSex+"&appntBirthday='"+appntBirthday+"'" ));

Tomcat设置:/conf/server.xml,标签增加属性URIEncoding=“UTF-8”:

<Connector port="8080" protocol="HTTP/1.1"
              connectionTimeout="20000"
              redirectPort="8443" URIEncoding="UTF-8" />

cookie管理问题

服务端建立的Cookie如果没有设置HttpOnly属性,则在客户端可以用js读取Cookie中的内容(客户端脚本可以读取Session Cookie内容进行诸如CSRF/XSS恶意http攻击)
Tomcat7中默认为HttpOnly=true,即js文件不能够读取Cookie内容
系统中Applet控件(主要是一些打印功能)需要需要获取cookie中的sessionId出现问题

Tomcat配置:/conf/server.xml中,标签中新增以下标签:

<Context path="" docBase="/app/lis" useHttpOnly="false" ></Context>

更多推荐