ActionMapping

 Struts中,ActionServlet只是任务的分派者,它依请求分配任务给其它的对象来执行,而分配的依据是请求的URI以及struts-config.xml<action-mappings>卷标所设定的内容。 


<action-mappings>
用来描述一组ActionMapping对象,当中的每一个<action>卷标都对应一个ActionMapping对象,当客户端发出请求至ActionServlet时,ActionServlet根据其URI<action>卷标设定的path属性查看对应的ActionMapping对象,ActionMapping对象会告诉ActionServlet该使用哪一个Action对象(在<action>卷标中使用type属性设定),而ActionServlet再将工作交给该Action对象来执行。 

举个例子来说,如果<action-mappings>设定如下:

代码:

 

 

<action-mappings> 
    <action 
        path="Login" 
        type="onlyfun.caterpillar.LoginAction"> 
        .... 
    </action> 

    <action 
        path="Logout" 
        type="onlyfun.caterpillar.LogoutAction"> 
        .... 
    </action> 
</action-mappings>

 

 



则当请求的URLhttp://localhost:8080/HelloStruts/Login.doActionServlet会使用/Login来找出path设定为LoginActionMapping对象,该ActionMapping对象告知ActionServlet要使用onlyfun.caterpillar.LoginAction,而后ActionServlet会将呼叫LoginActionexecute()方法,并将ActionMapping对象当作参数传递给它。 

ActionServlet
实际上将工作交给Action对象,然而Action对象的运作必须提供一些参数来描述工作的细节,诸如使用哪一个ActionFormforward对象的查找、错误发生时的页面对象等等,Struts将这些信息包装在ActionMapping中,并作为参数传送给Action对象,以使得Action在需要相关的信息时可以从ActionMapping中取得。 

对于没有定义的ActionMapping,如果客户端请求了怎么办?Struts会丢出 404 Invalid path 的讯息,您可以撰写匿名的ActionMapping来提供自己的错误讯息:

则当请求的 URL http://localhost:8080/HelloStruts/Login.do ActionServlet 会使用 /Login 来找出 path 设定为 Login ActionMapping 对象,该 ActionMapping 对象告知 ActionServlet 要使用 onlyfun.caterpillar.LoginAction ,而后 ActionServlet 会将呼叫 LoginAction execute() 方法,并将 ActionMapping 对象当作参数传递给它。  

ActionServlet
实际上将工作交给 Action 对象,然而 Action 对象的运作必须提供一些参数来描述工作的细节,诸如使用哪一个 ActionForm forward 对象的查找、错误发生时的页面对象等等, Struts 将这些信息包装在 ActionMapping 中,并作为参数传送给 Action 对象,以使得 Action 在需要相关的信息时可以从 ActionMapping 中取得。  

对于没有定义的 ActionMapping ,如果客户端请求了怎么办? Struts 会丢出  404 Invalid path  的讯息,您可以撰写匿名的 ActionMapping 来提供自己的错误讯息:

代码:

 

 

<action> 
    name="error" 
    unknown="true" 
    forward="/pages/error.jsp"/>

 

 



如果ActionServlet收到的没有定义的Action请求,则会交由匿名的ActionMapping来处理。 

Struts中,ActionMapping继承自ActionConfig,大部份的属性定义实际上都已经在ActionConfig中完成,不过ActionMapping仍旧存在,根据线上API的说明,继承存在的事实基于它仍是现存应用程序所使用的公用类别

你可能感兴趣的:(struts,ActionMapping)