由于很多人都是在tomcat 下面开发的系统,然后才迁移到WAS上面去,所以就会出现这样那样的问题,导致很多代码因为不兼容又得做大量的修改。
根据我在工作的过程中总结了一些开发和部署的过程中碰见的一些WAS的问题。这些问题主要是解决WAS不兼容上面的一些经验,另外还有一些常见的开发部署中碰到的一些问题的解决方法,总结了一下,希望对各位开发同仁有用。
1、在was中基础数据类型和他的对象之间不能被隐式转换。如: 一个int类型的变量被赋值成一个Integer对象或者一个一个Integer直接对象和一个int类型的变量或常量进行比较等。 解决方法:在对象的后面显示的调用相应的转换方法。如Integer对象intValue()方法。
2、was中对三目运算符号?:的应用也不能被隐式转换,必须保证在:的两边的数据类型一致。如:true?"":Long 这种写法was不会给Long类型的对象自动加上toString()方法进行隐式转换。 解决方法:在对象Long的后面加上toString()方法。
3、was自带的1.5的jdk不能解析范型,jsp页面不能用任何范型。但是在java类中用范型然后用sun的1.5以上的jdk编译以后was是可以执行的。
4、was中对jsp标签的属性用常量赋值时不能用<%=常量%>的方式而应该去掉<%=%>。如:
<pg:pager items="<%=pageInfo.getTotalCount()%>"
index="center"
maxPageItems="<%= pageInfo.getPageSize() %>"
maxIndexPages="10"
isOffset="<%= true %>"
url="<%="/approve/print!list.action"%>"
export="offset,currentPageNumber=pageNumber"
scope="request">
<pg:param name="action" value="<%=actionName%>"/>
<pg:param name="maxPageItems"/>
上面这段代码中url="<%="/approve/print!list.action"%>" 这行的代码会出错;页面异常:找不到标记属性 ×× 的标记属性信息。 解决办法: 应该写成url="/approve/print!list.action" 。
5、was中对jsp标签的属性用变量赋值时不能用<%=变量1+变量2%>的方式而应该定义新的变量来赋值。 页面异常:找不到标记属性 ×× 的标记属性信息。 解决办法: 将需要运算的变量采用一个临时变量运算完赋值之后,再进行输出。例如 <% 变量3=变量1+变量2%> <%=变量3%>
6、was字符集的设置 进入控制台的:服务器-》应用程序服务器-》运行的应用如:server1 -》Java 和进程管理 -》进程定义-》Java 虚拟机页面中的“通用jvm参数”的值设成“-Dfile.encoding=GBK -Ddefault.client.encoding=GBK”。
7.WebSphere升级到6.1.0.17所有struts2的程序都会发生Action找不到的情况。 解决方法如下,服务器>应用程序服务器>[选择 所使用的服务器]>Web 容器设置>Web 容器>定制属性,增加名称为“com.ibm.ws.webcontainer.invokefilterscompatibility”的定制属 性,值为true。
8、WAS 出现如下异常: WARNING: Cannot set status. Response already committed.
WARNING: Cannot set header. Response already committed.
解决办法:was升级到6.1.0.17版本可以解决。
9、修改was的jsp编译jdk版本可以解决1、2、3类似的问题。 修改方法,找到发布之后的应用目录,修改对应的配置文件:
/IBM /WebSphere/AppServer/profiles/AppSrv01/config/cells/zd- 44bca248e33bNode01Cell/applications/web_war.ear/deployments/web_war /web.war/WEB-INF/ibm-web-ext.xmi文件中
加上<jspAttributes xmi:id="JSPAttribute_1" name="jdkSourceLevel" value="15"/>
10、myeclipse 配置websphere 调试环境 ·
a. 下载下websphere6.1安装,在安装的过程中要记住自己设置的node name和cell name. ·
b. 启动eclipse,在window->preperences->myeclipse->application servers->websphere6.1
点Browse...选择你eclipse的安装目录. 我是安装在D:/webshpere6.1 ,之后myeclipse会自动的将Profile Root Directory ,Node name,cell name设置好。你需要确认一下 Profile Root Directory 就是你的安装目录下Profiles目录下的一个文件夹。 我的是D:/webshpere6.0/profiles/AppSrv01 。 而node name和cell name它会设成以你的机器名命名的名字,应该将cell name改为Profiles RootDirectory下的installedApps目录(D:/webshpere6.0/profiles/AppSrv01 /installedApps)下的文件夹的名字我的是就是localhostNode01Cell,将node name改为cell name去掉后面的cell的名字。选中enable项。点Apply保存。 ·
c 展开websphere6.1,选JDK,将JDK设置为webshpere6.1安装目录下的JDK(D:/webshpere6.0/java)。一定要设置成IBM的JDK要不websphere是不能运行的。 ·
d 启动websphere(不是用eclipse,而是用websphere的启动服务器),选管理控制台,点服务器->应用服务器,选一个服务, 一般为server1。在故障诊断中选记录和跟踪->JVM 日志,修改两个文件名为console。保存,注销,停止服务。 ·
e 在eclipse中新建自己的企业工程(一定要是企业工程)如果之前有web工程可以将该企业工程的web modle设置为该web project如没有就自己新建一个。 ·
f 发布企业工程(不是web project)在第一次发布时要选Packaged Archive
g 用eclipse或websphere工具启动websphere,进入控制台,应用程序->安装新的应用程序,点浏览在
/webshpere6.0/profiles/AppServ01/installableApps
下选自己发布的工程名的ear文件(你可能不是AppServ01)
然后next下去就可以了,唯一要注意的就是要设置web模块上下文根和要选上class 类文件和jsp的修改自动装载。
·
h 退到控制台首页,应用程序->企业应用程序,选择自己发布的工程,点启动。注销,停止websphere。 ·
I 在eclipse中再点发布,删除刚发布的工程,再点add。。。选择企业工程,Exploded Archive。选Delete Remote。。。项。然后发布。以后就可以实时调试了。
注:要在websphere中调试一定要建企业工程,一般的web工程是不能的 我们在J2EE的开发过程中还会遇到很多问题,尤其是我们开发的产品需要考虑在不同的平台和中间件上运行的 时候,所需要注意的东西就更多。WAS相对于其他中间件来说,针对配置文件和代码的写法要更严格的检查,如果写法不符合规范,就会出现错误。
本文中提到的 一些问题的解决办法以及一些开发方法,是我在开发应用的时候碰到过的一些问题,经过一段时间的沉淀也积累了一些经验,希望对各位同仁在处理类似问题的时候 能有所帮助。在下只是抛砖引玉、班门弄斧,希望大家踊跃发言,批评指正。~_~
注:本文转自http://www.webspherechina.net/home/space.php?uid=201&do=blog&id=49516