tomcat-6 + spring 的问题

问题场景:

同事报告,把以前运行java项目部署到新系统中,没有任何错误提示,但访问错误。

询问系统环境:DELL 64位的PC服务器 + Jrockit-R27.5.0-jdk1.6.0_03 + Apache-tomcat-6.0.16

错误表现:
。根据IE访问的页面错误,可以断定是Spring没有向提供服务的Servlet中注入指定的类。
。查看tomcat启动信息,没有报错,也没有Spring的启动类注入过程
。同样的代码在另一台机器上的 tomcat5.5上运行无误。

诊断:
。64位应该是向下兼容的,应该不是这个问题

。如果在tomcat5.5上正常,那估计应该是 tomcat 升级后带来的问题

问题解决:
。在网上查资料,看新版本的spring中,web.xml文件的配置和原来有不同的地方之前加载spring的多个配置文件我一直用的如下方式:

  1. <context-param>
  2. <param-name>contextConfigLocation</param-name>
  3.         <param-value>
  4.              /WEB-INF/Tree.xml
  5.              /WEB-INF/Reader.xml
  6.              /WEB-INF/Servlet.xml
  7.         </param-value>
  8.    </context-param> 
  9.    
  10.    <servlet>  
  11.         <servlet-name>context</servlet-name>  
  12.             <servlet-class>
  13.                  org.springframework.web.context.ContextLoaderServlet
  14.             </servlet-class>  
  15.           <load-on-startup>1</load-on-startup>  
  16.    </servlet>

新下的Spring的例子中,都使用如下的 ContextLoaderListener 方式加载

  1.  <context-param>
  2.         <param-name>contextConfigLocation</param-name>
  3.         <param-value>
  4.              /WEB-INF/Tree.xml
  5.              /WEB-INF/Reader.xml
  6.              /WEB-INF/Servlet.xml
  7.          </param-value>
  8.    </context-param> 
  9.     <listener>
  10.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  11.     </listener>

于是修改了web.xml中的配置,使用 ContextLoaderListener 方式加载spring的配置xml
启动tomcat6,和之前比,有一点变化,启动信息报错监听器启动错误

  1. 2008-11-5 18:30:58 org.apache.catalina.core.StandardContext start
  2. 严重: Error listenerStart

究竟哪儿错了,不得而知。到网上搜索 Error listenerStart 关键词,发现很多人遇到这个问题,但绝大多数是hibernate的版本导致,或是其它jar包冲突造成。但我的工程里面都没有使用到这些内容。找不到原因,只有查tomcat6日志,想知道为什么ListenerStart 错误,但控制台输出信息极少。到tomcat6的 logs 目录下,发现 localhost.2008-11-05.log 文件体积变大,打开查看到如下信息

  1.      java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
  2.            at org.springframework.web.context.ContextLoader.<init>(ContextLoader.java:139)
  3.            at org.springframework.web.context.ContextLoaderServlet.createContextLoader(ContextLoaderServlet.java:91)
  4.            at org.springframework.web.context.ContextLoaderServlet.init(ContextLoaderServlet.java:82)
  5.            at javax.servlet.GenericServlet.init(GenericServlet.java:212)
  6.            at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1172)

原来是tomcat6启动spring的时候,需要apache 的 logging 包,结果没找到。立即拷贝 commons-logging.jar 在到 项目的 WEB-INF/lib/ 目录下,重启系统正常运行!

 

总结:
。使用tomcat5.5的时候没有出现该问题,搜索了tomcat5.5的lib目录,也没找到 commons-logging.jar 的包。 难道spring在两个版本的 tomcat 启动过程不一样,我也没去跟踪。

。tomcat6的控制台只显示了部分信息,要了解其它更多细节,需要查看 localhost 的 log 文件。我以前使用localhost文件主要是查看用户的链接访问信息,没觉得有太多程序运行的细节信息。不知道是tomcat改了,还是我自己以前没注意!!
  
 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值