- 浏览: 1230911 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (718)
- HTML (13)
- JS基础 (23)
- JS应用 (40)
- AJAX (6)
- JSP相关 (12)
- JAVA基础 (52)
- JAVA应用 (74)
- APPLET (11)
- SWING\RCP (2)
- JAVA反射 (6)
- 设计模式 (26)
- 数据库设计 (20)
- Struts (35)
- Struts2 (12)
- Spring (22)
- Hibernate (45)
- Ibatis (18)
- mybatis (3)
- SSH (8)
- UML (5)
- WebService (3)
- XML (16)
- Log4j (7)
- WEB容器 (26)
- 数据结构 (36)
- Linux (34)
- Ruby on Rails (1)
- 其它技术 (27)
- IDE配置 (15)
- 项目实战 (2)
- Oracle (69)
- JAVA报表 (7)
- Android学习 (2)
- 博客链接 (1)
- 网络基础 (1)
- WEB集群 (1)
- .Net开发 (11)
- PB (4)
- 系统构建 (15)
最新评论
-
jnjeC:
牛逼啊哥们,讲得太好了
Maven仓库理解、如何引入本地包、Maven多种方式打可执行jar包 -
九尾狐的yi巴:
很好 感谢!
Itext中文处理(更新版) -
luweifeng1983:
有用的,重启一下嘛。
设置eclipse外部修改文件后自动刷新 -
Master-Gao:
设置了也不管用,怎么破呢?
设置eclipse外部修改文件后自动刷新 -
aigo_h:
锋子还有时间写博客,还是很闲哈!
Add directory entries问题
上文如果资源文件改为:
error.login.usernull = user must not null{0}
则输出user must not null null
即参数由null来代替。
我们可以看到ExceptionHandler的excute方法里面是这样处理的。
error = new ActionMessage(ae.getKey(), ex.getMessage()); property = error.getKey();
可以看到new ActionMessage(ae.getKey(), ex.getMessage());
这里的ae.getKey()就是我们在配置文件的exception的key属性。
<action path="/logon" type="com.lwf.struts.action.LogonAction" name="logonForm" input="/logon.jsp" scope="session" validate="true" > <exception key="error.login.usernull" type="com.lwf.struts.util.UserNotFoundException" path="/index.jsp" ></exception> </action>
而第二个参数ex.getMessage()则是获取异常信息。
也就是说如果我们的异常处理类抛出一个带参数的异常如;
package com.lwf.struts.action.entity; import com.lwf.struts.exception.PasswordNotFoundException; import com.lwf.struts.exception.UserNotFoundException; public class UserManager { private static UserManager userManager = new UserManager(); private UserManager(){} public static UserManager instance(){ return userManager; } public boolean isValidaUser(String name, String pwd) throws Exception{ boolean flagPwd = false; boolean flagUser = false; if(name!=null && name.equals("admin")){ flagUser = true; }else{ throw new UserNotFoundException(“user incorrect”); } if(pwd!=null && pwd.equals("super")){ flagPwd = true; }else{ throw new PasswordNotFoundException("pwd incorrect"); } return flagPwd && flagUser; } }
new UserNotFoundException(“user incorrect”);
注意黑体部分。那么异常会输出:
user must not null user incorrect null
即资源文件的key内容+异常抛出的文本+参数化
当然上面参数化也没有显示出来。需要我们写一个自己的ExceptionHandler来处理。
我们使用一个统一的异常类。如下:
package com.lwf.struts.exception; public class ErrorCodeException extends RuntimeException { private static final long serialVersionUID = 1L; private String errorCode;//错误码,对应资源文件的key private Object[] args;//占位符,即参数 public ErrorCodeException(){} public ErrorCodeException(String errorCode){ this.errorCode = errorCode; } public ErrorCodeException(String errorCode, Object[] args){ this.errorCode = errorCode; this.args = args; } public ErrorCodeException(String errorCode, Object args){ this(errorCode,new Object[]{args}); } public String getErrorCode() { return errorCode; } public void setErrorCode(String errorCode) { this.errorCode = errorCode; } public Object[] getArgs() { return args; } public void setArgs(Object[] args) { this.args = args; } }
实际上我们是为构造ActionMessage做准备。
我们自己的handler类:
package com.lwf.struts.handler; 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 com.lwf.struts.exception.ErrorCodeException; public class LogonHandler extends ExceptionHandler { public ActionForward execute(Exception ex, ExceptionConfig ae, ActionMapping mapping, ActionForm formInstance, HttpServletRequest request, HttpServletResponse response) throws ServletException { if(!(ex instanceof ErrorCodeException)){ return super.execute(ex, ae, mapping, formInstance, request, response); } ActionForward forward; ActionMessage error; String property; if (ae.getPath() != null) { forward = new ActionForward(ae.getPath()); } else { forward = mapping.getInputForward(); } ErrorCodeException ece = (ErrorCodeException)ex; String errocode = ece.getErrorCode(); Object[] args = ece.getArgs(); error = new ActionMessage(errocode, args); 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; } }
error = new ActionMessage(errocode, args);
我们可以看到现在我们构造ActionMessage传入的第一个参数不再是ae.getKey()所以现在来说
配置文件exception的key属性在这里可以不需要与资源文件相对应,可随便取值。如下配置:
<action path="/login" type="com.lwf.struts.action.LoginAction" name="loginForm" input="/index.jsp" scope="session" validate="true" > <exception key="keyCode" type="com.lwf.struts.exception.ErrorCodeException" handler="com.lwf.struts.handler.LogonHandler"></exception> </action>
看上面key="keyCode"
下面action
package com.lwf.struts.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessages; import com.lwf.struts.action.entity.UserManager; import com.lwf.struts.form.LoginForm; public class LoginAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { LoginForm loginForm = (LoginForm)form; String name = loginForm.getUsername(); String pwd = loginForm.getPassword(); ActionMessages errors = new ActionMessages(); UserManager.instance().isValidaUser(name, pwd); return mapping.findForward("success"); } }
下面是UserManager类。
package com.lwf.struts.action.entity; import com.lwf.struts.exception.ErrorCodeException; import com.lwf.struts.exception.PasswordNotFoundException; public class UserManager { private static UserManager userManager = new UserManager(); private UserManager(){} public static UserManager instance(){ return userManager; } public boolean isValidaUser(String name, String pwd) throws Exception{ boolean flagPwd = false; boolean flagUser = false; if(name!=null && name.equals("admin")){ flagUser = true; }else{ throw new ErrorCodeException("user.name.incorrect",name); } if(pwd!=null && pwd.equals("super")){ flagPwd = true; }else{ throw new ErrorCodeException("user.pwd.incorrect",pwd); } return flagPwd && flagUser; } }
注意我们这里统一抛出的是ErrorCodeException异常,只是参数不同。第一个参数必须与资源文件的key对应,第二个参数则可以是对象或对象数组。对应于资源文件的点位符。如ApplicationResources.properties文件内容
user.name.incorrect = user incorrect {0} user.pwd.incorrect = pwd incorrect {0}
这里我们传入的是输入的用户名。
好测试一下。我们输入用户名为we
那么在页面上会看到:
user incorrect we
即实现了参数化
发表评论
-
DispatchAction 和DynaValidateActionForm 结合使用时的问题
2011-03-08 16:23 935使用DispatchAction使得程序员能够大大减少acti ... -
ActionForm中使用集合属性并自动组装数据
2011-01-18 14:32 929http://blog.csdn.net/m0085_cn/a ... -
Cannot find bean org.apache.struts.taglib.html.BEAN in any scope
2010-11-10 14:13 976开的过程中碰到问题:Cannot find bean org. ... -
Struts 结合 Validate框架验证详解
2010-10-25 14:00 1508转自:http://student.csdn.net/spac ... -
JSTL与struts1标签
2010-08-31 10:17 1555JSTL与struts标签: http://www.360d ... -
如何自动清空struts表单域
2010-06-30 17:44 1270为了某种需要,formBean的SCOPE设置成了ses ... -
form验证与动态验证框架
2010-06-06 17:22 1391form验证返回ActionErrors. 动态验证则实现J ... -
resourcebundleeditor在eclipse里面的设置和使用
2010-05-30 11:30 1752我们一般使用native2ascii工具得到struts资源文 ... -
使用DispatchAction分发
2010-04-07 18:04 1160应用中经常有增、删、改、查操作,如果象一前一样使用List ... -
forward属性与ForwardAction类
2010-04-07 17:08 1174forward属性与ForwardAction类在配置文件按以 ... -
struts容错处理
2010-04-07 15:20 1188struts容错处理: 当客户请求的action不存在的时候 ... -
struts声明式异常一
2010-04-06 23:10 1057struts声明式异常: 在配置文件中配置exception ... -
struts编程式异常--html:error与html:message
2010-04-03 11:39 2042struts编程式异常过程: 截获异常信息;创建异常信息; ... -
struts国际化,从资源文件读取异常信息
2010-04-03 01:56 1201示例演示登录时从资源文件读取用户名或密码错误信息 logon ... -
struts国际化,资源文件读取三
2010-04-02 23:42 1030本示例演示客户进行语言设置,从而更改整个系统语言. 客户在c ... -
struts国际化,资源文件读取二
2010-04-02 22:18 1638package com.lwf.struts.util; ... -
struts国际化,资源文件读取一
2010-04-02 00:19 1377国际化的发展 看本文之前可先看一下properties文件的 ... -
struts html标签自动保存提交的表单值。
2010-04-01 17:01 2064我们之前JSP提交值后如果还要取得值怎么做? 应该是取得a ... -
ActionMapping相关
2010-04-01 16:02 1086一、Map的设置map.put("path" ... -
ActionForward相关问题
2010-04-01 15:13 1364一、静态的ActionForward不能更改属性: stru ...
相关推荐
在Struts2中,声明式异常处理是其强大的特性之一,它允许开发者通过配置文件来定义不同类型的异常如何被处理,而不是在每个动作类中进行硬编码。这样可以提高代码的可读性和可维护性,同时也方便了异常处理策略的...
声明式异常处理是Struts中的一种特性,允许我们在struts.xml配置文件中定义全局的异常映射,而不是在每个Action类中单独处理。这样可以实现异常处理的统一和标准化,减少代码重复,提高可维护性。声明式异常处理通常...
Struts2是一个强大的Java web开发框架,它提供了一种声明式异常处理机制,极大地简化了在应用程序中处理异常的方式。本示例代码旨在演示如何在Struts2中定义和使用声明式异常,以及如何访问异常属性。 声明式异常...
- **Struts2**:支持注解和XML方式的校验,可以实现声明式校验,减少了代码量并提高了可维护性。 7. 国际化和本地化: - **Struts1**:需要手动配置资源文件,处理相对复杂。 - **Struts2**:提供了一套更直观的...
它允许开发者以声明式的方式配置应用程序的行为。 4. **拦截器(Interceptor)**:拦截器是Struts2的一个重要特性,它提供了AOP(面向切面编程)的能力。拦截器可以插入到Action调用链中,执行额外的任务,如日志...
7. **表单验证**:Struts2提供了强大的表单验证功能,可以在Action类中定义验证规则,或者使用XML配置文件进行声明式验证。 通过这个新闻管理系统,新手可以学习到如何使用Struts2搭建一个完整的web应用,包括控制...
配置文件提供了声明式编程,简化了代码量。 4. **拦截器(Interceptors)**:Struts2的拦截器是AOP(面向切面编程)的一个体现,可以在Action执行前后插入自定义的处理逻辑,如日志记录、权限验证、性能监控等。常见...
这些配置可以声明式地指定Action的映射、参数、结果类型等,增强了灵活性。 4. **拦截器(Interceptor)**:拦截器是Struts2的一个重要特性,它允许在Action执行前后插入自定义逻辑。比如,可以使用拦截器进行权限...
Struts2是一个强大的MVC(模型-视图-控制器)框架,它在Java Web开发中广泛应用,极大地简化了创建交互式、数据驱动的Web应用程序的过程。这个“struts2标准jar包集”包含了运行和集成Struts2框架所需的核心库和其他...
9. **表单验证**:Struts2提供了一种声明式的表单验证方式,开发者可以定义Action的验证规则,框架会自动进行验证。 10. **模板技术**:Struts2可以与FreeMarker、Velocity等多种模板引擎集成,用于生成动态视图。 ...
本文将深入探讨Struts2的异常处理机制,特别是声明式异常捕捉和异常映射。 首先,Struts2的异常处理机制允许开发者在不干扰Action执行逻辑的情况下,集中处理可能出现的异常。默认情况下,由于Action的`execute()`...
SSH中的Spring框架则是Java企业级应用的核心组件,它提供了一种声明式事务管理方式,可以简化事务处理。Spring的IoC容器负责管理对象的生命周期和对象间的依赖关系,而AOP则用于实现代码的横向切面,如日志记录、...
- **声明式异常处理**:通过配置文件来处理异常,提高代码的健壮性。 #### 8. 国际化支持 - **资源文件**:通过定义资源文件来支持多语言。 - **格式化**:根据不同的语言和地区设置,自动调整日期、数字等格式。 ...
这些核心库的引入,使得开发者可以充分利用Struts2的特性,如声明式异常处理、国际化支持、插件扩展性、以及强大的表单验证和数据绑定等功能。在实际开发中,还需要根据具体需求引入其他的库,如数据库连接池、JSON...
Spring的依赖注入(DI)使得我们可以轻松管理对象的生命周期和依赖关系,同时,它还提供了事务管理,如使用@Transactional注解进行声明式事务管理。 Hibernate的配置文件(通常是hibernate.cfg.xml)会定义数据库...
- **配置文件**: Struts2的配置文件(struts.xml)用于定义Action、结果、拦截器栈等,可以实现声明式编程。 **2. Struts2的架构** Struts2的架构基于过滤器(Filter)和Servlet容器。`...
在Service层的方法上添加@Transactional注解,可以声明式地控制事务的边界。例如,当一个操作涉及多个数据库操作时,可以确保所有操作要么全部成功,要么全部回滚。 6. **异常处理**:Struts2提供了全局异常处理...