今天突然注意到Tomcat7支持servlet3,就想把现有的项目部署到tomcat7上试试,于是就在官网下载apache-tomcat-7.0.34-windows-x86.zip,经过一顿折腾后,把项目部署好了。
异常一:
用eclipse-helios启动TOMCAT7的时候,出现了异常,如下:
java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory
at org.apache.catalina.startup.Bootstrap.<clinit>(Bootstrap.java:60)
Caused by: java.lang.ClassNotFoundException: org.apache.juli.logging.LogFactory
TOMCAT6使用的时候一切正常,为什么到了TOMCAT7后就不能正常加载此类了呢?我又直接在bin目录下执行startup.bat,发现没有这个异常,所以有种感觉是与eclipse有关。最后发现此类在../tomcat/bin/目录下,经过一顿google后,有人说是要用最新版本的eclipse,于是又下载了eclipse-juno版本,结果还是不行。
最后终于在一文章中找到了解决的方法,可以在eclipse的Preferences>Tomcat>JVM Settings>Classpath(Before generated classpath)>Jar/Zip,在弹出框中选择../tomcat/bin/tomcat-juli.jar,保存之后,再从eclipse中启动Tomcat7就不会出现此异常了。
至于这个异常的原因,估计是现在的eclipse还不能很好的支持Tomcat7吧,因为在最新版本eclipse-juno中也只支持到Tomcat6,而我在配置tomcat7的时候也是在tomcat6选项中进行的。
异常二:
上面的异常解决后,再启动tomcat后,出现了另一个异常,如下:
2012-12-21 16:13:12 org.apache.catalina.core.ContainerBase addChildInternal
严重: ContainerBase.addChild: start:
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1114)
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1673)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.NullPointerException
at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:142)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5274)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 11 more
仔细看异常抛出过程就会发现,一定是与Spring有关系,当前我使用的Spring版本为3.1.0.M2,又是一顿折腾,半天又过去了,最后解决问题的还是google,看来以后有问题还是直接google的好,不要指望其它了,不过或许我写了这个记录后,可以有其它选择了。
原来这是spring的一个BUG吧,可去https://jira.springsource.org/browse/SPR-8496查看一下,当前需要做的就是更新Spring到新的版本应该就可以了,于是到官网下载Spring3.2.0.RELEASE版本,等待。。。(下载中)
下载后,包结构有一点点变化,对比后更新相应的jar包,再次启动tomcat7,一切正常!!!