tomcat项目移植到weblogic问题

【转载】
tomcat项目移植到weblogic问题


我用的jdk是1.5,服务器tomcat5.5,由于项目需要,将jdk改为1.4.2,服务器weblogic 8.1

在转换时出现了一点问题,主要是页面的标签问题。经网上搜索查了以下资料。


1、 JDK和Servlet版本问题

WebLogic 8.1 sp4以前(包括sp4)只支持JDK1.4,建议使用JDK1.4进行编译代码,有时JDK1.5编译的程序无法运行。

由于WebLogic 8.1不支持J2EE1.4,不要使用Servlet2.4和JSP2.0进行编码。


2、 Struts 加载问题

在TOMCAT中,加载Struts的顺序是通过servlet加载,排在Listener加载之后。如果在Struts中使用Plugin,会在TOMCAT启动的最后加载,所以在Plugin中可以使用Spring中的Bean。

移植到WebLogic后,Struts会在容器启动的时候全部加载,包括Plugin。这样就出现了在Plugin加载的时候,不能得到 Spring管理的Bean,也就是说Struts Plugin在WebLogic里不能使用Spring管理的Bean。所以如果需要启动时加载部分代码,建议使用Servlet init()方法。

Spring为通过Web启动的程序提供了一个工具,该工具可以从Context中直接得到WebApplicationContext,其工具的方法签名如下:

org.springframework.web.context.support.WebApplicationContextUtils. getWebApplicationContext(ServletContext); 



3、 Include问题

在BEA WebLogic中不允许在一个文件中出现一次以上类似<%@ page contentType="text/html; charset=GBK"%>的代码,所以使用include file时,请将被include的文件中类似代码删除。

在TOMCAT时允许上述代码出现多回,并且使用include file时,被include的文件中,不包含上述代码,编译后客户端显示为乱码。BEA为此解释为TOMCAT不符合J2EE规范。

为了增加代码的通用性和可移植性,建议使用<jsp:include>方式。

<jsp:include>将被include的jsp代码视为独立存在的文件,所以可以在不同文件内使用多个<%@ page contentType="text/html; charset=GBK"%>。<jsp:include>直接传参由<jsp:param>标签完成,在被 include页面可以通过request得到传入的值,也可以通过request.setAttribute()、 request.getAttribute()进行内外文件参数传递。


4、 打包后Log4j支持问题

打包成.war部署到WebLogic后,出现如下问题:

Error: weblogic.management.DeploymentException: Cannot set web app root system property when WAR file is not expanded - with nested exception: 

[java.lang.IllegalStateException: Cannot set web app root system property when WAR file is not expanded]


问题解决:通常您不需要亲自编写servlet或者listener,比如直接利用log4j的 com.apache.jakarta.log4j.Log4jInit类,Spring的 org.springframework.web.util.Log4jConfigServlet和 org.springframework.web.util.ServletContextListener方式配置,找到.Log4jConfigServlet和ServletContextListener的源码,他们都在适当的地方(callback method)调用了Log4jWebConfigurer.initLogging(getServletContext());定位到这个方法,第一句就是:WebUtils.setWebAppRootSystemProperty(servletContext);再定位到该方法,方法很短:

public static void setWebAppRootSystemProperty(ServletContext servletContext) throws IllegalStateException { 

String param = servletContext.getInitParameter(WEB_APP_ROOT_KEY_PARAM);

String key = (param != null ? param : DEFAULT_WEB_APP_ROOT_KEY);

String oldValue = System.getProperty(key);

if (oldValue != null) {

throw new IllegalStateException("WARNING: Web app root system property already set: " + key + " = " + oldValue + " - Choose unique webAppRootKey values in your web.xml files!");

}

String root = servletContext.getRealPath("/");

if (root == null) {

throw new IllegalStateException("Cannot set web app root system property when WAR file is not expanded");

}

System.setProperty(key, root);

servletContext.log("Set web app root system property: " + key + " = " + root);

}


系统需要读取webAppRootKey这个参数,所以在部署到WebLogic里的时候,在web.xml中手动添加如下代码:

<context-param> 

<param-name>webAppRootKey</param-name>

<param-value>webapp.root</param-value>

</context-param>



WebLogic自身也包含对Log4j的支持,在打包部署(.war)的时候,会和Spring的 org.springframework.web.util.Log4jConfigListener有冲突(拷贝到WebLogic散放部署不会出错)。所以改用Servlet加载。(不通过应用加载Log4j好像也可以使用,但未进行完整测试,下面代码修改后,系统会报Log4j加载重复错误,不影响应用启动。)

