为什么我们需要struts中的全局转发和全局异常?
我在struts中有一个基本问题,为什么我们需要在struts-config.xml中有<global-forwards>
和<global-exceptions>
。如果我们可以用<action-mappings>
本身达到同样的效果。为什么我们需要struts中的全局转发和全局异常?
<global-forwards>
考虑您要验证的其他网址像update.do,insert.do delete.do等的用户名密码,如果它是一个有效的用户,你需要进行的neccesary action.if不转发到登录page.See下面
<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>
我希望能够澄清您的问题。
如果您在谈论Struts 1,global-exceptions
是ExceptionHandlers
,那么所有操作都会处理一些Exception
,因此您无需在每次操作时声明它并避免重复。
Global-forwards
有同样的想法。如果您以不同的动作转发相同的路径,则可以通过声明一个global-forward
来避免重复,并且所有操作都可以使用它。通过global-forwards
,您还可以避免jsps中的硬编码URL,例如,您可以声明一个全局转发,如<forward name="loginLink" path="/login" />
,然后在您的jsp <html:link forward="loginLink">Login</html:link>
中。
谢谢男人很好的解释,但发现它不长。 – user1900662
感谢您的解释, – Apache
感谢您的解释,假设有HTTP 500错误页面,并需要转发回登录页面, action-mappings>,这是如何做到的,谢谢 –
Apache