这次项目生产环境用的是WAS6.1,jdk是ibmjdk5,因为看到jdk已经从1.4升级到了1.5,于是我们开始基于jdk5来开发页面还有后台代码。
在部署到WAS上的时候碰到了一个奇怪问题,后台java代码基于jdk1.5特性写的地方都没问题,但是jsp页面就出现了不能支持jdk5特性的情况,比如一个Integer不能直接赋值给一个int变量等等。。。如果要全部改写页面基于jdk1.4的语法来写,那返工会很多。既然WAS的jdk版本已经上升到了5.0,那么有没有什么办法能让jsp也能支持jdk5呢?
通过下面的办法实战了一把, 还是成功了:
----------------------------------------------------------------------------------------------------------------------------------
环境:(产品,平台,机型,软件版本,等)
产品: WebSphere Application Server
平台: 跨平台
版本: 6.1.x
问题描述:
缺省情况下,JSP 编译器用 1.3 的规范来编译 JSP 文件,如果您在 WAS V6.1 里用了带 JDK 1.5 的特性的 JSP,编译会失败
解答:
为了确保您的 JSP 被正确编译,请在打包时的 JSP 属性里添加一个属性:jdkSourceLevel,值为:15,这是推荐的方法,如果您不能重新打包后重新发布应用,请按照下面的步骤修改相关文件:
找到下面的两个文件:
<WAS-HOME>/profiles/AppSrv01/config/cells/<cellname>/applications/<appname>/deployments/<appname.war>/WEB-INF/ibm-web-ext.xmi
<WAS-HOME>/profiles/AppSrv01/installedApps/<nodename>/<appname>/<appname.war>/WEB-INF/ibm-web-ext.xmi
在最后面的 </webappext:WebAppExtension> 前添加下面一行:
<jspAttributes xmi:id="JSPAttribute_113" name="jdkSourceLevel" value="15"/>
到这里,只要重启一下app就能看到效果了。
如果要看jsp编译过的 class 文件,可以在这里找到:
<WAS-HOME>/profiles/AppSrv01/temp/<nodename>/<appname>/<appname.war>/*.class
如果用 JspBatchCompiler 命令可以带下面的参数:
JspBatchCompiler -enterpriseapp.name <App_Name> -jdkSourceLevel 15 -keepgenerated true