- 浏览: 466759 次
- 性别:
- 来自: 潘多拉
文章分类
最新评论
-
lijunwyf:
代码好像不完整,后端没串起来的感觉
Json-RPC for java首次尝试 -
jerry.chen:
我用这种方式去,貌似没啥效果,楼主!
Xfire开发的webservice客户端超时问题解决 -
漫步邃思:
这个问题常遇到,老是想不起来解决方法,记住了
resin3.1.0无法解析EL表达式问题解决 -
dampce032:
在不删掉integratedSecurity=true;的情况 ...
JDBC 连接SQLServer数据库(Failed to load the sqljdbc_auth.dll) -
kill_e680:
取CPU号和取硬盘号,在linux下可以用吗?
sigar使用:在web中应用sigar取得系统信息
struts声明式异常:
在配置文件中配置exception属性,并配以相应在的异常类型,那么程序中遇到这类异常就会自动处理异常信息.
如下例:登录action处理中会抛出UserNotFoundException,那么采用声明式异常:
login.jsp
上面注释部分就是采用编程式异常的代码.现在采用声明式异常就不用不需要再catch异常
查看配置文件中注意:
type异常类型,key消息文本.当struts碰到这个异常会默认转向到input指向的jsp页面.消息文本为key所指的值.
如果在exception添加path属性,如上面path="/index.jsp" 那么异常会转向到index.jsp而不是logon.jsp
ApplicationResources.properties文件中内容:
运行程序输出结果:
user must not null
看看struts源代码:
那么当前应用如果配置了input属性,发生异常转向该属性所指页面,如果当前应用配置了exception配置了path则转向path所指页面,如果当前应用input,path都没有或者当前应用没配置exception,那么查找是否配置全局异常,如果有配置,那么转向到全局应用的path所指页面
在上面我们知道声明式异常默认采用ExceptionHandler来处理.但我们修改资源文件将
error.login.usernull = user must not null
改为
error.login.usernull = user must not null{0}
即增加参数我们会发现默认的异常处理并不能输出参数信息.
在配置文件中配置exception属性,并配以相应在的异常类型,那么程序中遇到这类异常就会自动处理异常信息.
如下例:登录action处理中会抛出UserNotFoundException,那么采用声明式异常:
<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>
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html:html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>logon</title> </head> <body> <html:errors/> <html:form action="logon"> <table border="0" width="100%"> <tr> <th align="right"><bean:message key="login.user"/></th> <td align="left"><html:text property="username" size="20" maxlength="20"></html:text></td> </tr> <tr> <th align="right"><bean:message key="login.pwd"/></th> <td align="left"><html:password property="password" size="20" maxlength="20"></html:password></td> </tr> <tr> <td align="right"><html:submit>logonin</html:submit> </td> <td align="left"><html:button property="register" >register</html:button><html:reset>reset</html:reset></td> </tr> </table> </html:form> </body> </html:html>
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.ActionMessage; import org.apache.struts.action.ActionMessages; import com.lwf.struts.form.LogonForm; import com.lwf.struts.util.UserManageEntity; import com.lwf.struts.util.UserNotFoundException; public class LogonAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { ActionMessages errors = new ActionMessages(); ActionForward forward = new ActionForward(); LogonForm logonForm = (LogonForm)form; String name = logonForm.getUsername(); String pwd = logonForm.getPassword(); UserManageEntity.UserManager(name); // try { // UserManageEntity.UserManager(name); // errors.add("logonerror1", new ActionMessage("error.login.user"," myerrmsg")); // this.saveMessages(request, errors); // request.getSession().setAttribute("user", logonForm); // forward = mapping.findForward("success"); // } catch (UserNotFoundException e) { // errors.add("logonerror2", new ActionMessage("error.login.again"," error2")); // this.saveErrors(request, errors); // forward = mapping.findForward("error"); // } // forward = mapping.findForward("success"); return forward; } }
上面注释部分就是采用编程式异常的代码.现在采用声明式异常就不用不需要再catch异常
package com.lwf.struts.util; public class UserNotFoundException extends Exception { public UserNotFoundException(){} public UserNotFoundException(String message){ super(message); } }
查看配置文件中注意:
<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>
type异常类型,key消息文本.当struts碰到这个异常会默认转向到input指向的jsp页面.消息文本为key所指的值.
如果在exception添加path属性,如上面path="/index.jsp" 那么异常会转向到index.jsp而不是logon.jsp
ApplicationResources.properties文件中内容:
error.login.usernull = user must not null
运行程序输出结果:
user must not null
看看struts源代码:
// Call the Action instance itself ActionForward forward = processActionPerform(request, response, action, form, mapping); protected ActionForward processActionPerform(HttpServletRequest request, HttpServletResponse response, Action action, ActionForm form, ActionMapping mapping) throws IOException, ServletException { try { return (action.execute(mapping, form, request, response)); } catch (Exception e) { return (processException(request, response, e, form, mapping)); } } protected ActionForward processException(HttpServletRequest request, HttpServletResponse response, Exception exception, ActionForm form, ActionMapping mapping) throws IOException, ServletException { // Is there a defined handler for this exception? ExceptionConfig config = mapping.findException(exception.getClass()); if (config == null) { log.warn(getInternal().getMessage("unhandledException", exception.getClass())); if (exception instanceof IOException) { throw (IOException) exception; } else if (exception instanceof ServletException) { throw (ServletException) exception; } else { throw new ServletException(exception); } } // Use the configured exception handling try { ExceptionHandler handler = (ExceptionHandler) RequestUtils.applicationInstance(config .getHandler()); return (handler.execute(exception, config, mapping, form, request, response)); } catch (Exception e) { throw new ServletException(e); } } /*从上面我们知道struts声明式异常默认使用ExceptionHandler 来处理,我们可以自己定义异常处理类,从而改变默认声明式异常处理的行为.在配置文件中exception 中增加handler属性*/ public ActionForward execute(Exception ex, ExceptionConfig ae, ActionMapping mapping, ActionForm formInstance, HttpServletRequest request, HttpServletResponse response) throws ServletException { LOG.debug("ExceptionHandler executing for exception " + ex); ActionForward forward; ActionMessage error; String property; // Build the forward from the exception mapping if it exists // or from the form input <strong> if (ae.getPath() != null) { forward = new ActionForward(ae.getPath()); } else { forward = mapping.getInputForward(); }</strong> // Figure out the error if (ex instanceof ModuleException) { error = ((ModuleException) ex).getActionMessage(); property = ((ModuleException) ex).getProperty(); } else { <strong> error = new ActionMessage(ae.getKey(), ex.getMessage());</strong> property = error.getKey(); } this.logException(ex); // Store the exception request.setAttribute(Globals.EXCEPTION_KEY, ex); this.storeException(request, property, error, forward, ae.getScope()); if (!response.isCommitted()) { return forward; } LOG.debug("Response is already committed, so forwarding will not work." + " Attempt alternate handling."); if (!silent(ae)) { handleCommittedResponse(ex, ae, mapping, formInstance, request, response, forward); } else { LOG.warn("ExceptionHandler configured with " + SILENT_IF_COMMITTED + " and response is committed.", ex); } return null; } /*以上代码是不是解释了异常会默认转向到input指向的jsp页面. 如果在exception添加path属性,如上面path="/index.jsp" 那么异常会转向到index.jsp而不是logon.jsp上面代码也解释了为什么配置文件exception的key属性在这里要与资源文件相对应。因为 */ error = new ActionMessage(ae.getKey(), ex.getMessage()); 这个方法传入的第一个参数为ae.getKey()即exception下的key值。如果我们继承ExceptionHandler并复写了excute方法,可以改变传入的参数值。 //我们也可以定义全局异常 <global-exceptions> <exception key="error.login.usernull" type="com.lwf.struts.util.UserNotFoundException" path="/index.jsp" ></exception> </global-exceptions>
那么当前应用如果配置了input属性,发生异常转向该属性所指页面,如果当前应用配置了exception配置了path则转向path所指页面,如果当前应用input,path都没有或者当前应用没配置exception,那么查找是否配置全局异常,如果有配置,那么转向到全局应用的path所指页面
在上面我们知道声明式异常默认采用ExceptionHandler来处理.但我们修改资源文件将
error.login.usernull = user must not null
改为
error.login.usernull = user must not null{0}
即增加参数我们会发现默认的异常处理并不能输出参数信息.
发表评论
-
myeclipse 6.5 blue 注册码
2015-01-19 12:38 858package com.kk.test; import ja ... -
xml解析[转]
2011-09-22 17:39 973jameswxx 原创 在平时工作中,难免会遇到把XML作为数 ... -
ValidateUtil
2011-09-20 08:12 1735import java.io.Serializable; ... -
log4j中关闭Hibernate调试信息
2011-09-14 08:39 2214在tomcat启动的时候,出现这个警告: log4j:WAR ... -
log4j知识点
2011-08-29 08:56 11831、Log4j.properties中至少有一个appende ... -
解决AJAX传送中文会导致乱码的问题
2011-07-16 09:46 953使用POST的时候: //如果传送参数是直接赋予的,就会产生乱 ... -
提升网站程序开发安全的6大诀窍
2011-07-16 09:43 8761.前后、端都要检查使用者输入 许多程序开发人员喜欢用Java ... -
Web测试方法
2011-07-16 09:34 16在Web工程过程中,基于Web系统的测试、确认和验收是一项重要 ... -
Ajax-------IE和FIREFOX 脚本的一些区别
2011-07-16 09:13 10411:innerText IE支持,FIREFO ... -
一段截屏的代码
2011-07-15 17:14 937import java.awt.Dimension ... -
Java实现给图片添加水印
2011-07-15 16:38 1074package com.ccniit.url; im ... -
始终会用上的Common BeanUtils
2011-07-15 16:37 872Beanutils用了魔术般的反射技术,实现了很多夸张有用的功 ... -
JAVA生成缩略图
2011-07-15 16:34 1363方法1:[第一种方法比后一种生成的缩略图要清晰] imp ... -
JAVA编程技巧之如何实现HTTP的断点续传
2011-07-15 16:32 1028(一)断点续传的原理 其实断点续传的原理很简单,就是在Htt ... -
jspSmartUpload上传下载全攻略
2011-07-15 16:27 1273一、安装篇 jspsmartupload是由www.js ... -
关于Java的Cookie操作
2011-07-15 16:05 10081.设置Cookie 1Cookie cookie ... -
Javamail操作指南
2011-07-15 16:03 1445怎样才算比较完整的Javamail操作指南?我想应该包括绝大多 ... -
SQLHelper类(Java版)
2011-07-15 15:38 1632SQLHelper类(Java版), 模仿微软提供的SQLHe ... -
java汉字转拼音
2011-07-15 15:15 1138//将汉字转换为全拼 public static Str ... -
Java 调用CMD 命令
2011-07-15 15:07 1379java的Runtime.getRuntime().exec( ...
相关推荐
声明式异常处理是Struts中的一种特性,允许我们在struts.xml配置文件中定义全局的异常映射,而不是在每个Action类中单独处理。这样可以实现异常处理的统一和标准化,减少代码重复,提高可维护性。声明式异常处理通常...
在Struts2中,声明式异常处理是其强大的特性之一,它允许开发者通过配置文件来定义不同类型的异常如何被处理,而不是在每个动作类中进行硬编码。这样可以提高代码的可读性和可维护性,同时也方便了异常处理策略的...
Struts2是一个强大的Java web开发框架,它提供了一种声明式异常处理机制,极大地简化了在应用程序中处理异常的方式。本示例代码旨在演示如何在Struts2中定义和使用声明式异常,以及如何访问异常属性。 声明式异常...
- **Struts2**:支持注解和XML方式的校验,可以实现声明式校验,减少了代码量并提高了可维护性。 7. 国际化和本地化: - **Struts1**:需要手动配置资源文件,处理相对复杂。 - **Struts2**:提供了一套更直观的...
本文将深入探讨Struts2的异常处理机制,特别是声明式异常捕捉和异常映射。 首先,Struts2的异常处理机制允许开发者在不干扰Action执行逻辑的情况下,集中处理可能出现的异常。默认情况下,由于Action的`execute()`...
它允许开发者以声明式的方式配置应用程序的行为。 4. **拦截器(Interceptor)**:拦截器是Struts2的一个重要特性,它提供了AOP(面向切面编程)的能力。拦截器可以插入到Action调用链中,执行额外的任务,如日志...
7. **表单验证**:Struts2提供了强大的表单验证功能,可以在Action类中定义验证规则,或者使用XML配置文件进行声明式验证。 通过这个新闻管理系统,新手可以学习到如何使用Struts2搭建一个完整的web应用,包括控制...
- **配置文件**: Struts2的配置文件(struts.xml)用于定义Action、结果、拦截器栈等,可以实现声明式编程。 **2. Struts2的架构** Struts2的架构基于过滤器(Filter)和Servlet容器。`...
配置文件提供了声明式编程,简化了代码量。 4. **拦截器(Interceptors)**:Struts2的拦截器是AOP(面向切面编程)的一个体现,可以在Action执行前后插入自定义的处理逻辑,如日志记录、权限验证、性能监控等。常见...
8. **异常处理**:Struts 2提供了一种声明式和编程式的异常处理机制。通过全局异常映射,可以统一处理特定类型的异常,提高代码的可读性和可维护性。 9. **国际化与本地化**:Struts 2支持多语言环境,开发者可以...
Struts可以通过编程式或声明式的方式来管理事务,确保数据的一致性。 8. **错误与异常处理**: Struts提供了错误和异常处理机制,当出现错误或异常时,可以跳转到特定的错误页面,或者显示错误消息。 9. **Struts...
这些配置可以声明式地指定Action的映射、参数、结果类型等,增强了灵活性。 4. **拦截器(Interceptor)**:拦截器是Struts2的一个重要特性,它允许在Action执行前后插入自定义逻辑。比如,可以使用拦截器进行权限...
这些核心库的引入,使得开发者可以充分利用Struts2的特性,如声明式异常处理、国际化支持、插件扩展性、以及强大的表单验证和数据绑定等功能。在实际开发中,还需要根据具体需求引入其他的库,如数据库连接池、JSON...
Struts2是一个强大的MVC(模型-视图-控制器)框架,它在Java Web开发中广泛应用,极大地简化了创建交互式、数据驱动的Web应用程序的过程。这个“struts2标准jar包集”包含了运行和集成Struts2框架所需的核心库和其他...
它允许开发者声明式地配置应用程序的行为。 4. **表达式语言(OGNL)**:Struts2使用OGNL(Object-Graph Navigation Language)作为默认的表示层语言,用于在视图层与模型层之间传递数据,例如在JSP中使用`...
9. **表单验证**:Struts2提供了一种声明式的表单验证方式,开发者可以定义Action的验证规则,框架会自动进行验证。 10. **模板技术**:Struts2可以与FreeMarker、Velocity等多种模板引擎集成,用于生成动态视图。 ...
XML配置提供了一种声明式的方式来组织应用的逻辑。 4. **拦截器**:Struts2的一个重要特性是拦截器(Interceptor),它在Action调用前后执行,可以用来进行日志记录、权限检查、事务管理等多种功能。通过组合不同的...
通过Spring的Action代理,可以实现Struts Actions的声明式事务管理,使得事务控制更加简洁。 Struts In Action 这本书会详细解释Struts的各个组件及其工作原理,包括Action、ActionForm、ActionMapping、...