- 浏览: 310311 次
最新评论
-
nucleus:
为什么都是没有图的。。。。。。。求图片啊
《研磨struts2》第七章 值栈和OGNL 之 7.4 ActionContext和ServletActionContext -
nucleus:
为什么都是没有图的。。。。。。。求图片啊
《研磨struts2》第七章 值栈和OGNL 之 7.4 ActionContext和ServletActionContext -
nucleus:
为什么都是没有图的。。。。。。。求图片啊
《研磨struts2》第七章 值栈和OGNL 之 7.4 ActionContext和ServletActionContext -
nucleus:
为什么都是没有图的。。。。。。。求图片啊
《研磨struts2》第七章 值栈和OGNL 之 7.4 ActionContext和ServletActionContext -
hunanjun000:
《研磨struts2》第四章 Action 之 4.5 Action的其它重要知识
5.5 Struts2的异常映射
5.5.1 异常映射基础
在Action中execute方法的方法签名为public String execute() throws Exception,这样,Action可以抛出任何Exception,那么,Exception抛给谁呢?
1:自己实现异常处理
来做一个简单的试验,在Action的方法中这样写:
上面的代码中有int a=5/0;,很显然,会抛出除数为0的错误,这个错误是RuntimeException,我们的程序没有进行相应的例外处理,则会抛给Struts2去处理。运行结果如下图所示:
图5.3 报例外的页面
可见,这个错误直接被抛给了web容器,Struts2并没有处理。那么,在实际的项目中很显然不能这么简单而粗暴的处理错误,一种简单的处理方法就是跳转到一个错误处理页面。
假设要求这个Action,在出现“ArithmeticException”的时候,跳转到一个叫math-exception的Result,而其他错误跳转到另一个叫otherwise-exception的Result。那么,在Action中可以这么写。
这样,在运行中出现ArithmeticException就会跳转到math-exception指定的页面,而其他Exception就会跳转到otherwise-exception指定的页面,如果没有出错,就会跳转到success指定的页面。
在struts.xml的Action中,只要配置好上述三个Result就可以正常运行了。
2:使用Struts2的异常机制
介绍到这里,我们还没有接触Struts2的异常机制,只是把Struts2的异常机制要做的事情,自己用编码实现了一遍。下面,来看看如何使用Struts2的异常机制。
在<action>元素中设置<exception-mapping>元素,可以指定在execute方法抛出指定错误的时候,跳转到哪个指定的页面。
修改上面的代码,使用Struts2的异常机制就不需要自己手动去try-catch了,Action的代码还原为如下所示:
然后在struts.xml的<action>元素中增加<exception-mapping>子元素,示例如下:
- <action name="helloworldAction" class="cn.javass.action.action.HelloWorldAction">
- <exception-mapping result="math-exception" exception="java.lang.ArithmeticException"/>
- <exception-mapping result="math-exception" exception="java.lang.Exception"/>
- <result name="math-exception">/error.jsp</result>
- <result>/s2impl/welcome.jsp</result>
- </action>
在<action>元素里面,增加了两个<exception-mapping>元素,其execption属性指定了一个Exception的全类名,如果Action的execute方法抛出的错误是这个Exception类的实例或其派生类的实例,则会跳转到对应的result属性所指定的结果。当然,它们指定的名称为“math-exception”的Result,还是需要另行配置的。
这里配置的名称为“math-exception”的Result,指向了web应用根下的error.jsp,在里面只是简单的输出了一句话,示例如下:
这样一来,当Action的execute方法抛出错误的时候,如果其<action>元素配置了<exception-mapping>子元素,则会按顺序寻找,找到第一个符合条件的<exception-mapping>元素,跳转到其指定的Result;如果找不到符合条件的<exception-mapping>元素,仍然把错误交给web容器处理。
对比一下,使用了异常机制之后,Action的execute方法跟以前的实现是一样的,不需要自己去try-catch了,而原来对应的多个catch块,实际上都变成了<exception-mapping>的配置。
一般情况下,实际开发中会使用异常机制,可以把重复的catch块提炼到配置文件中,便于统一的配置和维护。
5.5.2 局部异常映射与全局异常映射
上面的<exception-mapping>元素是作为<action>元素的子元素来配置的,只对本<action>元素有效。其实跟局部Result和全局Result一样,也可以把<exception-mapping>提到父包中,做成全局的异常映射。
全局异常映射仍然是<exception-mapping>元素,只不过不再是<action>元素的子元素,而是<global-exception-mappings>元素的子元素,而<global-exception-mappings>元素是<package>元素的子元素。
当然,配置了<global-exception-mappings>,自然需要配置<global-results>,而且<global-results>还必须在<global-exception-mappings>之前,示例如下:
- <package name="helloworld" extends="struts-default">
- <global-results>
- <result name="math-exception">/error.jsp</result>
- </global-results>
- <global-exception-mappings>
- <exception-mapping result="math-exception" exception="java.lang.ArithmeticException"/>
- <exception-mapping result="math-exception" exception="java.lang.Exception"/>
- </global-exception-mappings>
- <action name="helloworldAction" class="cn.javass.action.action.HelloWorldAction">
- <result>/s2impl/welcome.jsp</result>
- </action>
- </package>
对比局部结果和全局结果的查找顺序,可以很容易的理解局部异常映射和全局异常映射的查找顺序。
(1)首先,找自己的<action>元素的内的<exception-mapping >元素是否有匹配的,如果有就执行这个exception的映射配置,如果没有,下一步。
(2)其次,找自己的包里面的全局异常映射,也就是到自己的<action>所在的package中,找<global-exception-mappings >元素内的< exception-mapping >元素,看看是否有匹配的,如果有就执行这个exception的映射配置,如果没有,下一步。
(3)再次,递归的寻找自己的包的父包、祖父包中的全局异常映射是否有匹配的,如果有就执行这个exception的映射配置,如果没有,下一步。
(4)最后,如果上述三种情况都没有的话,则将Exception抛出给Struts2去处理。
注意:如果出现同样符合条件的异常映射,上述的顺序也是异常映射之间的优先顺序,也就是说,如果Action的execute方法抛出一个异常,而局部异常映射和全局异常映射中都有相应的配置,那会以局部异常映射为准。
5.5.3 在页面输出异常信息
在前面的示例中,当Action的execute方法抛出一个异常之后,跳转到指定的页面,也就是error.jsp后,只是简单的输出一句信息,并没有把具体的异常信息展示出来。那么,想要在error.jsp页面上展示Exception的错误信息,该怎么做呢?
可以使用Struts2提供的标签,来输出Exception的错误信息,如下:
- <s:property value=”exception”/>:仅仅简单打印出exception对象的例外消息。
- <s:property value=”exceptionStack”/>可以打印出exception的堆栈信息。
在error.jsp页面上使用上面的s标签即可,示例如下:
- <%@ page language="java" contentType="text/html; charset=gb2312"
- pageEncoding="gb2312"%>
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
- <title>Insert title here</title>
- </head>
- <body>
- <%@ taglib prefix="s" uri="/struts-tags"%>
- <font color=red><b>对不起,出错了,错误信息为:</b></font><br>
- <s:property value="exception"/>
- <br>
- <font color=red><b>错误的堆栈信息为:</b></font><br>
- <s:property value="exceptionStack"/>
- </body>
- </html>
运行结果如下图所示:
图5.4 显示例外信息的页面
私塾在线网站原创《研磨struts2》系列
转自请注明出处:【http://sishuok.com/forum/blogPost/list/0/4054.html】
欢迎访问http://sishuok.com获取更多内容
发表评论
-
研磨struts2 目录贴
2012-08-24 12:12 163531.1 《研磨struts2》 第一章 Struts2 ... -
跟着cc学设计 之 研磨设计模式 视频教程 出炉了
2012-08-15 07:16 2研磨设计模式——跟着CC学设计系列精品课程,上线了! ... -
研磨struts2 目录
2012-07-30 21:15 2471.1 《研磨struts2》 第一章 Strut ... -
研磨struts2 目录
2012-07-30 16:54 361.1 《研磨struts2》 第一章 Stru ... -
《研磨struts2》A.2 struts.properties的配置 之 A.2.1 概述
2012-07-09 12:10 3072A.2.1 概述 如果我们希望覆盖在 ... -
《研磨struts2》附录A Struts2的配置 之 A.1 struts.xml的配置
2012-07-09 12:10 2719A.1 struts.xml的配置 A.1.1 ... -
《研磨struts2》第二十一章 零配置 之 21.3 通过注解来实现零配置
2012-07-06 08:07 293021.3 通过注解来实现零配置 21.3.1 ... -
《研磨struts2》第二十一章 零配置 之 21.2 约定大于配置
2012-07-05 10:44 247521.2 约定大于配置 21.2.1 约定 ... -
《研磨struts2》第二十一章 零配置 之 21.1 概述
2012-07-05 10:44 232621.1 概述 21.1.1 零配置概述 在 ... -
《研磨struts2》第二十章 整合SiteMesh 之 20.3 整合Struts2与SiteMesh
2012-07-04 08:15 2090在Struts2中使用SiteMesh ... -
《研磨struts2》第二十章 整合SiteMesh 之 20.2 单独使用SiteMesh
2012-07-03 08:00 210520.2 单独使用SiteMesh 20. ... -
《研磨struts2》第二十章 整合SiteMesh 之 20.1 调整应用的风格
2012-07-03 07:59 187020.1 调整应用的风 ... -
《研磨struts2》19.2 使用execAndWait拦截器模拟进度条 之 19.2.1 模拟长时间运行的Action
2012-07-02 12:24 215019.2.1模拟长时间运行的Action ... -
《研磨struts2》第十九章 进度条 之 19.1 使用“进度条”告知用户进度
2012-07-02 12:23 215219.1 使用“进度条”告知用户进度 ... -
《研磨struts2》第十八章 结合JFreeChart 之 18.3 Struts2结合JFreeChart
2012-06-28 12:12 201518.3 Struts2结合JFreeChart ... -
《研磨struts2》第十八章 结合JFreeChart 之 18.2 Struts2插件概述
2012-06-28 12:11 2031Struts2并没有求大求全,企图把所有 ... -
《研磨struts2》第十八章 结合JFreeChart 之 18.1 JFreeChart使用
2012-06-20 15:48 229618.1 JFreeChart使用 18.1.1概 ... -
研磨struts2(1-10章)电子书下载
2012-06-19 07:30 6078研磨struts2的博客文章 私塾在线学习网 《研 ... -
《研磨struts2》第十七章 防止重复提交 之 17.3 更强大的tokenSession拦截器
2012-06-18 13:46 208217.3 更强大的tokenSession拦截器 ... -
《研磨struts2》第十七章 防止重复提交 之 17.2 使用标签
2012-06-18 13:45 234017.2 使用<s:token/>标签 ...
相关推荐
这个压缩包中的“研磨Struts2配书视频对应的演示源代码”是《研磨Struts2》一书作者为了帮助读者更好地理解和实践书中理论知识而提供的实际示例代码。 首先,让我们深入理解Struts2的核心概念和技术特性: 1. **...
### 知识点一:Struts2入门(MVC HelloWorld) #### 1.1 Struts2简介 ...以上就是关于“研磨Struts2”的主要知识点梳理,通过深入学习这些内容,开发者可以更好地掌握Struts2框架的核心技术和实践技巧。
Result是Struts2中负责返回结果的对象,第五章详细介绍了Result的各种类型和用法。预定义的Result类型如dispatcher、redirect、chain等,以及如何自定义Result,都是本章的重点。此外,Struts2的异常映射、...
由于文件较大,我把这个文档切割为2部分,这是第一部分,请下载完第一部分后一定要下载第二部分,否则不能阅读。
《研磨Struts2》这本书是专门针对Struts2框架的学习指南,通过深入浅出的方式讲解了Struts2的核心概念和技术。其配套的PPT和视频旨在帮助读者更直观地理解书中的理论知识,并将其付诸实践。 在研读《研磨Struts2》...
根据提供的文件信息,我们可以推断出这是一份关于《研磨Struts 2》书籍PDF版本的下载资源。为了更好地理解和概括这份资料所涉及的知识点,我们先来了解一下Struts 2框架及其重要性,然后深入探讨《研磨Struts 2》这...
12. **其他重要知识**:Struts2还涉及国际化、异常处理、主题与皮肤、动态方法调用等多个高级主题,这些内容使得Struts2能够应对复杂的Web应用需求。 通过《研磨Struts2》,读者可以系统地学习Struts2框架的各个...
研磨Struts2 高清完整版,请和第一部分一起下载啊
研磨Struts2_12859679_高清完整版
研磨Struts2-高清-完整目录-2011年10月,分享给所有需要的人
第5章 单例模式(Singleton) 第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11...
Java工程师三大框架面试题.pdf
第5章 单例模式(Singleton) 第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11...
研磨设计模式.part2 一定要下载5部分
第5章 单例模式(Singleton) 第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) ...