第一个简单的Struts项目都出错,老是提示404错误,找不到资源,非常不爽,起初怀疑是配置文件struts.xml和web.xml有错误,但后来实在查不出哪里出错,因为是照着书上一步一步来的,在网上找了很多,问了很多,都解决不了,也许因为他们都没用过最新版本的Struts(我下载的是Struts-2.3.1),所以网上提供的解决办法通通不适用,查不出问题,困扰了我两个星期,我还发了帖子(http://topic.csdn.net/u/20111219/20/7f54ae58-8ab3-4562-a594-c3c03462c8fb.html),但回帖的人都没说到关键点上。
后来我想Struts2.3的包里有项目的样本,可以看看样本能不能在Eclipse上运行,如果能运行,那我和它对照一下,哪里出错不久知道了吗,于是web.xml、struts.xml、WEB-INF\lib下引用的包逐个对比,结果是,我项目里的web.xml和struts.xml与Struts2.3里的struts2-blank里的略有不同,大同小异,不是关键,关键的问题是,我的WEB-INF\lib下引用的包缺少了几个jar包,对照补上之后项目立马正常运行!这里说明一下,这些缺失的jar包,其实之前我在构建路径里都通过用户库的形式添加了,但是还是不行,一定要和Struts提供的样本项目一样,添加到WEB-INF\lib文件夹里。使用
从这一个简单的helloworld项目,得到一些经验,1、如果项目出错,不妨对照Struts的样本案例,样本案例还可以提供很多参考和启发;2、如果项目当中需要添加jar包,最保险的做法就是,参照Struts提供的样本项目,统一添加到WEB-INF\lib文件夹里,而不是什么构建路径、用户库。
为了防止忘记,记下Struts项目里必需放进lib的11个jar包:asm-3.3.jar asm-commons-3.3.jar asm-tree-3.3.ja commons-fieupload-1.2.2.jar commons-io-2.0.1.jar commons-lang-2.5.jar freemarker-2.3.18.jar javaassist-3.11.0.GA.jar ognl-3.0.3.jar struts-core-2.3.1.jar xwork-core-2.3.1.jar
Struts2.3的样本案例里的struts.xml的文件头为:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
.....
</struts>
也就是说即使是2.3版本的Struts采用的依然是2.0的配置文件。
样本案例的web.xml:
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
所以样本案例的filter采用的是:org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter这个类。