只有咒语能解开咒语--谈一次Web工程的移植
将程序从一个容器换到另一个容器,总会有各种意料之外的困难需要解决,近日本人需要将一个Web工程从Tomcat环境转移到WebSphere环境,经历了一番周折,特地将此经过记录下来,也许它能对将要进行如此经历的人其一点帮助作用,另外在此也向网络同仁和工作中的同事表示感谢。
原环境:
程序:SSH
容器:Tomcat6.0
数据库:MySql5
新环境:
程序:SSH
容器:WebSphere6.1
数据库:Oracle10g
移植过程中的第一个困难,是WebSphere不认识Web.xml中的Struts taglib.原文字(适用于Tomcat)如下:
这个问题因为之前有所准备,在网络上找到了答案,将上述文字包在<jsp-config>节点中即可,修改后(对Tomcat和WebSphere均适用)的文字如下:
如此处理后,首页显示出来了,随即翻页遇到了问题,在IE中是翻页出现404错误,在FF中好一点,它告诉我WebSphere无法解析struts配置文件struts-config.xml。
起初我以为是中文问题,删除struts-config.xml中所有中文注释问题依旧,接下来在网络中寻找,还真有和我遇到一样问题的难友,但没人提出解决方案,正在挠头之际,我们的PM忽然说是否JDK不一致,检查一下,本机用的是1.6,而WebSphere自带1.5的,将本机也调成1.5后,问题解决! 真是只有咒语能解开咒语。
再下来,在表单提交时遇到了乱码问题,这是因为之前听信网络意见,将Web.xml中的filter都去掉了,结果自然乱码。此时感觉网络传闻未必可信,于是将filter又重新加上,乱码没有了。看来不经亲自尝试而盲从网络传闻是要吃亏的。
再下来,程序要访问数据库了,于是在WebSphere6.1中设置了数据源,再在Spring配置文件中进行了设置,如下:
这样写在Tomcat中好用,在WebSphere不好用,正在挠头之际,PM告我别的项目有同样的写法,于是一看,java:comp/env/这部分是不需要的,直接把数据源JNDI名写在Value中就可以了。
其它数据库移植的问题就交给了Hibernate。至此问题全部解决。
事后来看,WebSphere6.1对中文,SSH的支持还是很好的,只是有些特定的地方和传统的Tomcat中的项目不太一样,注意一下就好了,未必有想象中的困难。遇到困难时,向有同样经历的人请教比自己在网络上搜寻要快很多。
原环境:
程序:SSH
容器:Tomcat6.0
数据库:MySql5
新环境:
程序:SSH
容器:WebSphere6.1
数据库:Oracle10g
移植过程中的第一个困难,是WebSphere不认识Web.xml中的Struts taglib.原文字(适用于Tomcat)如下:
<!--
Struts的TLDS
-->
< taglib >
< taglib-uri > /WEB-INF/tld/app.tld </ taglib-uri >
< taglib-location > /WEB-INF/tld/app.tld </ taglib-location >
</ taglib >
<!-- Struts Tag Library Descriptors -->
< taglib >
< taglib-uri > /WEB-INF/tld/struts-bean.tld </ taglib-uri >
< taglib-location > /WEB-INF/tld/struts-bean.tld </ taglib-location >
</ taglib >
< taglib >
< taglib-uri > /WEB-INF/tld/struts-html.tld </ taglib-uri >
< taglib-location > /WEB-INF/tld/struts-html.tld </ taglib-location >
</ taglib >
< taglib >
< taglib-uri > /WEB-INF/tld/struts-logic.tld </ taglib-uri >
< taglib-location > /WEB-INF/tld/struts-logic.tld </ taglib-location >
</ taglib >
< taglib >
< taglib-uri > /WEB-INF/tld/app.tld </ taglib-uri >
< taglib-location > /WEB-INF/tld/app.tld </ taglib-location >
</ taglib >
<!-- Struts Tag Library Descriptors -->
< taglib >
< taglib-uri > /WEB-INF/tld/struts-bean.tld </ taglib-uri >
< taglib-location > /WEB-INF/tld/struts-bean.tld </ taglib-location >
</ taglib >
< taglib >
< taglib-uri > /WEB-INF/tld/struts-html.tld </ taglib-uri >
< taglib-location > /WEB-INF/tld/struts-html.tld </ taglib-location >
</ taglib >
< taglib >
< taglib-uri > /WEB-INF/tld/struts-logic.tld </ taglib-uri >
< taglib-location > /WEB-INF/tld/struts-logic.tld </ taglib-location >
</ taglib >
这个问题因为之前有所准备,在网络上找到了答案,将上述文字包在<jsp-config>节点中即可,修改后(对Tomcat和WebSphere均适用)的文字如下:
<!--
Struts的TLDS
-->
< jsp-config >
< taglib >
< taglib-uri > /WEB-INF/tld/app.tld </ taglib-uri >
< taglib-location > /WEB-INF/tld/app.tld </ taglib-location >
</ taglib >
<!-- Struts Tag Library Descriptors -->
< taglib >
< taglib-uri > /WEB-INF/tld/struts-bean.tld </ taglib-uri >
< taglib-location >
/WEB-INF/tld/struts-bean.tld
</ taglib-location >
</ taglib >
< taglib >
< taglib-uri > /WEB-INF/tld/struts-html.tld </ taglib-uri >
< taglib-location >
/WEB-INF/tld/struts-html.tld
</ taglib-location >
</ taglib >
< taglib >
< taglib-uri > /WEB-INF/tld/struts-logic.tld </ taglib-uri >
< taglib-location >
/WEB-INF/tld/struts-logic.tld
</ taglib-location >
</ taglib >
</ jsp-config >
< jsp-config >
< taglib >
< taglib-uri > /WEB-INF/tld/app.tld </ taglib-uri >
< taglib-location > /WEB-INF/tld/app.tld </ taglib-location >
</ taglib >
<!-- Struts Tag Library Descriptors -->
< taglib >
< taglib-uri > /WEB-INF/tld/struts-bean.tld </ taglib-uri >
< taglib-location >
/WEB-INF/tld/struts-bean.tld
</ taglib-location >
</ taglib >
< taglib >
< taglib-uri > /WEB-INF/tld/struts-html.tld </ taglib-uri >
< taglib-location >
/WEB-INF/tld/struts-html.tld
</ taglib-location >
</ taglib >
< taglib >
< taglib-uri > /WEB-INF/tld/struts-logic.tld </ taglib-uri >
< taglib-location >
/WEB-INF/tld/struts-logic.tld
</ taglib-location >
</ taglib >
</ jsp-config >
如此处理后,首页显示出来了,随即翻页遇到了问题,在IE中是翻页出现404错误,在FF中好一点,它告诉我WebSphere无法解析struts配置文件struts-config.xml。
起初我以为是中文问题,删除struts-config.xml中所有中文注释问题依旧,接下来在网络中寻找,还真有和我遇到一样问题的难友,但没人提出解决方案,正在挠头之际,我们的PM忽然说是否JDK不一致,检查一下,本机用的是1.6,而WebSphere自带1.5的,将本机也调成1.5后,问题解决! 真是只有咒语能解开咒语。
再下来,在表单提交时遇到了乱码问题,这是因为之前听信网络意见,将Web.xml中的filter都去掉了,结果自然乱码。此时感觉网络传闻未必可信,于是将filter又重新加上,乱码没有了。看来不经亲自尝试而盲从网络传闻是要吃亏的。
再下来,程序要访问数据库了,于是在WebSphere6.1中设置了数据源,再在Spring配置文件中进行了设置,如下:
<
bean
id
="dataSource"
class ="org.springframework.jndi.JndiObjectFactoryBean" >
< property name ="jndiName"
value ="java:comp/env/jdbc/*******DS" >
</ property >
</ bean >
class ="org.springframework.jndi.JndiObjectFactoryBean" >
< property name ="jndiName"
value ="java:comp/env/jdbc/*******DS" >
</ property >
</ bean >
这样写在Tomcat中好用,在WebSphere不好用,正在挠头之际,PM告我别的项目有同样的写法,于是一看,java:comp/env/这部分是不需要的,直接把数据源JNDI名写在Value中就可以了。
<
bean
id
="dataSource"
class ="org.springframework.jndi.JndiObjectFactoryBean" >
< property name ="jndiName"
value ="jdbc/*******DS" >
</ property >
</ bean >
class ="org.springframework.jndi.JndiObjectFactoryBean" >
< property name ="jndiName"
value ="jdbc/*******DS" >
</ property >
</ bean >
其它数据库移植的问题就交给了Hibernate。至此问题全部解决。
事后来看,WebSphere6.1对中文,SSH的支持还是很好的,只是有些特定的地方和传统的Tomcat中的项目不太一样,注意一下就好了,未必有想象中的困难。遇到困难时,向有同样经历的人请教比自己在网络上搜寻要快很多。