struts的异常处理(参照网上相关内容整理)

异常是当JVM(JAVA虚拟机)在执行应用程序的某个方法的时候遇到的非正常现象,JVM就会生成一个异常对象,抛给客户以便客户进行异常处理.Struts框架的异常处理机制建立在java异常处理的基础之上.在研究Struts异常处理之前,先回顾一下java异常处理原理,理解java虚拟机JVM的异常处理过程有助于应用设计正确的异常处理方法.处理异常需要JVM付出不小的开销,所以用于必须慎重使用.
JAVA异常是在java程序运行的时候遇到非正常的情况而创建的对象,它封装了异常信息,java异常的根类为java.lang.Throwable,整个类有两个直接子类java.lang.Error和java.lang.Exception.Error是程序本身无法恢复的严重错误.Exception则表示可以被程序捕获并处理的异常错误.JVM用方法调用栈来跟踪每个线程中一系列的方法调用过程,该栈保存了每个调用方法的本地信息.对于独立的JAVA程序,可以一直到该程序的main方法.当一个新方法被调用的时候,JVM把描述该方法的栈结构置入栈顶,位于栈顶的方法为正确执行的方法.当一个JAVA方法正常执行完毕,JVM回从调用栈中弹处该方法的栈结构,然后继续处理前一个方法.如果java方法在执行代码的过程中抛出异常,JVM必须找到能捕获异常的catch块代码.它首先查看当前方法是否贼这样的catch代码块,如果存在就执行该catch代码块,否则JVM回调用栈中弹处该方法的栈结构,继续到前一个方法中查找合适的catch代码块.最后如果JVM向上追到了main()方法,也就是一直把异常抛给了main()方法,仍然没有找到该异常处理的代码块,该线程就会异常终止,如果该线程是主线程,应用程序也随之终止,此时JVM将把异常直接抛给用户,在用户终端上会看到原始的异常信息。

一、编程式异常处理:
Struts框架在视图层和控制层提供了对异常处理的支持.Struts的控制器负责捕获各种异常,包括控制器运行中本身抛出的异常,以及调用模型的业务方法的异常.当异常被控制器捕获的时候,在异常处理代码块中,创建描述异常信息的ActionMessage对象把它保存在ActionMessages或者它的子类ActionErrors对象中,然后把它保存在特定的范围内,比如request或session.接下来在视图层<html:error>标签检索特定范围的ActionMessages对象,把本地化错误消息输出到页面上.这种异常处理机制可以避免用户看到原始的java异常信息.可以更友好的把错误信息展示给用户.
捕获异常-->创建相应的异常信息-->传递异常信息-->到相应的页面处理异常

....catch(Exception e){
ActionMessages messages = new ActionMessages();
ActionMessage message = new ActionMessage("errors.detail",username);
messages.add("error",message);
this.saveErrors(request, messages);
return mapping.findforward("exception");
}

在相应异常处理页面采用<html:messages/>标签或<html:errors/>标签
二、声明式异常处理
Struts框架也允许以配置的方式来处理异常,配置方法可以避免在Action类中通过硬编码来处理异常,提高应用的灵活性,可重用性和可维护性.对于Action类的execute()方法抛出的异常会先查找异常处理元素<exception>,如果是被嵌套在<global-exception>元素中就表示是全局异常处理元素,对所有的Action都适用.如果是嵌套在<action>元素中,就表示局部的异常处理元素,仅对当前的Action适用.阐述一下<exception>元素的属性:

1) type:指定待处理的异常类(Exception的类绝对路径,这里是自己定义的异常类SystemException,继承RuntimeException )

2) handler:指定异常处理类.默认是ExceptionHandler.这里是自己定义异常处理类SystemExceptionHandler,继承ExceptionHandler

3) path:指定转发路径(如果不定义path,默认情况下将使用<action>标签中input属性对应的页面,因为默认异常处理类ExceptionHandler会先判断getPath是否有值,非空就new一个该getPath的ActionForward,为空就设置为mapping.getInputForward的值)

4) key:指定错误消息key.根据这个key到ResourceBundle中寻找匹配的消息文本

5) scope:指定ActionMessages对象的存放范围,默认request,也可以设置session

1、构建统一异常类(也可以在不构建此类,只要在配置文件中指定type="java.lang.RuntimeException")

