关于web.xml的首页和struts的action的问题

wel.xml是这样配置的:

Xml代码   收藏代码
  1. <welcome-file-list>  
  2.     <welcome-file>index.action</welcome-file>  
  3. </welcome-file-list>  

 struts是这样配置的:

Xml代码   收藏代码
  1. <action name="index" >  
  2.             <result type="redirectAction">index_view</result>  
  3.         </action>  
  4.         <action name="index_*" class="com.syspro.action.IndexAction" method="{1}">  
  5.             <result name="success" >/template/index.ftl</result>  
  6.         </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中的后缀时才成功。

转载于:https://www.cnblogs.com/lkzero/articles/3013265.html

猜你喜欢

转载自blog.csdn.net/weixin_33907511/article/details/93852993
今日推荐