最近将web项目从tomcat中迁移到weblogic中产生了很多问题,特此记录一下:
Tomcat 迁移到 WebLogic 11g部署项目注意事项
==============================
1.不要依赖容器特有类库
现象:interface接口中使用了org.apache.catalina.tribes.util.Arrays.equals(byte[],byte[]) API,导致在weblogic中运行时报错。抛出异常,异常信息为:null.
原因:catalina为apache tomcat项目名,即包org.apache.catalina下的API都为tomcat环境下的类库,weblogic lib下不含有此类库,导致出现异常。
方案:项目编译时不要依赖web容器中的类库,以便于项目可以跨web容器
2.在WEB-INF下增加weblogic.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE weblogic--web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN" "http://www.bea.com/servers/wls810/dtd/weblogic-810-web-jar.dtd">
<weblogic-web-app>
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
</weblogic-web-app>
原因:上述xml文件可以使得WebLogic优先加载项目web-inf下的jar包,防止WebLogic加载自身的jar包导致版本冲突。
3./WEB-INF/lib需要删除xml-apis-1.0.b2.jar
现象:出现
weblogic.xml.jaxp.RegistrySAXParserFactory cannot be cast to javax.xml.parsers.SAXParserFactory
错误
原因:weblogic使用jdk自带的javax.xml.parsers.SAXParserFactory接口来解析配置,项目中的xml-apis-x.jar中也有这个接口,根据上述的weblogic.xml中的配置,首选加载xml-apis-x中的接口,由于加载两者的classLoader不同,所以无法转换。
4.在web.xml中将servlet版本改为2.5
原因:weblogic 11g不支持servlet3.0及以上的版本。只兼容servlet及以下版本。