web.xml中删除下面代码:

<listener id="log4jConfigListener"> 

<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>

</listener>


将Listener加载改为通过Servlet加载,再在web.xml增加:

<servlet> 

<servlet-name>log4jConfigListener</servlet-name>

<servlet-class>org.springframework.web.util.Log4jConfigServlet</servlet-class>

<load-on-startup>0</load-on-startup>

</servlet>



5、 Hibernate3、Axis部署问题

Hibernate3中hibernate.query.factory_class的默认值为 org.hibernate.hql.ast.ASTQueryTranslatorFactory,在WebLogic下系统运行时会抛出 org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken异常。

这个问题网上说的很多,解决方法也各式各样,其实很简单,Weblogic系统默认加载EJB-QL parser,存在重名类,所以使用时会出现ClassNotFoundException。一般网上的修改方式都是修改startWebLogic运行的脚本,将antlr-2.7.5H3.jar文件优先加载。但这样的方法会带来一些其他问题,所以不推荐使用。最好的方法是,在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/weblogic810-web-jar.dtd">

<weblogic-web-app>

<container-descriptor>

<prefer-web-inf-classes>true</prefer-web-inf-classes>

</container-descriptor>

</weblogic-web-app>


说明:prefer-web-inf-classes=true是WebLogic's classloader在有重名类时,优先加载Web应用中WEB-INF内的类。

Axis部署同理。


注意:

1、如果有包在通过修改startWebLogic启动脚本优先加载后,web应用中有重复的包,并且将prefer-web-inf- classes=true,BEA WebLogic编译JSP时会报错。(直接设置true就可以,无需再修改脚本;如果已经修改过脚本,需要还原。)

2、在apache中提供两种方式部署Axis包,一种为prefer-web-inf-classes=true,另外一种将saaj.jar一个包在webservices.jar之前优先加载。经实际验证,只将saaj.jar一个包优先加载并不能解决全部问题,如果不使用前一种方法,请将 axis全部的包加载在webservices.jar之前。


6、 BEA WebLogic Crashes问题

在实际部署到Unix下的BEA时,我遇到过两回WebLogic Crash问题,都是通过BEA Support解决的,下面分享一下两回Crash的过程、解决方法及经验。

服务器环境:HP Unix 11.23;HP JDK1.4.2_10;WebLogic8.1 SP5

7. 发布Web Service接口,远程程序调用两回后BEA WebLogic Crash

在Tomcat上测试正常的Web Service接口,移植到BEA 后,第一回调用该接口一切正常,第二次调用时,系统直接报错,WebLogic进程从系统中消失。


BEA Support给出的解释是内存分配不足,增加BEA WebLogic应用内存最大值后,系统正常。

8. Axis远程调用.net Web Service接口,出现java.lang.NoSuchMethodError: javax.xml.namespace.QName.getPrefix()Ljava/lang/String;错误,将包含该类的包优先加载,调用.net Web Service接口时系统Crash

我所用的应用系统需要调用远程.net平台的Web Service接口,该程序在Tomcat和Windows 下BEA WebLogic 8.1 SP5下进行测试,全部正常使用,但移植到HPUX上,每次调用接口时都会找不到 javax.xml.namespace.QName.getPrefix()方法。查明该方法存在于jaxrpc.jar文件中,而 webservices.jar存在名为javax.xml.namespace.QName的重名类。在startWebLogic.sh文件中修改,手动将jaxpc.jar排在webservices.jar之前加载,重启系统后,调用.net Web Service时出现Crash。


BEA Support给的解释是classloader冲突,确切的冲突原因不明,Windows下没有问题的话考虑升级JVM,或者使用Application内的Class优先加载。

