Struts2 异常处理机制

原创

Struts2 异常处理机制

任何成熟的MVC框架都应该提供成就的异常处理机制,Strut2也不例外。Struts2提供了一种声明式的异常处理方式,Struts2也是通过配置的拦截器来实现异常处理机制的。

一异常处理机制

1、配置

Struts2的异常处理机制是:通过在struts.xml文件中配置﹤exception-mapping …﹥元素完成的,配置该元素时,需要指定两个属性:

exception:此属性指定该异常映射所设置的异常类型。

result:此属性指定Action出现该异常时,系统转入result属性所指向的结果。

异常映射也分为两种:

局部异常映射:元素作为元素的子元素配置。

全局异常映射:元素作为元素的子元素配置。


2、输出异常信息

使用Struts2的标签来输出异常信息:

:输出异常对象本身。

: 输出异常堆栈信息。

利用struts2的异常处理机制和拦截器机制,可以很方便的实现异常处理功能,你不再需要在Action中捕获异常,并抛出相关的异常了,这些都交给拦截器来帮你做了。


二、应用实例

1、配置struts.xml

1.  在 struts.xml 文件中,声明全局异常映射,以及对应的全局异常转发如下所示:

           /admin/error/ErrDisplay.ftl

       

      

       

           

              exception="org.basis.common.exception.SystemException">

       


2、异常处理类

SystemException是异常处理类,代码如下所示:

package org.basis.common.exception;

 

public class SystemException extends RuntimeException {

 

    private static final long serialVersionUID = 1L;

 

    public SystemException(String frdMessage) {

       super(createFriendlyErrMsg(frdMessage));

    }

 

    public SystemException(Throwable throwable){

       super(throwable);

    }

 

    public SystemException(Throwable throwable, String frdMessage){

       super(throwable);

    }

 

   

    private static String createFriendlyErrMsg(String msgBody) {

       String prefixStr = "抱歉。";

       String suffixStr = "请稍后再试或与管理员联系!";

       StringBuffer friendlyErrMsg = new StringBuffer();

       friendlyErrMsg.append(prefixStr);

       friendlyErrMsg.append(msgBody);

       friendlyErrMsg.append(suffixStr);

       return friendlyErrMsg.toString();

    }

 

}

3、全局异常处理页面

在系统的/WebRoot/common/global/目录下,新建一个全局的异常处一页面errorPage.jsp。这个页面很简单。

JAVA代码:errorPage.jsp

<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>

<%@ page isErrorPage="true"%>

<%@ taglib prefix="s" uri="/struts-tags" %>

<%

    response.setHeader("Cache-Control","no-cache");

    response.setHeader("Cache-Control","no-store");

    response.setDateHeader("Expires",0);

    response.setHeader("Pragma","no-cache");

%>

    

       

           

              

           

           

              

           

           

              

           

       

                                        

              

                     

                  查看详细信息

              

                  

                  

              

    


4、自定义异常拦截器

在这里,应用自定义的异常拦截器,在拦截器中,捕获常见的异常,并以友好异常信息抛出,相关代码如下所示:

JAVA代码:ExceptionInterceptor.java

package org.basis.struts.interceptor;

 

import java.io.IOException;

import java.sql.SQLException;

import org.basis.common.exception.SystemException;

import org.springframework.dao.DataAccessException;

import com.opensymphony.xwork2.ActionInvocation;

import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

 

@SuppressWarnings("serial")

public class ExceptionInterceptor extends AbstractInterceptor {

 

    @SuppressWarnings("unchecked")

    public String intercept(ActionInvocation actionInvocation) throws Exception {

       String result = "";

       try {

           result = actionInvocation.invoke();

       } catch (DataAccessException ex) {

           throw new SystemException("数据库操作失败!");

       } catch (NullPointerException ex) {

           throw new SystemException("空指针,调用了未经初始化或者是不存在的对象!");

       } catch (IOException ex) {

           throw new SystemException("IO读写异常!");

       } catch (ClassNotFoundException ex) {

           throw new SystemException("指定的类不存在!");

       } catch (ArithmeticException ex) {

           throw new SystemException("数学运算异常!");

       } catch (ArrayIndexOutOfBoundsException ex) {

           throw new SystemException("数组下标越界!");

       } catch (IllegalArgumentException ex) {

           throw new SystemException("调用方法的参数错误!");

       } catch (ClassCastException ex) {

           throw new SystemException("类型强制转换错误!");

       } catch (SecurityException ex) {

           throw new SystemException("违背安全原则异常!");

       } catch (SQLException ex) {

           throw new SystemException("操作数据库异常!");

       } catch (NoSuchMethodError ex) {

           throw new SystemException("调用了未定义的方法!");

       } catch (InternalError ex) {

           throw new SystemException("Java虚拟机发生了内部错误!");

       } catch (Exception ex) {

           throw new SystemException("程序内部错误,操作失败!");

       }

       return result;

    }

}


