- Struts 2异常处理
- Struts 2中的异常处理示例
为了克服这个问题, Struts 2提供了一种全局异常处理机制, 可以在其中向用户显示全局结果。
Struts 2自动记录未捕获的异常, 并将用户重定向到错误处理程序页面。
了解异常拦截器的内部工作
如果发生异常, 则将其包装在ExceptionHolder中并推送到valuestack中, 以便我们可以轻松地从结果中访问异常对象。
建议将此拦截器设置为第一个拦截器, 以便无论其他拦截器是否抛出该异常, 它都可以处理所有异常。异常拦截器的参数为异常拦截器定义了3个参数。所有都是可选的。
Parameter | Description |
---|---|
logEnabled | 指定应启用或禁用日志。你可以传递对或错。 |
logLevel | 指定日志级别。它可能是跟踪, 调试, 信息, 警告, 错误, 致命的。默认日志级别为调试。 |
logCategory | 指定日志类别, 例如。 com.mycompany.app。默认值为com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.。 |
对于异常处理, 我们在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子元素为该程序包的所有操作指定异常映射。
【Struts 2异常处理-异常拦截器】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="http://www.srcmini.com/exception" />
<
/p>
<
p>
Exception Details: <
s:property value="http://www.srcmini.com/exceptionStack" />
<
/p>
异常处理的完整示例
完成此示例所需的其他资源如下:
- 输入页面(index.jsp)
- 动作类(Login.java)
- 查看组件(globalresult.jsp, welcome.jsp和error.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="http://www.srcmini.com/login">
<
/s:submit>
<
/s:form>
2)创建动作类
该动作类包含两个字段名称和密码, 以及一个执行方法。在这里, 如果密码匹配strut, 我们将抛出异常自我。
这是一个虚拟的示例, 如果你在execute方法中注释提到的行, 则不会发生异常。
Login.java
package com;
public class Login {
private String name, password;
//getters and setterspublic 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="http://www.srcmini.com/exception" />
<
/p>
<
p>
Exception Details: <
s:property value="http://www.srcmini.com/exceptionStack" />
<
/p>
<
form>
<
input type="button" value="http://www.srcmini.com/back" onclick="history.back()">
<
/form>
welcome.jsp
<
%@ taglib uri="/struts-tags" prefix="s" %>
Welcome, <
s:property value="http://www.srcmini.com/name"/>
error.jsp
Sorry username or password error!
<
jsp:include page="index.jsp">
<
/jsp:include>
下载此示例(使用不带JAR的Eclipse IDE开发)
下载此示例(使用Myeclipse IDE开发)
推荐阅读
- Struts 2模型驱动拦截器示例图解
- Struts 2 execAndWait拦截器示例图解
- Struts 2准备拦截器用法示例
- Struts 2 Params拦截器示例
- Struts 2自定义拦截器示例教程
- Struts 2配置文件详细解释
- Struts 2教程(多个配置文件用法示例)
- Struts 2多个命名空间示例
- Struts 2架构和流程详细解释