来源:http://blog.sina.com.cn/s/blog_4b62e4a901008jlo.html
Struts2的异常处理机制:
任何成熟的MVC框架都应该提供成就的异常处理机制。Strut2也不例外。Struts2提供了一种声明式的异常处理方式。Struts2也是通过配置的拦截器来实现异常处理机制的。
Struts2的异常处理机制通过在struts.xml文件中配置﹤exception-mapping …﹥元素完成的,配置该元素时,需要指定两个属性:
exception:此属性指定该异常映射所设置的异常类型。
result:此属性指定Action出现该异常时,系统转入result属性所指向的结果。
异常映射也分为两种:
局部异常映射:﹤exception-mapping…﹥元素作为﹤action…﹥元素的子元素配置。
全局异常映射:﹤exception-mapping…﹥元素作为﹤global-exception-mappings﹥元素的子元素配置。
package com.dingxun.exception;
import java.sql.SQLException;
import com.opensymphony.xwork2.ActionSupport;
public class Struts2Exception extends ActionSupport{
private static final long serialVersionUID = -87324321702425020L;
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String execute() throws Exception{
// if("logo".equals(getUsername())){
// return SUCCESS;
// }else{
// throw new SQLException("用户名不正确"); 这里用trycatch包围,然后抛出我们需要的异常就ok了。
// }
throw new java.lang.Exception("系统错误");
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="aa" extends="struts-default">
<global-exception-mappings>
<exception-mapping result="all" exception="java.lang.Exception"></exception-mapping>
</global-exception-mappings>
<action name="execptionTest" class="com.dingxun.exception.Struts2Exception">
<result name="success">/exception/result.jsp</result>
<exception-mapping result="sql" exception="java.sql.SQLException"/>
<exception-mapping result="null" exception="java.lang.NullPointerException"/>
<result name="sql">/exception/sql.jsp</result>
<result name="null">/exception/null.jsp</result>
<result name="all">/exception/all.jsp</result>
</action>
</package>
</struts>
上面是个用户登陆的action及配置,定义了两个局部异常和一个全局异常
当输入的用户名和密码不为callan和fjf时,会抛出SQLException异常,局部异常配置起作用,会定向到sql.jsp,如果注释局部sql异常,全局异常起作用,定向到all.jsp
可以使用Struts2的标签来输出异常信息
<s:property value="exception.message"/>
<s:property value="exceptionStack"/>
例如sql.jsp页面
<body>
<s:property value="exception.message"/>
</body>
可以输出 用户名密码不正确
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/thunder_1985/archive/2009/09/14/4550618.aspx
输出异常信息:
使用Struts2的标签来输出异常信息:
﹤s:property value="exception.message"/﹥:输出异常对象本身。
﹤s:property value="exceptionStack"/﹥: 输出异常堆栈信息。
利用struts2的异常处理机制和拦截器机制可以很方便的实现异常处理功能,你不再需要在Action中捕获异常,并抛出相关的异常了,这些都交给拦截器来帮你做了。
1. 在 struts.xml 文件中,声明全局异常映射,以及对应的全局异常转发如下所示:
﹤global-results﹥
﹤result name="error"﹥/admin/error/ErrDisplay.ftl﹤/result﹥
﹤/global-results﹥
﹤global-exception-mappings﹥
﹤exception-mapping result="error" exception="com.orizone.hbmobile.hbcm.struts.BusinessException"﹥﹤/exception-mapping﹥
﹤/global-exception-mappings﹥
BusinessException 是异常处理类,代码如下所示:
public class BusinessException extends RuntimeException
{
private static final long serialVersionUID = 0xc1a865c45ffdc5f9L;
public BusinessException(String frdMessage)
{
super(createFriendlyErrMsg(frdMessage));
}
public BusinessException(Throwable throwable)
{
super(throwable);
}
public BusinessException(Throwable throwable, String frdMessage)
{
super(throwable);
}
private static String createFriendlyErrMsg(String msgBody){
String prefixStr = "抱歉,";
String suffixStr = " 请稍后再试或与管理员联系!";
StringBuffer friendlyErrMsg = new StringBuffer("");
friendlyErrMsg.append(prefixStr);
friendlyErrMsg.append(msgBody);
friendlyErrMsg.append(suffixStr);
return friendlyErrMsg.toString();
}
}
2. /admin/error/ErrDisplay.ftl 页面
这个页面很简单:
﹤body﹥
﹤h2﹥
出现异常啦
﹤/h2﹥
﹤hr/﹥
﹤h3 style="color:red"﹥
﹤!-- 获得异常对象 --﹥
${exception.message?default("")}
﹤/h3﹥
﹤br/﹥
﹤!-- 异常堆栈信息(开发人员用) --﹥
﹤div style="display:none;"﹥
${exceptionStack?default("")}
﹤/div﹥
﹤/body﹥
﹤body﹥
﹤h2﹥
出现异常啦
﹤/h2﹥
﹤hr/﹥
﹤h3 style="color:red"﹥
﹤!-- 获得异常对象 --﹥
${exception.message?default("")}
﹤/h3﹥
﹤br/﹥
﹤!-- 异常堆栈信息(开发人员用) --﹥
﹤div style="display:none;"﹥
${exceptionStack?default("")}
﹤/div﹥
﹤/body﹥
3. 在拦截器中,捕获常见的异常,并以友好异常信息抛出,相关代码如下所示:
public String intercept(ActionInvocation invocation) throws Exception
{
before(invocation);
String result = "";
try{
result = invocation.invoke();
}catch(DataAccessException ex){
throw new BusinessException("数据库操作失败!");
}catch(NullPointerException ex){
throw new BusinessException("调用了未经初始化的对象或者是不存在的对象!");
}catch(IOException ex){
throw new BusinessException("IO异常!");
}catch(ClassNotFoundException ex){
throw new BusinessException("指定的类不存在!");
}catch(ArithmeticException ex){
throw new BusinessException("数学运算异常!");
}catch(ArrayIndexOutOfBoundsException ex){
throw new BusinessException("数组下标越界!");
}catch(IllegalArgumentException ex){
throw new BusinessException("方法的参数错误!");
}catch(ClassCastException ex){
throw new BusinessException("类型强制转换错误!");
}catch(SecurityException ex){
throw new BusinessException("违背安全原则异常!");
}catch(SQLException ex){
throw new BusinessException("操作数据库异常!");
}catch(NoSuchMethodError ex){
throw new BusinessException("方法末找到异常!");
}catch(InternalError ex){
throw new BusinessException("Java虚拟机发生了内部错误");
}catch(Exception ex){
throw new BusinessException("程序内部错误,操作失败!");
}
after(invocation, result);
return result;
}
struts2做异常处理还是比较方便的了
分享到:
相关推荐
Struts2作为一款流行的Java Web框架,其异常处理机制是其核心功能之一,它使得开发者能够优雅地管理和处理应用程序中的异常情况,提供了一种统一的错误处理方式,从而提高用户体验并增强程序的健壮性。 在Struts2...
在Struts2中,异常处理是一项重要的功能,它确保在应用程序遇到错误时能够优雅地处理,提供友好的用户反馈,并保持系统稳定性。下面将详细讨论Struts2中的异常处理机制及其相关知识点。 1. **异常处理机制概述** ...
在Struts2框架中,异常处理是至关重要的一个部分,它确保了应用程序的稳定性和用户体验。Struts2提供了多种方式来捕获和处理异常,帮助开发者优雅地处理程序中的错误情况。以下是Struts2异常处理的四种主要方法,...
Struts2是一个流行的Java web框架,它提供了强大的异常处理机制,使得开发者能够优雅地管理和展示在应用程序中出现的错误和异常。以下是对Struts2异常处理机制的详细说明: 1. **异常处理流程**: 当一个Action...
本篇文章将深入探讨Struts2的异常处理策略,以及如何在DAO层进行单元测试配置。 在传统的Web应用中,当一个异常发生时,通常会跳转到错误页面或者返回错误信息。但在现代Web应用中,尤其是涉及到Ajax异步请求时,...
2. **全局异常处理**:Struts允许我们在配置文件中定义全局异常映射,这样所有Action中的未捕获异常都会被映射到特定的结果页面。在`struts.xml`或`struts-default.xml`中,可以使用`<global-exception-mappings>`...
这篇博客文章“Struts2中异常处理(demo)”可能详细介绍了如何在Struts2框架下优雅地处理程序中的异常。 在Java Web开发中,异常是程序运行时遇到的问题,例如无效的用户输入、资源未找到或内部系统错误。Struts2...
2. **Struts-config.xml配置异常处理**:在框架配置文件中,`<global-exceptions>`标签用于定义全局异常处理规则。例如: ```xml ``` 这段配置表示,如果任何地方抛出了`java.lang.Exception`或其子类,...
【Struts2异常处理】 Struts2是一个基于MVC(Model-View-Controller)架构的Web应用框架。它的异常处理主要通过全局异常映射器配置,可以将特定的异常映射到特定的结果页面或动作。通过`struts.xml`配置文件,...
针对异常处理,Struts提供了一种优雅的方式,使得开发者可以自定义错误处理机制。在给定的文件中,我们看到了一个基于Struts的异常处理方案,主要涉及两个关键点:自定义异常类和自定义异常处理器。 首先,我们来看...
项目中出现的异常通常要用一个友好的异常页面来显示,通过对struts2.xml的配置能拦截全局异常,只要出现异常就会转向异常页面。
Struts2作为一款流行的Java Web框架,其异常处理机制是开发者必须掌握的关键部分。这篇博客主要探讨了在Struts2中如何有效地管理和处理异常,从而提高应用的稳定性和用户体验。 在Struts2中,异常处理主要通过两种...
8. **错误和异常处理**:定义全局的Struts2异常处理类,以及Spring的异常处理器,确保程序的健壮性。 通过SSH整合,开发者可以利用这三个框架的优势,实现高效的Web应用开发,提高代码的可维护性和复用性。在实际...
首先,Struts1.x框架默认的异常处理方式是通过`struts-config.xml`配置文件中的`<global-exceptions>`标签来定义全局异常处理。在这个标签内,你可以声明一个或多个异常类型,并为每个异常指定一个错误页面,当...
在Struts2中,异常处理机制是关键组成部分,确保程序在遇到错误时能够优雅地处理并提供反馈给用户。本文将深入探讨Struts2的异常处理机制,特别是声明式异常捕捉和异常映射。 首先,Struts2的异常处理机制允许...
Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括表单处理、MVC设计模式支持以及异常处理机制。在文件上传方面,Struts2提供了方便的API和配置方式来处理单个或多个文件的上传。在这个主题中,...
8. **Struts2异常处理机制**:Struts2提供了一套强大的异常处理机制,允许开发者定义特定类型的异常与特定结果的映射。这样,当发生异常时,系统会自动转向预先配置的错误页面,便于统一处理和展示错误信息。 掌握...
**4.5 Struts 2异常处理** 异常处理是任何Web应用开发中必不可少的一部分。这里将讨论如何使用Struts 2来处理异常,并给出示例。 #### 八、总结 通过以上章节的学习,我们可以看到Struts 2框架的强大之处,以及它...