5、配置异常拦截器

配置这个拦截器,代码如下:

struts.xml文件局部:

           

           

           

           

              

              

           

       

       

 

       

           /common/global/errorPage.jsp

       

      

       

           

              exception="org.basis.common.exception.SystemException">

       

经过这样处理,Struts2做异常处理还是比较方便的了。


6、应用实际效果

下面我们修改一下前面国际华的那个Action,让它抛一个错误。

package demo.struts2.action;

 

import java.util.ArrayList;

import java.util.List;

import com.opensymphony.xwork2.ActionSupport;

 

public class MessageAction extends ActionSupport {

 

    public String execute() throws Exception {

       // getText(String) string为key

       String str1 = getText("label.helloWorld");

       System.out.println(str1);

       // 带参数的

       String str2 = getText("label.hello", new String[] { "fjf" });

       System.out.println(str2);

 

       // 与上一种实现一样

       List l = new ArrayList();

       l.add("callan");

       String str3 = getText("label.hello", l);

       System.out.println(str3);

      

       String str4 = getText("userName.required");

       System.out.println(str4);

      

       int i = 1/0;

 

       return SUCCESS;

    }

}

我们知道,做除法的时候,除数不能为零,int i = 1/0;这里应该抛出错误,实际运行一下这个Action,系统提示异常,如下图所示:


文章最后发布于: 2012-05-10 15:42:28
        
展开阅读全文
0 个人打赏
发表评论
还能输入1000个字符

struts2中的异常映射处理机制

04-14 阅读数 1947

struts2中的全局异常映射和局部异常映射 博文 来自: VipMao的博客

struts2全局异常处理

08-11 阅读数 916

struts.xml配置&lt;?xmlversion="1.0"encoding="UTF-8"?&gt;&lt;!DOCTYPEst... 博文 来自: cyywxy的博客

struts2异常处理

08-21 阅读数 384

struts2异常处理JSPStrutsApacheWeb    *编写整个系统统一的异常类:SystemException Java代码  package com.bjsxt.oa;    publ... 博文

程序员终极面试指南!

09-14 阅读数 1823

身为技术人,如何拿下自己心仪的 offer?

作者|James Bedford

译者 |苏本如,责编 | 屠敏

出品 | CSDN(ID:CSDNnews)

以下为译文:

介绍




博文



我在快手认识了 4 位工程师,看到了快速发展的公司和员工如何彼此成就!

09-16 阅读数 2万+

作者 | 胡巍巍

出品 | CSDN(ID:CSDNnews)

从西二旗地铁站B口出来,步行700多米可以看到一个工业建筑风格的院子。这个独立的院子和后厂村各大互联网公司的高楼林立有些不同。

院…


博文



让程序员崩溃的瞬间(非程序员勿入)

09-16 阅读数 19万+

今天给大家带来点快乐,程序员才能看懂。

来源:https://zhuanlan.zhihu.com/p/47066521

  1. 公司实习生找 Bug

2.在调试时,将断点设…


博文



分享一个 pycharm 专业版的永久使用方法

09-19 阅读数 5098

刚开始接触Python,首先要解决的就是Python开发环境的搭建。 目前比较好用的Python开发工具是PyCharm,他有社区办和专业版两个版本,但是社区版支持有限,我们既然想好好学python,... 博文

用Python分析2000款避孕套,得出这些有趣的结论

09-18 阅读数 3万+

到现在为止,我们的淘宝教程已经写到了第四篇,前三篇分别是:

第一篇:Python模拟登录淘宝,详细讲解如何使用requests库登录淘宝pc端。
第二篇:淘宝自动登录2.0,新增Cookies序列化…


博文



