Java 为什么在struts中需要全局转发和全局异常?

Java 为什么在struts中需要全局转发和全局异常?,java,jakarta-ee,struts,Java,Jakarta Ee,Struts,在struts中我有一个基本问题,为什么我们需要在struts-config.xml中包含和。如果我们可以通过本身实现同样的效果。如果您谈论的是Struts 1,全局异常是异常处理程序,它处理所有操作的一些异常,因此您不必为每个操作声明它并避免重复 全局转发也有同样的想法。如果在不同的操作中有具有相同路径的转发,可以通过只声明一个全局转发来避免重复,并且所有操作都可以使用它。使用全局转发还可以避免JSP中的硬编码URL,例如,您可以像 然后在jsp登录中 假设您正在验证不同URL(如updat

在struts中我有一个基本问题,为什么我们需要在struts-config.xml中包含
。如果我们可以通过
本身实现同样的效果。

如果您谈论的是Struts 1,
全局异常
异常处理程序
,它处理所有操作的一些
异常
,因此您不必为每个操作声明它并避免重复

全局转发
也有同样的想法。如果在不同的操作中有具有相同路径的转发,可以通过只声明一个
全局转发
来避免重复,并且所有操作都可以使用它。使用
全局转发
还可以避免JSP中的硬编码URL,例如,您可以像
然后在jsp
登录中


假设您正在验证不同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>

您可以在下面的
中声明,而不是重复

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

现在,您可以删除操作映射中的

<global-exceptions>

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

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


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

谢谢你的解释,如果有HTTP 500错误页面,需要转发回登录页面,我不同意user1900662-这是完美的长度,imo。它准确地回答了我的问题(这是谷歌的第一个结果,所以我想我不是唯一一个…)
<global-exceptions>
    <exception type="java.io.IOException" path="/pages/error.jsp"/>
</global-exceptions>