来源:http://www.javaresearch.org/article/8261.htm
我在项目的开发过程中,发现Tomcat解压war 的一点例外。
现象如下:
使 用ANT工具把web应用程序打包为war文件。然后把war文件放到tomcat的webapps,让tomcat自己解压。结果出现解压的web应用 程序文件丢失。使用rar工具打开war文件。文件都齐全。怎么会出现这种现象呢??查看tomcat的log文档。发现在解压war文档出现 NullpointException.我升级tomcat到5.0还是出现这种现象。
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/startup/HostConfig.java
解决方法:
我 从tomcat网站下载了catalina 的原代码,进行分析。发现是在解压war文件出现input为null, 而 input= jar.getInputStream(entry);然后提高tomcat的debug级别。可以在tomcat的log文档看到 tomcat解压war文档的过程。发现如果某些文件名为???.txt,经检查发现原来这个文件的文件名为汉字。
噢!才发现war 文件在解压的过程中无法处理汉字的文件名。(因为找不到文件名为???.txt的文件而导致null例外。原来这个文件是个注释文档),所以在使用ant 把web应用程序打包为war文件,一定要把文件名为汉字的文件去掉。使用Forte for java的IDE工具把web应用程序打包为war文件会 不包含这些文件名为汉字的文件
。
下面是部分war文档解压的部分代码
.........................................
我在项目的开发过程中,发现Tomcat解压war 的一点例外。
现象如下:
使 用ANT工具把web应用程序打包为war文件。然后把war文件放到tomcat的webapps,让tomcat自己解压。结果出现解压的web应用 程序文件丢失。使用rar工具打开war文件。文件都齐全。怎么会出现这种现象呢??查看tomcat的log文档。发现在解压war文档出现 NullpointException.我升级tomcat到5.0还是出现这种现象。
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/startup/HostConfig.java
解决方法:
我 从tomcat网站下载了catalina 的原代码,进行分析。发现是在解压war文件出现input为null, 而 input= jar.getInputStream(entry);然后提高tomcat的debug级别。可以在tomcat的log文档看到 tomcat解压war文档的过程。发现如果某些文件名为???.txt,经检查发现原来这个文件的文件名为汉字。
噢!才发现war 文件在解压的过程中无法处理汉字的文件名。(因为找不到文件名为???.txt的文件而导致null例外。原来这个文件是个注释文档),所以在使用ant 把web应用程序打包为war文件,一定要把文件名为汉字的文件去掉。使用Forte for java的IDE工具把web应用程序打包为war文件会 不包含这些文件名为汉字的文件
。
下面是部分war文档解压的部分代码
.........................................