刚刚解决了一个问题。在写struts HelloWorld时候每次启动Tomcat都会出现如下错误:
警告: Could not create JarEntryRevision for [jar:file:/F:/javaWorkspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/struts_helloworld/WEB-INF/lib/struts2-core-2.2.1.jar]!
java.lang.NoClassDefFoundError: org/apache/commons/io/output/NullOutputStream
at com.opensymphony.xwork2.util.FileManager$JarEntryRevision.build(FileManager.java:307)
at com.opensymphony.xwork2.util.FileManager.loadFile(FileManager.java:145)
at com.opensymphony.xwork2.util.FileManager.loadFile(FileManager.java:105)
。。。
Caused by: java.lang.ClassNotFoundException: org.apache.commons.io.output.NullOutputStream
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)
... 29 more
。。。
严重: Dispatcher initialization failed
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at com.opensymphony.xwork2.inject.ContainerImpl$MethodInjector.inject(ContainerImpl.java:295)
。。。
Caused by: java.lang.IllegalArgumentException: Javassist library is missing in classpath! Please add missed dependency!
at ognl.OgnlRuntime.<clinit>(OgnlRuntime.java:165)
... 38 more
Caused by: java.lang.ClassNotFoundException: javassist.ClassPool
。。。
然后提示404页面找不到的错误。
解决问题参考http://apps.hi.baidu.com/share/detail/22911553上的解答
才查出来我引入jar包到WEB-INF/lib的时候是按照书本来的,书本上的struts可能版本没那么高,有commons-io-1.3.2.jar和
javassist-3.7.ga.jar包不需要引入,但在struts2.2.1版本中就必须引入。需要注意的是这两个jar包在struts的Lib文件夹下是没有的,要去struts-2.2.1/apps里的war文件的lib目录下找(关于war的解压与发布此处就不作说明了)。这样就搞定了~~
这也提醒了我,以后在新版本出来后,不要盲目按书本来,也要参考随新版本发布的例子,这也很重要。
下面引用http://down.51cto.com/data/134512上的内容,对各个jar文件的功能稍作描述:
- Struts2最新版本2.2.1中所设计的核心库文件,包括以下内容:
struts2-core-2.2.1.jar:Struts2框架的核心类库。
xwork-core-2.2.1.jar:Xwork核心类库,Struts2在其上构建。
ognl-3.0.jar:对象图导航语言(Object Graph Navigation Language),它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。
freemarker-2.3.16.jar:Struts 2的UI标签的模板使用FreeMarker编写。
commons-fileupload-1.2.1.jar:文件上传组件,2.1.6版本后必须加入此文件。
commons-io-1.3.2.jar:IO输入输出流组件,主要完成文件的读写功能。
javassist-3.7.ga.jar:Javassist是一个开源的分析、编辑和创建Java字节码的类库。
-------------------------------------------------------------------
commons-logging-1.0.4.jar:ASF出品的日志包,Struts2框架使用这个日志包来支持Log4J和JDK 1.4版本之上的日志记录。