Java中有Checked
和Unchecked exceptions
。
由于我是checked exception
的新手,我对于处理Struts2
时有一个愚蠢的疑问。我们写try catch block
来处理checked exceptions
。因此,我们可以在显示catch block
/ return view
的{{1}}和Exception
页面名称中编写return语句。
如果我抛出Error
文件中声明的checked exception
并且结果是重定向到struts.xml
/ Error
页面会怎么样?
两者都是检查异常的正确方法吗?
答案 0 :(得分:1)
答案完全取决于手头的申请要求。
例如我编写了一个API,因此对于所有异常,必须返回相同的页面。我的代码中有类似下面的内容:
<global-results>
<result name="errHandler" type="chain">
<param name="actionName">errorProcessor</param>
<param name="namespace">/</param>
</result>
</global-results>
<global-exception-mappings>
<exception-mapping exception="java.lang.Throwable" result="errHandler" />
</global-exception-mappings>
答案 1 :(得分:1)
应该捕获应用程序级异常。如果你抛出一个应用程序级异常并且没有捕获它,那么exception
拦截器可能会被它配置为该动作。注意,异常拦截器位于defaultStack
的底部,它不仅可以捕获动作中的异常,还可以捕获整个拦截器堆栈中的异常。如果您将此拦截器配置为映射它应该处理的异常,并在它之后返回结果(也应该将其配置为全局结果),那么将捕获您的异常并返回结果。如果没有,Web容器将处理异常。正确的方法是捕获异常并返回错误结果,但如果你不能这样做,那么你应该配置异常拦截器。注意,代码中发生的struts容器异常不是由异常拦截器处理的。在这种情况下,您应该捕获异常并将操作的状态设置为error,然后您可以在操作执行中首先检查该状态以返回错误结果或抛出可能被代码中的异常拦截器捕获的异常你无法返回错误结果的地方。有关exception configuration的更多信息,请参阅文档。