wel.xml是这样配置的:
- <welcome-file-list>
- <welcome-file>index.action</welcome-file>
- </welcome-file-list>
struts是这样配置的:
- <action name="index" >
- <result type="redirectAction">index_view</result>
- </action>
- <action name="index_*" class="com.syspro.action.IndexAction" method="{1}">
- <result name="success" >/template/index.ftl</result>
- </action>
我开始这样以为的,当访问项目的URL时(http://127.0.0.1:8080/test/),tomcat会根据web.xml中欢迎文件的配置自动在URL后加上index.action。而这个url会被struts拦截,所以会转向IndexAction,最后会转向index.ftl文件。
但实际是,这样的配置会报资源没找到的错误。
解决办法是在根目录下创建一个index.action(要与web.xml中的欢迎页面相同)文件。为什么湿这样子的呢?
因为tomcat加载web.xml时,会找所配置的欢迎页面是否存在,不存在则报错。注意,此时并没有URL被请求。而上面的情况就是,当tomcat找index.action这个文件时,没找到,所以报错了。所以根本没有请求url。而当在根目录下加一个index.action时,因为找到了文件,所以不会报错。然后 tomcat继续加载其他文件,当文件加载完时,开始请求这个URL(http://127.0.0.1:8080/test/index.action),以便打开欢迎页面。当请求这个URL时,这个URL被struts拦截,转向action处理,从而index.action文件没被打开。所以无论index.action填的什么,都不会显示。
另外,按照web.xml的配置, struts会拦截所有的URL,所以无论index.action的后缀是action还是别的什么,都可以转向到index的action。单实际上却不是如此,为什么呢?
因为struts.xml中有这个struts.action.extension ,设置struts要处理的action的。
一般可以设置成 这样:
<constant name="struts.action.extension" value="do,action" />
如果不设置呢,就默认为action。所以上面的例子只有后缀为你配置的struts.action.extension中的后缀时才成功。