为什么我们需要全球前锋和全球例外?

2022-09-05 00:06:03

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


答案 1

<global-forwards>

考虑您正在验证不同网址的用户名密码,例如

  • update.do
  • insert.do
  • delete.do

如果是有效用户,则需要继续执行必要的操作。如果没有,您需要转发到登录页面。如果没有全局转发,则必须将表单映射表单添加到每个操作:login

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

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


推荐