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

use*_*662 11 java struts java-ee

我在struts中有一个基本问题,为什么我们需要<global-forwards><global-exceptions>struts-config.xml一样.如果我们能够与<action-mappings>自己达成同样的目标.

OCJ*_*CJP 38

<global-forwards>
Run Code Online (Sandbox Code Playgroud)

考虑您正在验证不同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>
Run Code Online (Sandbox Code Playgroud)

而不是重复<forward name="failure" path="/login.jsp"/>你可以在<global-forwards>下面声明这个

 <global-forwards>
   <forward name="failure"  path="/login.jsp"/>
</global-forwards>
Run Code Online (Sandbox Code Playgroud)

现在,您可以删除<forward name="failure" path="/login.jsp"/>动作映射中的内容.


<global-exceptions>
Run Code Online (Sandbox Code Playgroud)

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

<global-exceptions>
    <exception type="java.io.IOException" path="/pages/error.jsp"/>
</global-exceptions>
Run Code Online (Sandbox Code Playgroud)

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

  • 我不同意user1900662 - 这是完美的长度,imo.它完全回答了我的问题(这是谷歌的第一个结果,所以我想我不是唯一一个......) (9认同)