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

wel.xml是这样配置的:

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

struts是这样配置的:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值