我在struts中有一个基本问题为什么我们需要在struts-config.xml中使用<global-forwards>
和<global-exceptions>
。如果我们可以使用<action-mappings>
本身实现相同的目标。
答案 0 :(得分:38)
<global-forwards>
考虑您正在验证不同网址的用户名密码,例如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>
我希望这能澄清你的问题。
答案 1 :(得分:3)
如果您正在讨论Struts 1,global-exceptions
ExceptionHandlers
是Exception
处理所有操作的Global-forwards
,那么您不必为每个操作声明它并避免重复
global-forward
有同样的想法。如果您在不同的操作中使用相同的路径转发,则可以通过仅声明一个global-forwards
来避免重复,并且所有操作都可以使用它。使用<forward name="loginLink" path="/login" />
,您还可以避免jsps中的硬编码网址,例如,您可以声明全局转发,例如<html:link forward="loginLink">Login</html:link>
然后在你的jsp {{1}}。