最后通过问题4的解决方式解决。(详细原理请参见http://e-docs.bea.com/wls/docs81/programming/classloading.html)


个人感觉在UNIX下BEA不是很稳定,如果类似出Crash问题,最好请BEA Support解决。BEA Support定位问题需要出现问题的原因、出错生成的日志文件,并且配合他修改一些参数获得更多的日志文件,这些日志文件都在启动的Domain目录下。当购买BEA服务后,不建议过多花费时间在解决这类问题上(网上基本没有太多资料)。

9. 还有this.getServletContext()要改为this.getServletConfig().getServletContext()
YOLOv8【第四章:注意力机制篇·第20节】一文讲透,注意力机制设计原则与选择指南 - 从原理到实践的系统化方法论! 🏆 本文收录于 《YOLOv8实战:从入门到深度优化》,该专栏持续复现网络上各种热门内容(全网YOLO进最全最新的专栏,质量分97分+,全网顶流),进内容支持(分类、检测、分割、追踪、关键点、OBB检测)。且专栏会随订阅人数上升而涨价(毕竟不断更新),当前性价比极高,有一定的参考&学习价值,部分内容会基于现有的国内外顶尖人工智能AIGC等AI大模型技术总结进而来,嘎嘎硬核。    ✨ 特惠福利:目前活动一折秒杀价!一次订阅,永久免费,所有后续更新内容均免费阅读! 阅读详情

相关推荐

weblogic项目移植tomcat,配置说明

weblogic项目移植tomcat,配置说明

项目框架从tomcat移植weblogic

1、  首先JDK,我们项目用的JDK1.5版本,所以考虑用weblogic9或以上版本,这里举例weblogic10下面所提到的weblogic都是指weblogic10这个版本。   2、  从MyEclipse部署项目,配置weblogic如下图:      需要注意的是:配置weblogic之前需要建domain,同时设置好用户名密码。另外,需要配置w

札记 771

Tomcat 项目转到weblogic12c时报错修方法

用idea开发项目 之前是用Tomcat 结果部署时客户需求 用 weblogic 转换的时候出现了各种各样的错误 这是我遇到的错误以及解答方案 错误信息记录的不是很详细 直接配置到项目上面就好了,本人菜鸟一枚研究还不是很深 希望大神多多指点啊

项目tomcat移植weblogic问题汇总

最近因为业务需求要把项目tomcat容器移植weblogic,踩了很多坑,在此记录下。   1.首先weblogic不支持3.0,需要在web.xml将3.0为2.5,注意一般有两个地方需要。 &lt;web-app http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"&gt;   2.jar包冲突 这...

jyyuni的博客 1741

Weblogic迁移至Tomcat总结

概述 近期参与了公司的另一个项目,将业务系统的中间件由Weblogic替换为Tomcat,具体的版本为: Weblogic10 + JDK6 ==> Tomcat7 + JDK6 针对过程中遇到的问题与解决做总结记录。 总结 主要差异点 中间件差别:Weblogic10与Tomcat7,Weblogic为Oracle公司的商用中间件支持Servlet规范EJB规范等,Tomcat只...

daiwuliang的博客 5879

我做的一个web项目tomcat迁移到weblogic遇到的问题

一个web项目tomcat迁移到weblogic遇到的问题

chenguibing的专栏 1万+

Tomcat SSH2项目移植Weblogic9.2问题总结

<br />Tomcat SSH2项目移植Weblogic9.2问题总结<br /> <br />     最近在tomcat下开发了一个SSH2项目,但服务器是weblogic9.2的;当然项目tomcat下测试是完全没有问题的,这是前提...<br />碰到很多问题,好好总结下问题搜集如下:<br />问题一:项目移植weblogic9.2,启动报错。<br />问题二:项目部署后,启动没问题;action请求也是全的,但页面显示报异常。<br />问题三:不能实例化action,所有的actio

LYminan1314的专栏 1797

ssh项目tomcat移植weblogic遇到的问题

tomcat部署的时候是好好的,但是要移植weblogic 12 时报错。 具体报错: Caused by: java.lang.Throwable: Substituted for missing class org.springframework.beans.factory.BeanCreationException - Could not autowire field: public com.ug.web.dao.WorkhourscoeDao com.ug.web.service.Work

xjh101010的专栏 438

转-tomcat项目移植weblogic问题

1、 JDK和Servlet版本问题 WebLogic 8.1 sp4以前(包括sp4)只支持JDK1.4,建议使用JDK1.4进行编译代码,有时JDK1.5编译的程序无法运行。 由于WebLogic 8.1不支持J2EE1.4,不要使用Servlet2.4和JSP2.0进行编码。 2、 Struts 加载问题TOMCAT中,加载Struts的顺序是通过servlet加载,排在List...

leo19821019的博客 207

ssm框架项目tomcat部署,移植weblogic,导出报表遇到问题

项目在本地,本地使用Tomcat部署,导出报表没有任何问题,但是部署到weblogic后,导出报表报err_invalid_response.后台没有错误日志,日志显示下载报表的时候没有进入生成报表的方法。求解,困扰了很长时间了,不知从何下手。 ...

jiaojiangjl的博客 575

将集成spring项目tomcat移植weblogic下存在的问题

当在weblogic下部署时, 1、需要jersey-servlet-xx.jar,jersey-core-xx.jar,jersey-server-xx.jar; 2、在web.xml中全局参数contextConfigLocation需要分开书写,在weblogic不支持通配符; 转载于:https://www.cnblogs.com/xiaoxian1369/p/4353490.html...

weixin_33748818的博客 133

Tomcat6项目移植weblogic11(10.3)遇到的问题,及解决办法

今日,将我编写的S2SH DWR项目移植weblogic11上,遇到一大堆的问题,但都被我一一解决。现将碰到的问题,汇总如下。 首先在oracle网站上下载weblogic11R1,然后安装上。注意,安装时带上eclipse插件。这个插件可以单独运行,是个集成了weblogic server配置的eclipse.运行eclipse,新建server 并配好。 建好Weblogic域后...

sdgtxuyong的博客 242

部署ssh项目weblogic问题总结<转>

这两天部署ssh(struts2.1.8 + spring2.5 + hibernate3) + springside3.2 + cxf2.2到weblogic,没想到迁移到weblogic上是如此的困难,不过90%的问题全是由于classloader顺序的问题引起的,即便是这样也画了很久才搞定。   这里还要说一下我使用的weblogic版本是10.3.3,提到版本是因为有些错误只会在特...

三问飞絮 487

tomcat部署的项目迁移到weblogic部署遇到的问题

问题一: Error is: "weblogic.application.ModuleException:weblogic.management.DeploymentException:  [HTTP:101170]The servlet default is referenced in servlet-mapping *.ico but not defined in web.xml." 原因...

aspu O_O的博客 1895

tomcat开发的web项目部署到weblogic注意事项

1.修web.xml: weboutweb --> 另: 注释掉:       log4jConfigListener   org.springframework.web.util.Log4jConfigServlet   0    -->   2.如果没有,在app\WEB-INF\目录下新增一个weblogic.xml文件:     xmlns:wls=

Stephen.G 1万+

项目tomcat迁移到weblogic环境下问题汇总----不断补充中ing...

1、 JDK和Servlet版本问题  WebLogic 8.1 sp4以前(包括sp4)只支持JDK1.4,建议使用JDK1.4进行编译代码,有时JDK1.5编译的程序无法运行,由于WebLogic 8.1不支持J2EE1.4,不要使用Servlet2.4和JSP2.0进行编码。  比如:在tomcat下代码里中可以有response.setCharacterEncoding("UT

z69183787的专栏 1万+

Tomcat迁移到WebLogic 11g部署项目注意事项

最近将web项目tomcat中迁移到weblogic中产生了很多问题,特此记录一下: Tomcat 迁移到 WebLogic 11g部署项目注意事项 ============================== 1.不要依赖容器特有类库   现象:interface接口中使用了org.apache.catalina.tribes.util.Arrays.equals(byte[],b

人生如逆旅,我亦是行人。。。 3448

全国各省、地级市互联网普及率、宽带接入户数、电话用户等主要指标面板数据-最新出炉.zip

全国各省、地级市互联网普及率、宽带接入户数、电话用户等主要指标面板数据-最新出炉一、各省、地级市、区县互联网普及率、宽带接入户数和电话用户数等1、全国互联网网民数和互联网普及率(1997-2020年);2、各省互联网网民数和互联网普及率(1997-2016年);3、地级市互联网宽带接入用户(1996-2020年);4、各区县电话用户数(2004-2019年)二、全国各地区互联网主要指标发展情况1.区域范围:全国31个省、市、自治区2.时间跨度: 2002-2021年3.主要指标:互联网上网人数万人域名数万个网站数万个网页数万个IPv4地址数万个互联网宽带接入端口万个移动互联网用户万户移动互联网接入流量万GB互联网宽带接入用户万户城市宽带接入用户万户农村宽带接入用户万户家庭宽带接入用户万户

上一篇: hibernate-distribution-3.3.1.GA 部署slf4j-api-1.5.6.jar 包导入
下一篇: Hibernate根据方言dialect动态连接多数据库
iteye_16625
博客等级 码龄8年 1粉丝 16原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值