📅  最后修改于: 2021-01-11 06:21:55             🧑  作者: Mango
在我们的Web应用程序中,随时可能会发生异常。
为了克服这个问题,Struts 2提供了一种全局异常处理机制,可以在其中向用户显示全局结果。
Struts 2自动记录未捕获的异常,并将用户重定向到错误处理程序页面。
如果发生异常,则将其包装在ExceptionHolder中并推入valuestack中,以便我们可以轻松地从结果中访问异常对象。
建议将此拦截器设置为第一个拦截器,以便它可以处理所有异常,无论该异常是否被其他拦截器抛出。
为异常拦截器定义了3个参数。所有都是可选的。
Parameter | Description |
---|---|
logEnabled | specifies log should be enabled or not. You can pass true or false. |
logLevel | specifies the log level. It may be trace, debug, info, warn, error, fatal. Default log level is debug. |
logCategory | specifies the log category eg. com.mycompany.app. The default is com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.. |
对于异常处理,我们在struts.xml文件中指定global-result和global-exception-mappings。
globalresult.jsp
welcome.jsp
error.jsp
程序包的global-results子元素指定此程序包的global-result。
global-result的result子元素指定将作为视图呈现给用户的结果页面。
程序包的global-exception-mappings子元素为该程序包的所有操作指定异常映射。
global-exception-mapping的exception-mapping子元素为给定的异常类型映射给定的结果。在此示例中,我们使用的Exception是许多异常类(例如IOException,ArithmeticException等)的父类。这意味着如果发生任何异常,将调用指定的结果。
注意,因为我们在global-exception-mappings中使用global result,所以必须在global-exception-mappings之前指定global-results。
我们可以通过打印exception或exceptionStack在浏览器上显示异常。
异常对象显示异常名称,而exceptionStack显示异常详细信息。
Exception Name:
Exception Details:
完成此示例所需的其他资源如下:
该jsp页面使用struts UI标记创建表单。它从用户那里接收名称和密码。
<%@ taglib uri="/struts-tags" prefix="s" %>
该操作类包含两个字段名称和密码,以及一个执行方法。在这里,如果密码匹配strut,我们将抛出异常自我。
这是一个虚拟的示例,如果您在execute方法中注释提到的行,则不会发生异常。
package com;
public class Login {
private String name,password;
//getters and setters
public String execute(){
if(password.equals("struts")){
int a=12/0;//If you comment this, exception will not occur
return "success";
}else
return "error";
}
}
有三个视图组件globalresult.jsp显示异常消息,welcome.jsp显示带有用户名的欢迎消息,而error.jsp显示错误消息。
<%@ taglib uri="/struts-tags" prefix="s" %>
Sorry an exception occured!
Exception Name:
Exception Details:
<%@ taglib uri="/struts-tags" prefix="s" %>
Welcome,
Sorry username or password error!