项目中遇到的异常及解决办法

时间:2022-05-30 00:45:00

1、Tomcat启动时如下错误:
严重: IOException while loading persisted sessions: java.io.EOFException
java.io.EOFException
    at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2280)
……………………………………

 

原因:EOFException表示输入过程中意外地到达文件尾或流尾的信号,导致从 session中获取数据失败。异常是tomcat本身的问题,由于tomcat上次非正常关闭时有一些活动session被持久化(表现为一些临时文 件),在重启时,tomcat尝试去恢复这些session的持久化数据但又读取失败造成的。此异常不影响系统的使用。

 

解决办法:
删除目录D:\Program Files\Tomcat 6.0\work下的所有文件,重启tomcat,问题解决!(myeclipse发布)
如果用Eclipse发布的话,可能是在项目工作空间的.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost目录下删除。

 

 

 2、启动Tomcat时报 严重: Error listenerStart

注:因为报这种错误时控制台显示的信息很有限,故下面的方法是将tomcat报错的详细信息写入日志文件,方便查找错误所在

2007-5-31 14:27:13 org.apache.catalina.core.StandardContext start
严重: Error listenerStart
2007-5-31 14:27:13 org.apache.catalina.core.StandardContext start
严重: Context [/testWSH] startup failed due to previous errors

部署web应用到Tomcat之后,无法成功启动,并且控制台没有详细的错误信息,
顶多就两行提示信息,例如:
严重: Error listenerStart
严重: Context [/lizongbo] startup failed due to previous errors

或者

严重: Error filterStart
org.apache.catalina.core.StandardContext start
严重: Context startup failed due to previous errors

查找logs目录下的信息,除了这两句话,也没别的辅助内容.
给查错带来了困难,在这种情况下,是因为Tomcat自身的默认日志没有将一些错误信息输出到控制台或文件,
这个时候则需要配置Tomcat自身的log,启用详细的调试日志.

在Tomcat 5.5和Tomcat 6.0中的配置基本一样,只是相关文件放的目录有所不同.

首先需要准备的文件为:

1.log4j.jar , 下载地址 : http://www.apache.org/dist/logging/log4j/1.2.15/apache-log4j-1.2.15.zip(这是官方地址,版本可能有更新,可按上级目录来查找:http://www.apache.org/dist/logging/log4j/


2.Tomcat 5.5所需的 commons-logging.jar,下载地址: http://www.apache.org/dist/commons/logging/binaries/commons-logging-1.1.zip

3.log4j配置文件:
log4j.properties(需要自己新建)
配置内容为:
log4j.rootLogger=ERROR,R

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[%p]%t-%c-%m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=${catalina.home}/logs/lizongbo.log
log4j.appender.R.MaxFileSize=10MB
log4j.appender.R.MaxBackupIndex=10
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=[%p]%t-%c-%m%n

log4j.logger.org.apache.catalina=INFO,R,CONSOLE

#日志级别不能太低,如果配置为debug的话,输出的日志信息太多,导致tomcat启动非常的慢.

4.Tomcat 6.0所需的juli替换文件:(官方地址,版本可能有更新,可按上级目录来查找:http://www.apache.org/dist/tomcat/tomcat-6/)
http://www.apache.org/dist/tomcat/tomcat-6/v6.0.14/bin/extras/tomcat-juli-adapters.jar
http://www.apache.org/dist/tomcat/tomcat-6/v6.0.14/bin/extras/tomcat-juli.jar

在Tomcat6.0中,(注意位置要放对)
将tomcat-juli-adapters.jar,log4j-1.2.15.jar,log4j.properties复制到D:\Java\ApacheTomcat6.0.14\lib下面.
将tomcat-juli.jar复制到D:\Java\apache-tomcat-6.0.14\bin\下面.
然后启动tomcat,就可以在D:\Java\apache-tomcat-6.0.14\logs下看到lizongbo.log了.

在 Tomcat5.5中,
将commons-logging-1.1.jar,log4j-1.2.15.jar,复制到D:\Java\apache-tomcat-5.5.25\common\lib下面.
将log4j.properties复制到D:\Java\apache-tomcat-5.5.25\common\classes下面.

然后启动tomcat,就可以在D:\Java\apache-tomcat-5.5.25\logs下看到lizongbo.log了.

在这个时候,再通过日志文件来分析,则会发现出现这种错误的情况可能有:
(以下是我遇到的出错情况,大多是些低级错误)
1.webapps要用到的classe文件根本没有复制到WEB-INF/classes目录下面
(java.lang.NoClassDefFoundError,而这个信息可能默认没输出到控制台,尤其是用了spring的,昨天就是这个粗心的低级错误)
2.要用到lib文件没有复制完,缺少lib
3.lib下的同一个库的jar文件存在多个不同版本,引起版本冲突.
4.lib下的jar与tomcat版本不相对应(我遇到的问题是web应用在Tomcat5.5上运行正常,换到Tomcat6.0上就出错,
例如一个用了struts的webapp在Tomcat 6上报下面的错误
“Parse Fatal Error at line 17 column 6: The processing instruction
target matching “[xX][mM][lL]” is not allowed” )

愿意看英文的可以参考官方网站说明:
http://tomcat.apache.org/tomcat-6.0-doc/logging.html
 http://tomcat.apache.org/tomcat-5.5-doc/logging.html

(转:http://hi.baidu.com/myinn/item/232095387b7c40bf134b14f6

 

3、启动Tomcat的时候报java.io.FileNotFoundException

具体报错信息如下:
[ERROR]Thread-2-org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/scm]-Exception sending context initialized event to listener instance of class com.nos.scm.listener.StartupListener
org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from file [C:\Program%20Files\Apache%20Software%20Foundation\Tomcat%206.0\webapps\scm\WEB-INF\applicationContext.xml]; nested exception is java.io.FileNotFoundException: C:\Program%20Files\Apache%20Software%20Foundation\Tomcat%206.0\webapps\scm\WEB-INF\applicationContext.xml (系统找不到指定的路径。)
java.io.FileNotFoundException: C:\Program%20Files\Apache%20Software%20Foundation\Tomcat%206.0\webapps\scm\WEB-INF\applicationContext.xml (系统找不到指定的路径。)
 at java.io.FileInputStream.open(Native Method)
 at java.io.FileInputStream.<init>(Unknown Source)
 at org.springframework.core.io.FileSystemResource.getInputStream(FileSystemResource.java:85)
 ………………

原因及解决办法:郁闷的要死,原因居然是tomcat的目录过深引起的,我将tomcat的根目录移至盘符之下,再启动时,项目就不再报错了。
其中错误信息打出的路径中的%20是空格的意思,即路径中存在空格,但是没有转换过来,所以tomcat不认识了。

总结:我们在安装常用的与编程有关的软件时,最好将其安装在盘符之下,根目录中最好不要有空格、中文等字符