最近从新看了一下struts2,另外把里面的一些原理以及相应的知识点复习了一遍,另外看了一下视频教程。 web
今天在复习default-action-ref的时候遇到了一个问题,由于看了视频教程,并且在网上查了一下相应的信息,对于package中default-action-ref的用法不少人有着不一样的意见。有的人认为这是一个bug。 浏览器
我来大体说一下我我的的理解,若是有说到不对的地方,请各位给予建议。 服务器
有一部份的朋友在某个自定义的action中定义default-action-ref这个配置的时候, jsp
认为在地址栏中输入地址如http://localhost:8080/project的时候(project为项目名),若是该项目后面不输入任 何名字,则会自动进入default-action-ref定义的action并进入对应的类方法中进行操做并根据result返回页面,可是不少人发现 结果并非这样,而无论怎样都返回进入到index.jsp页面。 spa
实际上这一点从原理上来说能够理解,default-action-ref这个配置的意思是当用户在点击了没有定义的action时,若是struts没有找到用户定义的action名称,则会自动跳转到该默认定义的action中。 code
我的以为地址栏中项目后不写名称和名称不存在是两个概念, 视频
好比用户定义了一个strtus.xml: xml
<package name="a" extends="struts-default"> <default-action-ref name="dispatcher" /> <action name="dispatcher" class="com.UserAction" method="dispatcher"> <!-- dispatcher --> <result type="dispatcher"> /hello.jsp </result> </action> <action name="redirect" class="com.UserAction" method="redirect" > <!-- redirect --> <result type="redirect"> /hello.jsp </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,所以该配置若是不写的话,对于用户来说该部分是透明的。 io
其实你们能够作一个实验,就能够证实这块的运行过程:
你们能够把index.jsp修改成其余名称,好比aaa,bbb.jsp等。此时在服务器启动并进行加载的时候,会根据web.xml去寻找所谓 的index.jsp,可是因为index.jsp已被咱们修更名称,那么确定会找不到,并进入到strtus.xml中,这时咱们定义的default-action-ref就能够起做用了,此时因为没有对应的主页配置,浏览器会进入default的引用中进行操做,也就能够实现直接进入action的操做了。
上述过程本人已经作过实验,若是有朋友认为描述或思路有问题,请提出意见,谢谢。