12

<global-forwards>我在struts 中有一个基本问题,为什么我们需要<global-exceptions>在struts-config.xml 中。如果我们能用<action-mappings>自己实现同样的事情。

4

2 回答 2

39
<global-forwards>

考虑您正在验证不同 url 的用户名密码,如 update.do、insert.do、delete.do 等。如果它是有效用户,则需要继续执行必要的操作。如果不转发到登录页面。请参阅下面的映射

<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>

我希望这能澄清你的问题。

于 2012-12-13T12:01:40.367 回答
4

如果您谈论的是 Struts 1,它global-exceptions是否为所有操作ExceptionHandlers处理一些Exception,因此您不必为每个操作声明它并避免重复。

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

于 2012-12-13T11:41:36.540 回答