- Struts 2异常处理
- Struts 2中的异常处理示例
在我们的Web应用程序中, 随时可能会发生异常。
为了克服这个问题, Struts 2提供了一种全局异常处理机制, 可以在其中向用户显示全局结果。
Struts 2自动记录未捕获的异常, 并将用户重定向到错误处理程序页面。
了解异常拦截器的内部工作
如果发生异常, 则将其包装在ExceptionHolder中并推送到valuestack中, 以便我们可以轻松地从结果中访问异常对象。
建议将此拦截器设置为第一个拦截器, 以便无论其他拦截器是否抛出该异常, 它都可以处理所有异常。
异常拦截器的参数
为异常拦截器定义了3个参数。所有都是可选的。
Parameter | Description |
---|---|
logEnabled | 指定应启用或禁用日志。你可以传递对或错。 |
logLevel | 指定日志级别。它可能是跟踪, 调试, 信息, 警告, 错误, 致命的。默认日志级别为调试。 |
logCategory | 指定日志类别, 例如。 com.mycompany.app。默认值为com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.。 |
Struts 2中的异常处理示例
对于异常处理, 我们在struts.xml文件中指定global-result和global-exception-mappings。
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts
Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="aa" extends="struts-default">
<global-results>
<result name="myresult">globalresult.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping result="myresult" exception="java.lang.Exception"></exception-mapping>
</global-exception-mappings>
<action name="login" class="com.Login">
<result>welcome.jsp</result>
<result name="error">error.jsp</result>
</action>
</package>
</struts>
程序包的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显示异常详细信息。
globalresult.jsp
<p>Exception Name: <s:property value="exception" /> </p>
<p>Exception Details: <s:property value="exceptionStack" /></p>
异常处理的完整示例
完成此示例所需的其他资源如下:
- 输入页面(index.jsp)
- 动作类(Login.java)
- 查看组件(globalresult.jsp, welcome.jsp和error.jsp)
1)创建index.jsp作为输入
该jsp页面使用struts UI标记创建表单。它从用户那里接收名称和密码。
index.jsp
<%@ taglib uri="/struts-tags" prefix="s" %>
<s:form action="login">
<s:textfield name="name" label="Name"></s:textfield>
<s:password name="password" label="Password"></s:password>
<s:submit value="login"></s:submit>
</s:form>
2)创建动作类
该动作类包含两个字段名称和密码, 以及一个执行方法。在这里, 如果密码匹配strut, 我们将抛出异常自我。
这是一个虚拟的示例, 如果你在execute方法中注释提到的行, 则不会发生异常。
Login.java
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";
}
}
3)创建视图组件
有三个视图组件globalresult.jsp显示异常消息, welcome.jsp显示带有用户名的欢迎消息, 而error.jsp显示错误消息。
globalresult.jsp
<%@ taglib uri="/struts-tags" prefix="s" %>
Sorry an exception occured!
<p>Exception Name: <s:property value="exception" /> </p>
<p>Exception Details: <s:property value="exceptionStack" /></p>
<form>
<input type="button" value="back" onclick="history.back()">
</form>
welcome.jsp
<%@ taglib uri="/struts-tags" prefix="s" %>
Welcome, <s:property value="name"/>
error.jsp
Sorry username or password error!
<jsp:include page="index.jsp"></jsp:include>
下载此示例(使用不带JAR的Eclipse IDE开发)
下载此示例(使用Myeclipse IDE开发)
评论前必须登录!
注册