1、创建自定义异常,代码如下:
package com.bjpowernode.struts; public class ErrorCodeException extends RuntimeException { private static final long serialVersionUID = 1L; private String errCode; private Object args[]; public ErrorCodeException(String errCode, Object[] args) { this.errCode = errCode; this.args = args; } public ErrorCodeException(String errCode, Object args) { this(errCode,new Object[]{args}); } public ErrorCodeException(String errCode) { this(errCode,null); } public String getErrCode() { return errCode; } public Object[] getArgs() { return args; } }
2、创建自定义异常处理类:
package com.bjpowernode.struts; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.Globals; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; import org.apache.struts.action.ExceptionHandler; import org.apache.struts.config.ExceptionConfig; import org.apache.struts.util.ModuleException; public class ErrorCodeExceptionHandler extends ExceptionHandler { public ErrorCodeExceptionHandler() { } public ActionForward execute( Exception ex, ExceptionConfig ae, ActionMapping mapping, ActionForm formInstance, HttpServletRequest request, HttpServletResponse response) throws ServletException { ActionForward forward = null; ActionMessage error = null; String property = null; if(!(ex instanceof ErrorCodeException)){ return super.execute(ex, ae, mapping, formInstance, request, response); } // 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 { // error = new ActionMessage(ae.getKey(), ex.getMessage()); ErrorCodeException ece=(ErrorCodeException) ex; error = new ActionMessage(ece.getErrCode(), ece.getArgs()); 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; } }
3、在struts-config.xml中配置一个全局的异常配置分别指向自定义异常和自定义异常处理类:
<global-exceptions> <exception key="" type="com.bjpowernode.struts.ErrorCodeException" handler="com.bjpowernode.struts.ErrorCodeExceptionHandler"> </exception> </global-exceptions>
4、注意在service层抛出的异常种类一定要是自己定义的ErrorCodeException,代码如下:
package com.bjpowernode.struts; public class UserManager { public void login(String username, String password) { if (!"admin".equals(username)) { throw new ErrorCodeException("login.user.not.found",new Object[]{username,username}); } if (!"admin".equals(password)) { throw new ErrorCodeException("login.password.error"); } } }
这样的话,大功告成。
相关推荐
在Struts2中,声明式异常处理是其强大的特性之一,它允许开发者通过配置文件来定义不同类型的异常如何被处理,而不是在每个动作类中进行硬编码。这样可以提高代码的可读性和可维护性,同时也方便了异常处理策略的...
Struts2是一个强大的Java web开发框架,它提供了一种声明式异常处理机制,极大地简化了在应用程序中处理异常的方式。本示例代码旨在演示如何在Struts2中定义和使用声明式异常,以及如何访问异常属性。 声明式异常...
声明式异常处理是Struts中的一种特性,允许我们在struts.xml配置文件中定义全局的异常映射,而不是在每个Action类中单独处理。这样可以实现异常处理的统一和标准化,减少代码重复,提高可维护性。声明式异常处理通常...
- **Struts2**:支持注解和XML方式的校验,可以实现声明式校验,减少了代码量并提高了可维护性。 7. 国际化和本地化: - **Struts1**:需要手动配置资源文件,处理相对复杂。 - **Struts2**:提供了一套更直观的...
7. **表单验证**:Struts2提供了强大的表单验证功能,可以在Action类中定义验证规则,或者使用XML配置文件进行声明式验证。 通过这个新闻管理系统,新手可以学习到如何使用Struts2搭建一个完整的web应用,包括控制...
3. **事务管理**:Spring提供声明式事务管理,可以在Service层的方法上添加@Transactional注解,让Spring自动处理事务的开始、提交或回滚。 4. **数据持久化**:Hibernate通过映射Java对象到数据库表,实现了对象的...
4. **事务管理**:Spring提供声明式事务管理,可以在struts-config.xml或action-mappings.xml中配置事务边界,使得在执行数据库操作时自动进行事务控制。 5. **错误和异常处理**:Struts1的全局异常处理可以结合...
它允许开发者以声明式的方式配置应用程序的行为。 4. **拦截器(Interceptor)**:拦截器是Struts2的一个重要特性,它提供了AOP(面向切面编程)的能力。拦截器可以插入到Action调用链中,执行额外的任务,如日志...
6. **事务管理**:Hibernate支持编程式和声明式事务管理。在Struts1中,通常在Action类中处理事务,利用`Session.flush()`和`Session.clear()`控制事务边界。 二、Struts1知识点 1. **MVC模式**:Struts1遵循MVC...
- **配置文件**: Struts2的配置文件(struts.xml)用于定义Action、结果、拦截器栈等,可以实现声明式编程。 **2. Struts2的架构** Struts2的架构基于过滤器(Filter)和Servlet容器。`...
配置文件提供了声明式编程,简化了代码量。 4. **拦截器(Interceptors)**:Struts2的拦截器是AOP(面向切面编程)的一个体现,可以在Action执行前后插入自定义的处理逻辑,如日志记录、权限验证、性能监控等。常见...
Struts可以通过编程式或声明式的方式来管理事务,确保数据的一致性。 8. **错误与异常处理**: Struts提供了错误和异常处理机制,当出现错误或异常时,可以跳转到特定的错误页面,或者显示错误消息。 9. **Struts...
- **声明式异常处理**:通过配置文件来处理异常,提高代码的健壮性。 #### 8. 国际化支持 - **资源文件**:通过定义资源文件来支持多语言。 - **格式化**:根据不同的语言和地区设置,自动调整日期、数字等格式。 ...
5. **事务管理**:Struts结合Spring框架可以实现声明式事务管理,使得事务控制更加简单和健壮。 综上所述,Struts作为Java Web开发的重要框架,其核心在于提供了一种结构化的方式来组织和管理Web应用,使得开发者...
8. **异常处理**:Struts 2提供了一种声明式和编程式的异常处理机制。通过全局异常映射,可以统一处理特定类型的异常,提高代码的可读性和可维护性。 9. **国际化与本地化**:Struts 2支持多语言环境,开发者可以...
这些配置可以声明式地指定Action的映射、参数、结果类型等,增强了灵活性。 4. **拦截器(Interceptor)**:拦截器是Struts2的一个重要特性,它允许在Action执行前后插入自定义逻辑。比如,可以使用拦截器进行权限...
Spring与Hibernate整合时,可以利用其声明式事务管理,简化事务处理代码。 **Hibernate框架**: Hibernate是一个对象关系映射(ORM)框架,它允许开发者用Java对象来操作数据库记录,减少了手动编写SQL的繁琐工作。...
这些核心库的引入,使得开发者可以充分利用Struts2的特性,如声明式异常处理、国际化支持、插件扩展性、以及强大的表单验证和数据绑定等功能。在实际开发中,还需要根据具体需求引入其他的库,如数据库连接池、JSON...