无需安装,仅需 1 条指令,秒实现内网穿透的神器,你有用过吗?

09-17 阅读数 1997

什么是 ServeoServeo 是一个免费的内网穿透服务,Serveo 可以将本地计算机暴露在互联网上,官方声称其为 Ngrok 的绝佳替代品。Serveo 其最大优点...... 博文

作为曾经的 Web 开发“王者”,jQuery 的传奇怎么续写?

09-20 阅读数 740

作为世界上使用最广泛的JavaScript库,jQuery曾经帮助过一代开发人员创建了适用于每种浏览器的网站,可以说,Web开发之所以能有今天,jQuery可谓功不可没。但是随着新的库、框架和范例的不... 博文

重磅:硬核前端面试开源项目汇总(进大厂必备)

09-24 阅读数 902

复习前端面试的知识,是为了巩固前端的基础知识,最重要的还是平时的积累!”开源项目https://github.com/InterviewMap/CS-Interview...... 博文

为什么平头哥做芯片如此迅猛?

09-26 阅读数 9410

作者 | 胡巍巍 发自杭州云栖大会责编 | 唐小引出品 | CSDN(ID:CSDNnews)2018年10月31日,阿里旗下的平头哥半导体有限公司成立。如今,平头哥成立...... 博文

对计算机专业来说学历真的重要吗?

09-27 阅读数 6万+

我本科学校是渣渣二本,研究生学校是985,现在毕业五年,校招笔试、面试,社招面试参加了两年了,就我个人的经历来说下这个问题。

这篇文章很长,但绝对是精华,相信我,读完以后,你会知道学历不好的解决方案…


博文



技术人员要拿百万年薪,必须要经历这9个段位

08-24 阅读数 1万+

很多人都问,技术人员如何成长,每个阶段又是怎样的,如何才能走出当前的迷茫,实现自我的突破。所以我结合我自己10多年的从业经验,总结了技术人员成长的9个段位,希望对大家的职...... 博文

多线程编程是后台开发人员的基本功

09-29 阅读数 5835

这里先给大家分享一个小故事:在我刚开始参加工作的那年,公司安排我开发一款即时通讯软件(IM,类似于 QQ 聊天软件),在这之前我心里也知道如果多线程操作一个整型值是要加锁...... 博文

Java 网络爬虫,就是这么的简单

10-08 阅读数 1万+

这是 Java 网络爬虫系列文章的第一篇,如果你还不知道 Java 网络爬虫系列文章,请参看 学 Java 网络爬虫,需要哪些基础知识。第一篇是关于 Java 网络爬虫入门内容,在该篇中我们以采集虎扑... 博文

500行代码,教你用python写个微信飞机大战

10-16 阅读数 4万+

这几天在重温微信小游戏的飞机大战,玩着玩着就在思考人生了,这飞机大战怎么就可以做的那么好,操作简单,简单上手。

帮助蹲厕族、YP族、饭圈女孩在无聊之余可以有一样东西让他们振作起来!让他们的左手 / …


博文



2019诺贝尔经济学奖得主:贫穷的本质是什么?

10-15 阅读数 6927

2019年诺贝尔经济学奖,颁给了来自麻省理工学院的 阿巴希·巴纳吉(Abhijit Vinayak Banerjee)、艾丝特·杜芙若(Esther Duflo)夫妇和哈...... 博文

redis——相关问题汇总

10-16 阅读数 1万+

什么是redis?

Redis 本质上是一个 Key-Value 类型的内存数据库, 整个数据库加载在内存当中进行操作, 定期通过异步操作把数据库数据 flush 到硬盘上进行保存。

因为是纯内…


博文



【JS 口袋书】第 6 章:JS 对象生命周期的秘密

10-16 阅读数 398

作者:valentinogagliardi来源:github译者:前端小智

阿里云最近在做活动,低至2折,有兴趣可以看看:

https://promotion.aliyun.com/ntms/…


博文



别在学习框架了,那些让你起飞的计算机基础知识。

10-22 阅读数 4万+

我之前里的文章,写的大部分都是与计算机基础知识相关的,这些基础知识,就像我们的内功,如果在未来想要走的更远,这些内功是必须要修炼的。框架千变万化,而这些通用的底层知识,却是几乎不变的,了解了这些知识,... 博文

