深圳市XX局邀请我为他们做工作流培训,其中有一项是smart的技术思路培训;但他们要求必须要用weblogic8.1和oracle。由此引发了我们的smart在weblogic8.1中的 发布,也由此产生了这篇文章。
我们知道,smart_forleave http://blog.csdn.net/hongbo781202/archive/2006/07/07/890968.aspx 是采用了jstl1.1和EL技术的,由此决定它只能在jsp2.0和servlet2.4环境下运行(包括tomcat5.0.x weblogic9.x resin3.x等等)。
weblogic8.1和tomcat4.x都是jsp1.2和servlet2.3 实现,所以我们只能采用jstl1.0,不能采用EL。这样我就对部分JSP进行了改写,把EL的地方全部换成了jstl1.0来实现,但之后还是发现了一些问题,问题的描述和解决办法如下:
1)JSP2.0(tomcat5.x)中,即便你在a.jsp中<%@ include file="header1.jsp" %>,且header1.jsp中有<%@ page contentType="text/html; charset=UTF-8" %>指令,你在a.jsp中的page指令还是必须有,如果没有,外层页面会有乱码。
tomcat4.x中,可以两个文件都有,也可以只有一个文件中有。
weblogic8.1中,必须只能有一个文件中有;如果两个文件都有,会后台不报错,但 IE中是空白页。
2) taglib指令也和 page指令同样的规则。 我是比较了好久不同的版本才发现这个问题,可气的是weblogic后台
不报错。
3)weblogic8.1中,如果JSP中UTF-8,则必须在web.xml中加入
<context-param>
<param-name>weblogic.jsp.encoding</param-name>
<param-value>UTF-8</param-value>
</context-param>
如果没有这个配置,weblogic的jspc 集体罢工,而且后台不报错,但只能显示html,对JSP无效。
4) 在weblogic8.1中,对稍微复杂的JSP(这里是指非纯HTML的JSP文件),必须使用
<%@ include file="header1.jsp" %>
<%@ include file="header2.jsp" %> 动态编译,而不能使用
<jsp:include page="footer.jsp" />静态编译。 这个是weblogic的jspc的问题。
5) weblogic8.1对 webwork,spring,hibernate3都有不兼容性问题,这些资料在我的blog里面有写到过,网上
的讨论也非常多。
webwork的见http://blog.csdn.net/hongbo781202/archive/2005/03/29/333007.aspx
hibernate3的 见
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&threadID=33234&messageID=198334
smart也碰到了hibernate3的问题,所以在smart_jsp1.2中用的hibernate2的antlr(因为weblogic.jar中用的这个版
本)。
----------------------------------------------------------------------------------------------
2007.1.4日:我又发现上面的第5个问题,找到了新的解决办法:
Hibernate3与WebLogic8一起用会因为antlr.jar的问题导致发生Hibernate不能正常工作的情况,报的错误就是ClassNotFoundException。原因是WebLogic8中内置的antlr.jar是hibernate2中的antlr,和Hibernate3中的antle.jar不一致。修改的方式就是在自己的webapp的WEB-INF中新建weblogic.xml文件,让weblogic先识别自己系统的antlr.jar即可。
<!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>
<jsp-descriptor>
<jsp-param>
<param-name>pageCheckSeconds</param-name>
<param-value>0</param-value>
</jsp-param>
<jsp-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</jsp-param>
</jsp-descriptor>
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
</weblogic-web-app>