struts2中对于default-action-ref配置的解析思路

最近重新看了一下struts2,另外把里面的一些原理以及相应的知识点复习了一遍,另外看了一下视频教程。

今天在复习default-action-ref的时候遇到了一个问题,因为看了视频教程,而且在网上查了一下相应的信息,对于package中default-action-ref的用法很多人有着不同的意见。有的人认为这是一个bug。

我来大致说一下我个人的理解,如果有说到不对的地方,请各位给予建议。


有一部份的朋友在某个自定义的action中定义default-action-ref这个配置的时候,

认为在地址栏中输入地址如http://localhost:8080/project的时候(project为项目名),如果该项目后面不输入任何名字,则会自动进入default-action-ref定义的action并进入对应的类方法中进行操作并根据result返回页面,但是很多人发现结果并不是这样,而不管怎样都返回进入到index.jsp页面。


实际上这一点从原理上来讲可以理解,default-action-ref这个配置的意思是当用户在点击了没有定义的action时,如果struts没有找到用户定义的action名称,则会自动跳转到该默认定义的action中。

个人觉得地址栏中项目后不写名称和名称不存在是两个概念,

比如用户定义了一个strtus.xml:

[html]  view plain copy
  1. <package name="a" extends="struts-default">  
  2.       
  3.       
  4.     <default-action-ref name="dispatcher" />  
  5.       
  6.     <action name="dispatcher" class="com.UserAction" method="dispatcher"> <!-- dispatcher -->  
  7.         <result type="dispatcher">  
  8.             /hello.jsp  
  9.            </result>   
  10.     </action>  
  11.   
  12.     <action name="redirect" class="com.UserAction" method="redirect" > <!-- redirect -->  
  13.         <result type="redirect">  
  14.             /hello.jsp  
  15.   
  16.   
  17. </package>  

如果此时地址栏输入http://localhost:8080/project/aaa或通过链接进入该地址栏,配置文件中并没有定义name为aaa的action,该路径会自动转入default-action中。

但是如果用户输入http://localhost:8080/project,该请求会首先被项目中web.xml来进行接收,由于web.xml中默认指定的页面是index.jsp,因此无论struts.xml中如何设置,服务器都会先跳转至index.jsp。原因其实很简单,因为在一个web project中,web.xml为整个项目的入口。

刚刚本人也试了将web.xml中welcome file定义删除,默认也会进入index.jsp,因此该配置如果不写的话,对于用户来讲该部分是透明的。

其实大家可以做一个实验,就可以证明这块的运行过程:

大家可以把index.jsp修改为其他名称,比如aaa,bbb.jsp等。此时在服务器启动并进行加载的时候,会根据web.xml去寻找所谓的index.jsp,但是由于index.jsp已被我们修改名称,那么肯定会找不到,并进入到strtus.xml中,这时我们定义的default-action-ref就可以起作用了,此时由于没有对应的主页配置,浏览器会进入default的引用中进行操作,也就可以实现直接进入action的操作了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值