今天一天在研究struts的异常处理,下面对自己学习到的相关知识做个简单的总结。
1. 国际资源文件的加载
刚开始由于对struts的国际化没有做一定的了解,认为没有必要。当然现在也没做什么打算去深究它,到需要用到的时候在做简单的研究吧。自己建立国际化资源文件,将其放置于src文件夹下,起名为MessageResources_zh_CN.properties。由于目前我用到的MyEclipse是7。0的版本,因此不需要利用java自带的工具去将汉字转化为ASCII。可以直接输入汉字到时MyEclipse可以自己自动地进行转化。
在struts-config.xml文件中加载该文件。
<message-resources parameter="MessageResources_zh_CN" />
2. 声明式异常
声明式异常采用的方式是先对各种将出现的异常以类的方式进行编程。然后通过抛出异常在配置文件中找到异常对应的key值,从而输出错误信息。
具体步骤:
一.建立异常类
1. public class UserNotFoundException extends RuntimeException {
2.
3. public UserNotFoundException(String message){
4. super(message);
5. System.out.println("用户名不能为空");
6. }
7. }
8. 当然这里可以对构造函数不带参数。
二 抛异常
if(username.trim().equals("")){ //该方式为声明式异常
System.out.println("用户名不能为空");
throw new UserNotFoundException("用户名不能为空");
}
三.写资源文件
user.empty=\u7528\u6237\u540D\u4E0D\u80FD\u4E3A\u7A7A
四.配置struts-config.xml文件中的异常处理方式
由于我针对的是登陆时判断输入的值是否为空,因此可以直接在action后面写异常
处理,也就是一个局部异常处理。同样也可以采用全局的异常处理。在这里采用局
部异常处理方式。
局部异常处理注意两个属性:一个事在exception中的path属性,另一个是在action
中的input属性,这两个都是异常时页面的跳转,struts先检查path后input在全
局中的exception。
<action-mappings>
<action path="/login"
type="bjsydx.test.action.LoginAction"
name="loginForm"
scope="request"
input="/login/login.jsp"
>
<exception key="user.empty" type="bjsydx.test.Exception.UserNotFoundException" />
<exception key="psw.empty" type="bjsydx.test.Exception.PasswordNotCorrectException"></exception>
<forward name="success" path="/user/userlist.jsp"></forward>
<forward name="error" path="/login/login.jsp"></forward>
</action>
五.进行网页界面的处理。使用<html:errors />
六.运行后将出现需要的效果。
3. 个性化异常(用到国际化资源文件)
一.建立异常类
public class ErrorCodeException extends RuntimeException {
private String errorCode; // 错误码
private Object[] args; // 占位符对象
public ErrorCodeException(String errorCode) {
this(errorCode,null);
}
public ErrorCodeException(String errorCode,Object args) {
this(errorCode,new Object[]{args});
}
public ErrorCodeException(String errorCode,Object []args) {
this.errorCode=errorCode;
this.args=args;
}
public String getErrorCode() {
return errorCode;
}
public Object[] getArgs() {
return args;
}
}
二. 抛异常
if(username.trim().equals("")){ //该方式为个性化异常,自己写异常处理方式
System.out.println("用户名不能为空");
throw new ErrorCodeException("user.empty",username);
}
三. 写资源文件(同上)
四.配置struts-config.xml文件中的异常处理方式(全局异常处理方式)
<global-exceptions>
<exception key="error.exception" type="bjsydx.test.Exception.ErrorCodeException"
/>
</global-exceptions>
在这里将发现key值根本没法找到,因此在这里还需要写一个Handler类
五. 写处理异常类。
public class ErrorCodeExceptionHandler extends ExceptionHandler{
public ActionForward execute(
Exception ex,
ExceptionConfig ae,
ActionMapping mapping,
ActionForm formInstance,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException {
/*
* 用于判断得到的异常是否属于自己定义抛出的异常,如果不是则交给struts异常处理程序进行处理
* 如果是ErrorCodeException抛出的异常,则采取的方式是利用自己定义的处理方式进行处理。
*/
if(!(ex instanceof ErrorCodeException)){
return super.execute(ex, ae, mapping, formInstance, request, response);
}
ActionForward forward = null;
ActionMessage error = null;
String property = null;
// Build the forward from the exception mapping if it exists
// or from the form input
if (ae.getPath() != null) {
forward = new ActionForward(ae.getPath());
} else {
forward = mapping.getInputForward();
}
// Figure out the error
if (ex instanceof ModuleException) {
error = ((ModuleException) ex).getActionMessage();
property = ((ModuleException) ex).getProperty();
} else {
/*
* 利用采集到的异常得到errorCode和占位符。
*/
ErrorCodeException ecx=(ErrorCodeException)ex; //将该抛出的异常转化为ErrorCodeException类型,从而可以得到其errorCode和占位符
String errorCode=ecx.getErrorCode();
Object[]args=ecx.getArgs();
error=new ActionMessage(errorCode,args);
property = error.getKey();
//error = new ActionMessage(ae.getKey(), ex.getMessage());
//property = error.getKey();
}
this.logException(ex);
// Store the exception
request.setAttribute(Globals.EXCEPTION_KEY, ex);
this.storeException(request, property, error, forward, ae.getScope());
return forward;
}
; color: black; font-
分享到:
相关推荐
在Struts框架中,异常处理是不可或缺的一部分,因为它有助于确保程序的健壮性和用户体验。 手动异常处理在Struts中通常涉及到以下几个方面: 1. **异常拦截器**:在Struts 2中,我们可以通过编写自定义的拦截器来...
在实际开发中,不可避免地会遇到各种异常情况,因此理解并熟练掌握Struts2的异常处理机制至关重要。本篇将深入探讨Struts2框架中的异常处理策略,以及如何在实际项目中应用。 首先,Struts2提供了一种统一的方式来...
Struts2作为一款流行的Java Web框架,其异常处理机制是其核心功能之一,它使得开发者能够优雅地管理和处理应用程序中的异常情况,提供了一种统一的错误处理方式,从而提高用户体验并增强程序的健壮性。 在Struts2...
在提供的压缩包文件"Struts_exception"中,可能包含了Struts异常处理的相关示例代码或者教程,例如如何配置struts.xml,如何创建自定义异常类,以及如何在Action中进行异常处理等。这些资源可以帮助开发者更深入地...
在Struts2中,异常处理是一项重要的功能,它确保在应用程序遇到错误时能够优雅地处理,提供友好的用户反馈,并保持系统稳定性。下面将详细讨论Struts2中的异常处理机制及其相关知识点。 1. **异常处理机制概述** ...
尽管如此,许多遗留系统仍然依赖于Struts1,因此理解其异常处理机制仍然是必要的。 在Struts1中,异常处理主要通过两个组件来实现:`Action`类和`Tiles`或`Struts-config.xml`配置文件中的`exception`标签。当一个...
**Struts异常处理** Struts框架提供了一种统一的异常处理机制,通过配置`struts-config.xml`文件中的`global-exception`或`global-exceptions`元素,可以捕获并处理全局的ActionException。当Action执行过程中抛出...
在Struts2中,异常处理是一项重要的功能,它确保了应用程序的健壮性和用户友好的错误反馈。这篇博客文章“Struts2中异常处理(demo)”可能详细介绍了如何在Struts2框架下优雅地处理程序中的异常。 在Java Web开发...
首先,Struts1.x框架默认的异常处理方式是通过`struts-config.xml`配置文件中的`<global-exceptions>`标签来定义全局异常处理。在这个标签内,你可以声明一个或多个异常类型,并为每个异常指定一个错误页面,当...
在Struts2框架中,异常处理是至关重要的一个部分,它确保了应用程序的稳定性和用户体验。Struts2提供了多种方式来捕获和处理异常,帮助开发者优雅地处理程序中的错误情况。以下是Struts2异常处理的四种主要方法,...
Struts2是一个流行的Java web框架,它提供了强大的异常处理机制,使得开发者能够优雅地管理和展示在应用程序中出现的错误和异常。以下是对Struts2异常处理机制的详细说明: 1. **异常处理流程**: 当一个Action...
2. **全局异常处理**:在struts-config.xml中,我们可以定义全局的异常映射(global-exceptions)。当Action执行过程中抛出未被捕获的异常时,Struts会查找匹配的异常映射,根据配置转发到特定的错误页面。例如,...
针对异常处理,Struts提供了一种优雅的方式,使得开发者可以自定义错误处理机制。在给定的文件中,我们看到了一个基于Struts的异常处理方案,主要涉及两个关键点:自定义异常类和自定义异常处理器。 首先,我们来看...
项目中出现的异常通常要用一个友好的异常页面来显示,通过对struts2.xml的配置能拦截全局异常,只要出现异常就会转向异常页面。
本篇文章将深入探讨Struts2的异常处理策略,以及如何在DAO层进行单元测试配置。 在传统的Web应用中,当一个异常发生时,通常会跳转到错误页面或者返回错误信息。但在现代Web应用中,尤其是涉及到Ajax异步请求时,...
Struts映射到Model 2设计模式的完整介绍 , 详细论述利用JSP使用Struts的知识,包括Struts标记库 Struts异常处理、验证和登录 Struts应用程序的国际化和本地化 完整论述新StrutsTiles模板库 ...
Struts2作为一款流行的Java Web框架,其异常处理机制是开发者必须掌握的关键部分。这篇博客主要探讨了在Struts2中如何有效地管理和处理异常,从而提高应用的稳定性和用户体验。 在Struts2中,异常处理主要通过两种...