为什么我们需要struts中的全局转发和全局异常?

问题描述:

我在struts中有一个基本问题,为什么我们需要在struts-config.xml中有<global-forwards><global-exceptions>。如果我们可以用<action-mappings>本身达到同样的效果。为什么我们需要struts中的全局转发和全局异常?

<global-forwards> 

考虑您要验证的其他网址像update.do,insert.do delete.do等的用户名密码,如果它是一个有效的用户,你需要进行的neccesary action.if不转发到登录page.See下面

<action-mappings>   
    <action path="/insert" type="controller.Insert"> 
     <forward name="success" path="/insert.jsp"/> 
     <forward name="failure" path="/login.jsp"/> 
    </action>  
    <action path="/update" type="controller.Update"> 
     <forward name="success" path="/update.jsp"/> 
     <forward name="failure" path="/login.jsp"/> 
    </action> 
    <action path="/delete" type="controller.Delete"> 
     <forward name="success" path="/delete.jsp"/> 
     <forward name="failure" path="/login.jsp"/> 
    </action>   
</action-mappings> 

而是重复<forward name="failure" path="/login.jsp"/>您可以在<global-forwards>声明此类似下面

<global-forwards> 
    <forward name="failure" path="/login.jsp"/> 
</global-forwards> 

现在你可以圣雷莫的映射在动作映射中有<forward name="failure" path="/login.jsp"/>


<global-exceptions> 

如果您收到java.Io例外,而不是手动处理的每个可以如下声明全局。

<global-exceptions> 
    <exception type="java.io.IOException" path="/pages/error.jsp"/> 
</global-exceptions> 

我希望能够澄清您的问题。

+0

谢谢男人很好的解释,但发现它不长。 – user1900662

+0

感谢您的解释, – Apache

+0

感谢您的解释,假设有HTTP 500错误页面,并需要转发回登录页面, action-mappings>,这是如何做到的,谢谢 – Apache

如果您在谈论Struts 1,global-exceptionsExceptionHandlers,那么所有操作都会处理一些Exception,因此您无需在每次操作时声明它并避免重复。

Global-forwards有同样的想法。如果您以不同的动作转发相同的路径,则可以通过声明一个global-forward来避免重复,并且所有操作都可以使用它。通过global-forwards,您还可以避免jsps中的硬编码URL,例如,您可以声明一个全局转发,如<forward name="loginLink" path="/login" /> ,然后在您的jsp <html:link forward="loginLink">Login</html:link>中。