为什么这段代码不会进入无限循环?

时间:2015-05-20 19:34:08

标签: struts struts-1

1)

我正在查看一些可能是Struts1的代码,并且想知道是否有人可以解释为什么我没有获得无限循环,相反,我将被转发到jsp页面而不是:

的struts-config.xml:

<struts-config>
     <global-forwards>
        <forward name="a.t" path="/Search.do"/>
     </global-forwards>
     <action-mappings>
        <action path="/Search"
              type="path.SearchAction"
              scope="request"
              name="searchForm"
              validate="true">
        <forward name="orders" path="a.t"/>
        <forward name="success" path="a.t"/>
        <forward name="cancel" path="/Search.do"/>
        </action>
     </action-mappings>
    ...
 </struts-config>

我搜索了a.t并发现它也在此引用 tiles.xml。不知道这是什么目的。

<tiles-definitions>
   <definition name="a.t"  extends="admin.default">
     <put-attribute name="content" value="/mypath/hello.jsp"/>
   </definition>
</tiles-definitions>

Abridged SearchAction.java类:

public class SearchAction extends Action
(
   ....
   public ActionForward execute(ActionMapping mapping, ActionForm form,
                             HttpServletRequest request,
                             HttpServletResponse response) throws
   Exception 
   {
       ....
       return mapping.findForward("success");
   }
)

我最初的想法是,因为它总是返回&#34;成功&#34;,并且根据struts-config.xml

<forward name="success" path="a.t"/>

它会找到a.t,这是在global-foward中定义的

<struts-config>
        <global-forwards>
           <forward name="a.t" path="/Search.do"/>
        </global-forwards>

和       路径=&#34; /Search.do"

理论上会将我发回给SearchAction.java

 <action-mappings>
       <action path="/Search"

指向SearchAction.java

2)

我不知道原作者为什么决定这样做:

    <forward name="orders" path="a.t"/>
    <forward name="success" path="a.t"/>
    <forward name="cancel" path="/Search.do"/>

之间有区别吗?
  <forward name="success" path="a.t"/>
vs.
  <forward name="success" path="/Search.do"/>

1 个答案:

答案 0 :(得分:0)

  

我正被转发到jsp页面:

我希望你被转发到hello.jsp

  

我最初的想法是,因为它总是会回归“成功”,而且   根据struts-config.xml

     

<forward name="success" path="a.t"/>

     

它会找到a.t,这是在global-foward中定义的

     

<struts-config> <global-forwards> <forward name="a.t" path="/Search.do"/> </global-forwards>

     

和path =“/ Search.do”

path="a.t"将不会再次在<global-forwards>中搜索具有相同名称的映射。相反,它会在tiles.xml中搜索合适的映射并找到以下块并重定向到hello.jsp

<tiles-definitions>
   <definition name="a.t"  extends="admin.default">
     <put-attribute name="content" value="/mypath/hello.jsp"/>
   </definition>
</tiles-definitions>
  

之间有区别吗?
 <forward name="success" path="a.t"/>
vs.
  <forward name="success" path="/Search.do"/>

<forward name="success" path="a.t"/>将映射到tiles.xml并转发到hello.jsp

<forward name="success" path="/Search.do"/>将映射到SearchAction.java。由于您只返回success,它将再次转到hello.jsp,但原作者已经这样做了,因为将来他也可以添加任何其他映射,对于不同的情况说,{{1} }

动作类:

failure

的struts-config.xml:

return mapping.findForward("failure");