程序员必须掌握的核心算法有哪些?

10-21 阅读数 6万+

由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,... 博文

SQL基本语法入门 看这里就够了

10-21 阅读数 1237

SQL执行顺序

第一步:执行FROM

第二步:WHERE条件过滤

第三步:GROUP BY 分组

第四步:执行SELECT 投影列

第五步:HAVING条件过滤

第六步:执行ORDER B…


博文



高并发技术

10-24 阅读数 8684

高并发技术 第一章 预备知识一 理解大数据二 网工基础知识OSI七层参考模型应用层表示层会话层传输层网络层链路层物理层功能分层总结第二章 LVS技术一 LVS介绍二 LVS调度算法LVS命令监控... 博文

python 程序员进阶之路:从新手到高手的100个模块

10-23 阅读数 3万+

在知乎和CSDN的圈子里,经常看到、听到一些 python 初学者说,学完基础语法后,不知道该学什么,学了也不知道怎么用,一脸的茫然。近日,CSDN的公众号推送了一篇博客,题目叫做《迷思:Python... 博文

Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)

10-22 阅读数 2万+

最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成) one 樱花树

动…


博文



程序员不懂浪漫?胡扯!

10-22 阅读数 1万+

程序员男朋友你的程序员男朋友为你做过什么暖心的事情呢?我的男朋友是一个程序员,他有很多大家在网络上吐槽的程序员的缺点,比如加班很多,没空陪我吃饭逛街看电影,比如说他有的时...... 博文

程序员成长的四个简单技巧,你 get 了吗?

10-23 阅读数 1万+

最近拜读了“阿里工程师的自我修养”手册,12 位技术专家分享生涯感悟来帮助我们这些菜鸡更好的成长,度过中年危机,我收获颇多,其中有不少的方法技巧和我正在使用的,这让我觉得我做的这些事情是对的,我走在了... 博文

给 python 初学者的四条忠告

10-23 阅读数 9565

学习一种编程语言,首先要找一款合用的集成开发工具,似乎是自然而然的想法。为什么不呢?IDE可以自动补齐,可以一键运行,还可以断点调试。使用IDE开发项目,就像驾驶一辆内饰豪华的汽车,尽情享受驾驶的乐趣... 博文

C++控制台打飞机小游戏

10-24 阅读数 5019

文章目录前言介绍 前言 我终于决定还是把这个放出来。 这是我在纪中颓废的时候写的。 介绍 先来视频: 具体信息主界面上都有写。 按空格暂停,建议暂停后再升级属性。 记录最高分的文件进行... 博文

Python自动化完成tb喵币任务

10-25 阅读数 1万+

2019双十一,tb推出了新的活动,商店喵币,看了一下每天都有几个任务来领取喵币,从而升级店铺赚钱,然而我既想赚红包又不想干苦力,遂使用python来进行手机自动化操作,目测全网首发!

用到的库:



博文



从月薪3K的中专生,到身家千万的CTO!人生最大的对手,就是自已

10-25 阅读数 1万+

关注“技术领导力”博客,独家大厂干货推送

文/Daniel.W

David坐在我对面,窗外是梦境般的外滩夜景,繁星点点的璀璨灯火,散落在黄浦江两岸。我转过头对David说,你丫挺会享受啊,约我…


博文



这应该是把计算机网络五层模型讲的最好是文章了,看不懂你打我

10-25 阅读数 2万+

帅地:用心写好每一篇文章!

前言
天各一方的两台计算机是如何通信的呢?在成千上万的计算机中,为什么一台计算机能够准确着寻找到另外一台计算机,并且把数据发送给它呢?
可能很多人都听说过网络通信的 5 …


博文



史上最强Tomcat8性能优化

10-25 阅读数 2万+

文章目录授人以鱼不如授人以渔目的服务器资源Tomcat配置优化Linux环境安装运行Tomcat8AJP连接执行器(线程池)3种运行模式部署测试用的web项目查看服务器信息部署web应用使用Apach... 博文

深深的码丨Java HashMap 透析

11-07 阅读数 7288

HashMap 相关概念 HashTab、HashMap、TreeMap 均以键值对像是存储或操作数据元素。HashTab继承自Dictionary,HashMap、TreeMap继承自Abstrac... 博文

                
                                

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

你可能感兴趣的:(struts2,struts)