public class SystemException extends RuntimeException {

private String key;

private Object[] values;

public String getKey() {
return key;
}

public Object[] getValues() {
return values;
}

public SystemException() {
super();
}

public SystemException(String message, Throwable throwable) {
super(message, throwable);
}

public SystemException(String message) {
super(message);
}

public SystemException(Throwable throwable) {
super(throwable);
}

public SystemException(String key, String message){
super(message);
this.key = key;
}
}

2、构建异常处理类(也可不创建此类,只要在配置文件中指定handler="org.apache.struts.action.ExceptionHandler")

public class SystemExceptionHandler extends ExceptionHandler {

public ActionForward execute(
Exception ex,
ExceptionConfig ae,
ActionMapping mapping,
ActionForm formInstance,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException {
ActionForward forward = null;
ActionMessage error = null;
if(ae.getPath() != null){
forward = new ActionForward(ae.getPath());
}else{
forward = mapping.getInputForward();
}
if(ex instanceof SystemException ){
SystemException se = (SystemException)ex;
String key = se.getKey();
if(key == null){
error = new ActionMessage(ae.getKey(), se.getMessage());
}else{
if(se.getValues() != null){
error = new ActionMessage(key, se.getValues());
}else{
error = new ActionMessage(key);
}
}
this.storeException(request, key, error, forward, ae.getScope());
return forward;
}
return super.execute(ex, ae, mapping, formInstance, request, response);
}
}

3、配置struts-config.xml文件
* 可配置在产生异常的action配置文件中

<action path="/login"
type="cn.huan.struts.LoginAction"
name="loginForm"
scope="request"
input="/error.jsp"
>
<exception
type="*.*.SystemException"
key="errors.detail"
path="/exception.jsp"
handler="*.*.SystemExceptionHandler"/>
<forward name="exception" path="/exception.jsp"/>
</action>

* 若把资源文件中配的异常信息都用一个异常来处理,就可自定义异常,并在struts-config.xml中配一处就行,这里采用这种配置.

<global-exceptions>
<exception
path="/exception.jsp"
handler="*.*.SystemExceptionHandler"
scope="request"
key="errors.detail"
type="*.*.SystemException"
>
</exception>
</global-exceptions>

4、页面显示和编码方式一样用<html:messages/>标签或<html:errors/>标签
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于微信小程序的家政服务预约系统采用PHP语言和微信小程序技术,数据库采用Mysql,运行软件为微信开发者工具。本系统实现了管理员和客户、员工三个角色的功能。管理员的功能为客户管理、员工管理、家政服务管理、服务预约管理、员工风采管理、客户需求管理、接单管理等。客户的功能为查看家政服务进行预约和发布自己的需求以及管理预约信息和接单信息等。员工可以查看预约信息和进行接单。本系统实现了网上预约家政服务的流程化管理,可以帮助工作人员的管理工作和帮助客户查询家政服务的相关信息,改变了客户找家政服务的方式,提高了预约家政服务的效率。 本系统是针对网上预约家政服务开发的工作管理系统,包括到所有的工作内容。可以使网上预约家政服务的工作合理化和流程化。本系统包括手机端设计和电脑端设计,有界面和数据库。本系统的使用角色分为管理员和客户、员工三个身份。管理员可以管理系统里的所有信息。员工可以发布服务信息和查询客户的需求进行接单。客户可以发布需求和预约家政服务以及管理预约信息、接单信息。 本功能可以实现家政服务信息的查询和删除,管理员添加家政服务信息功能填写正确的信息就可以实现家政服务信息的添加,点击家政服务信息管理功能可以看到基于微信小程序的家政服务预约系统里所有家政服务的信息,在添加家政服务信息的界面里需要填写标题信息,当信息填写不正确就会造成家政服务信息添加失败。员工风采信息可以使客户更好的了解员工。员工风采信息管理的流程为,管理员点击员工风采信息管理功能,查看员工风采信息,点击员工风采信息添加功能,输入员工风采信息然后点击提交按钮就可以完成员工风采信息的添加。客户需求信息关系着客户的家政服务预约,管理员可以查询和修改客户需求信息,还可以查看客户需求的添加时间。接单信息属于本系统里的核心数据,管理员可以对接单的信息进行查询。本功能设计的目的可以使家政服务进行及时的安排。管理员可以查询员工信息,可以进行修改删除。 客户可以查看自己的预约和修改自己的资料并发布需求以及管理接单信息等。 在首页里可以看到管理员添加和管理的信息,客户可以在首页里进行家政服务的预约和公司介绍信息的了解。 员工可以查询客户需求进行接单以及管理家政服务信息和留言信息、收藏信息等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值