Почему нам нужны глобальные и глобальные исключения в стойках?

У меня есть основной вопрос в struts, почему нам нужно иметь <global-forwards> и <global-exceptions> в struts-config.xml. Если мы сможем достичь одних и тех же вещей с самим <action-mappings>.

Ответ 1

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

Надеюсь, это прояснит вашу проблему.

Ответ 2

Если вы говорите о Struts 1, global-exceptions являются ExceptionHandlers, которые имеют дело с некоторым Exception для всех действий, поэтому вам не нужно объявлять его за действие и избегать дублирования.

Global-forwards имеют ту же идею. Если у вас есть переходы с одним и тем же путем в разных действиях, вы можете избежать дублирования, объявив только один global-forward, и все действия могут его использовать. С помощью Global-forwards вы также можете избежать кодированных URL-адресов в jsps, например, вы можете объявить глобальный-вперед, например <forward name="loginLink" path="/login" /> а затем в jsp <html:link forward="loginLink">Login</html:link>.