常见升级过程可能遇到的有关问题以及解决方法

常见升级过程可能遇到的问题以及解决办法

常见升级过程可能遇到的问题以及解决办法

1. 日志提示
   信息: validateJarFile(/data/jsp/www.netfilm.cn/skin/ROOT_3/WEB-INF/lib/jsdk23.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
   原因: jsdk23.jar 是resin的 servlet 2.3规范的实现, 目前用的是tomcat 容器,所以冲突了,但系统会忽略加载该jar;
   解决办法: 可以不用处理,迁移成功后,可以删除该文件;

2. 日志提示
   严重: Error processing TLD files for context path /
   javax.servlet.ServletException: Exception processing TLD at resource path /WEB-INF/webwork.tld in context /
   原因: WEB-INF/webwork.tld 文件没找到,因 web.xml 有如下配置
        <taglib>
                <taglib-uri>webwork</taglib-uri>
                <taglib-location>/WEB-INF/webwork.tld</taglib-location>
        </taglib>
   解决办法:找到 WEB-INF/lib/webwork-2.1.7.jar 这个文件(具体版本号可能有差异), 拷贝到 /tmp目录,unzip 解压该文件,将解压后META-INF/taglib.tld 文件改名
              成 webwork.tld , 拷贝到 相应 WEB-INF目录 ,重启 tomcat  即可;

3. 日志提示
   严重: Parse error in application web.xml file at
   jndi:/admin.netfilm.cn//WEB-INF/web.xml
   java.lang.IllegalArgumentException: Invalid <url-pattern> /*.jsp in filter mapping
   原因: tomcat 的 servlet 的实现遵守严格的servlet mapping 规范,该mapping规则不符合规范,故报错
   解决办法:将  <url-pattern>/*.jsp</url-pattern> 改成<url-pattern>*.jsp</url-pattern>
   参考:  specs 目录下的 servlet-2_4-pfd3-spec.pdf 中的 Specification of Mappings 相关内容

4. 使用类似  <%@ include file="/inc/page_charset.jsp"%> 方式来指定页面charset , 外层的 jsp 中文显示乱码问题
   原因: tomcat编译该2个jsp文件时编码选择错误(未真正将2个文件合并成一个文件来处理)
   解决办法: 升级 相应应用的 web.xml
   将 web.xml 升级为支持 Servlet2.5规范,声明如下:
   <?xml version="1.0" ?>
   <web-app xmlns="http://java.sun.com/xml/ns/javaee"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
            version="2.5">

   并在web.xml <web-app>元素下添加配置信息,如下所示(其中gbk就是指定的编码):
   <!-- 注:该声明从Servlet2.4才支持,故需先升级web.xml声明 -->
   <jsp-config>
        <jsp-property-group>
                <display-name>JSPConfiguration</display-name>
                <url-pattern>*.jsp</url-pattern>
                <url-pattern>*.html</url-pattern>
                <url-pattern>*.htm</url-pattern>
                <el-ignored>true</el-ignored>
                <page-encoding>gbk</page-encoding>
                <scripting-invalid>false</scripting-invalid>
        </jsp-property-group>
   </jsp-config>

5. 日志提示
   严重: Parse error in application web.xml file at jndi:/adf.netmovie.com.cn//WEB-INF/web.xml
   部分原因: Servlet规范中 web.xml 中 init-param 元素是没有storePath等属性的, 故报错
   解决办法:
   将  <init-param storePath="/data/jsp/adf.netmovie.com.cn/skin/ROOT/WEB-INF/xml/" />
   改成
    <init-param>
<param-name>storePath</param-name>
<param-value>/data/jsp/adf.netmovie.com.cn/skin/ROOT/WEB-INF/xml/</param-value>
</init-param>
   即可
   参考:  web.xml 声明文件  http://java.sun.com/dtd/web-app_2_3.dtd 相关内容


6. 目前用到的Tomcat版本: apache-tomcat-6.0.20
   tomcat 已经包含的库文件清单 :
   annotations-api.jar
   catalina-ant.jar
   catalina-ha.jar
   catalina.jar
   catalina-tribes.jar
   el-api.jar
   jasper-el.jar
   jasper.jar
   jasper-jdt.jar
   jsp-api.jar
   jta-1.1.jar
   mysql-connector-java-3.1.14-bin.jar
   ojdbc6.jar
   orai18n.jar
   servlet-api.jar
   tomcat-coyote.jar
   tomcat-dbcp.jar
   tomcat-i18n-es.jar
   tomcat-i18n-fr.jar
   tomcat-i18n-ja.jar

7. 数据源配置在web.xml 中的问题, 如下所示:
           <resource-ref>
                <res-ref-name>jdbc/proxy</res-ref-name>
                <res-type>javax.sql.DataSource</res-type>
                <init-param driver-name="oracle.jdbc.driver.OracleDriver"/>
                <init-param url="jdbc:oracle:thin:@oracleserver:1521:orcl"/>
                <init-param user="username"/>
                <init-param password="xyz"/>
                <init-param max-connections="100"/>
                <init-param max-idle-time="120s"/>
                <init-param connection-wait-time="180s"/>
                <init-param max-active-time="120s"/>
        </resource-ref>
   该类配置是resin数据源的配置方法之一(和配置在resin.conf中类似),但是tomcat将不认这种配置方法,故系统将提示无法连接数据库之类的错误,如下所示:
   net.sf.hibernate.util.JDBCExceptionReporter 58 2009-12-17 11:28:04104 Cannot create JDBC driver of class '' for connect URL 'null'
   net.sf.hibernate.util.JDBCExceptionReporter 57 2009-12-17 11:28:04105 SQL Error: 0, SQLState: null
   解决办法: 在tomcat server.xml 中配置该数据源
   建议:     除非有特别要求,所有数据源配置,均在server.xml中进行, 方便统一管理

 

 

注:server.xml 的配置:

[resin@gzjspsf1 logs]$ cat /opt/jsites/korea.sx.netfilm.cn/conf/server.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- edited with XML Spy v4.2 U (http://www.xmlspy.com) by ttdown.com (ttdown.com) -->
<Server port="10008" shutdown="SHUTDOWN">
        <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on"/>
        <Listener className="org.apache.catalina.core.JasperListener"/>
        <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"/>
        <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
        <GlobalNamingResources/>
        <Service name="Catalina">
        <Connector port="8008" protocol="AJP/1.3" redirectPort="8443" maxThreads='300' useBodyEncodingForURI="true"/>
                <Engine name="Catalina" defaultHost="korea.sx.netfilm.cn">
                        <Host name="korea.sx.netfilm.cn">
                              <Context path="/"
                                       docBase="/data/jsp/korea.sx.netfilm.cn/skin/ROOT"
                                       workDir="/data/jsp/korea.sx.netfilm.cn/skin/ROOT/WEB-INF/work"
                                       reloadable="true">

 

<Resource name="jdbc/coonetmovie" auth="Container" type="javax.sql.DataSource"
       maxActive="100" maxIdle="30" maxWait="600000"
       username="coonetmovie" password="GVL6IqeN8iDEf" driverClassName="com.mysql.jdbc.Driver"
       url="jdbc:mysql://121.14.2.202:3306/coonetmovie?useUnicode=true&amp;characterEncoding=utf-8&amp;jdbcCompliantTruncation=false&amp;autoReconnect=true"/>
      
<Resource name="jdbc/cpdb" auth="Container" type="javax.sql.DataSource"
       maxActive="100" maxIdle="30" maxWait="600000"
       username="resin_adm" password="48bpejg63KD" driverClassName="com.mysql.jdbc.Driver"
       url="jdbc:mysql://cpmmysql:3306/cpdb?useUnicode=true&amp;characterEncoding=utf-8&amp;jdbcCompliantTruncation=false&amp;autoReconnect=true"/>    
      
<Resource name="jdbc/cpdb_ro" auth="Container" type="javax.sql.DataSource"
      maxActive="100" maxIdle="30" maxWait="600000"
      username="resin" password="ZGuM218HrLt" driverClassName="com.mysql.jdbc.Driver"
      url="jdbc:mysql://cpsmysql:3306/cpdb?useUnicode=true&amp;characterEncoding=utf-8&amp;jdbcCompliantTruncation=false&amp;autoReconnect=true"/>    
     
 
<Resource name="jdbc/netmovie3" auth="Container" type="javax.sql.DataSource"
     maxActive="100" maxIdle="30" maxWait="600000"
     username="resin" password="47182388" driverClassName="com.mysql.jdbc.Driver"
     url="jdbc:mysql://mmysql:3306/netmovie3?useUnicode=true&amp;characterEncoding=utf-8&amp;jdbcCompliantTruncation=false&amp;autoReconnect=true"/>    
 
<Resource name="jdbc/netmovie3_ro" auth="Container" type="javax.sql.DataSource"
     maxActive="100" maxIdle="30" maxWait="600000"
     username="resin_ro" password="47182388" driverClassName="com.mysql.jdbc.Driver"
     url="jdbc:mysql://smysql:3306/netmovie3?useUnicode=true&amp;characterEncoding=utf-8&amp;jdbcCompliantTruncation=false&amp;autoReconnect=true"/>    

<Resource name="jdbc/union_movie" auth="Container" type="javax.sql.DataSource"
     maxActive="100" maxIdle="30" maxWait="600000"
     username="union_movie" password="1qazxdr56yhn" driverClassName="com.mysql.jdbc.Driver"
     url="jdbc:mysql://uniondb:3306/union_movie?useUnicode=true&amp;characterEncoding=utf-8&amp;jdbcCompliantTruncation=false&amp;autoReconnect=true"/>    

<Resource name="jdbc/netmovie_news" auth="Container" type="javax.sql.DataSource"
     maxActive="100" maxIdle="30" maxWait="600000"
     username="resin_news" password="62768851286n" driverClassName="com.mysql.jdbc.Driver"
     url="jdbc:mysql://mysql-netmovie:3306/netmovie_newse?useUnicode=true&amp;characterEncoding=utf-8&amp;jdbcCompliantTruncation=false&amp;autoReconnect=true"/>    


     

 

 

                              </Context>
                              <Valve className="org.apache.catalina.valves.AccessLogValve"
                                     directory="/data/jsp/korea.sx.netfilm.cn/logs"
                                     prefix="access.log."
                                     suffix=".txt"
                                     pattern="common"
                                     resolveHosts="false"/>
                        </Host>
                </Engine>
        </Service>
</Server>