技术开发 频道

Struts开发过程中的异常处理机制

下面我们把关注的目光放在具体action里,看看struts是如何进行异常处理的

//ItemsCatalogAction.java package com.iplateau.jshop.action.ItemsCatalogAction import com.iplateau.jshop.business.ItemsCatalogMap; import com.iplateau.jshop.action.ItemsCatalogForm; import ***; public class ItemsCatalogAction extends BaseAction { public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { String flg=”error”; String act=request.getParameter(“act”); ItemsCatalogMap map=new ItemsCatalogMap(); ItemsCatalogForm thisform=( ItemsCatalogForm)form; // ItemsCatalogMap为具体的处理商品类别的类 if(act.equals(“create”)) { map.validateNameOfCatalog(thisform); map.create(thisform); flg=”success”; return mapping.findForward(flg); } else{ return mapping.findForward(flg); } } }

  上便是一个简单的action,其中用act的具体内容来判断此时的action要处理的操作,如act为cteate的时候,处理的是商品类别的添加等等。

  看了上边的代码,可以了解,在调用具体的业务类进行添加商品类别以前先要判断此时要添加的商品类别的合法性,如:

  调用map.validateNameOfCatalog(thisform);

  其中在ItemsCatalogMap定义的validateNameOfCatalog

  方法抛出InvalidiItemsCatalogNameException.

  下面让我们运行一下添加商品类别的例子,如果此时数据库中已经存在“牛奶制品”这个商品类别,而我们又要添加此类别的时候,程序如我们预想的一样转到error.jsp并且显示了我们要先是的错误信息:你要添加的商品类别已经存在,请添加新的类别!

  其实就这么简单,我们的定制的异常在程序中并不需要用try/catch来捕获,一旦出现了我们已经定义的异常那么就会转到相应得页面,并且携带定制的信息。

  还记得在struts先前的版本中我们的请求都是通过action的perform来处理,可是现在都要通过execute来处理,就其原因一个很重要的就是“成全”Exception Handling.为什么呢?

  因为perform在声明的时候仅仅抛出IOException 和ServletException,这远远不能满足Exception Handling的要求,那么让我们看看execute是怎样的:它笼统的抛出Exception(所有异常的父类)

  上面的阐述只是一个引子,而且默认struts的异常是通过org.apache.struts.action. ExceptionHandler来处理的,你可以定义自己的处理方式,只要继承它并实现其中的execute方法,这个方法在ExceptionHandler的定义如下:

public ActionForward execute (Exception ex, ExceptionConfig ae, ActionMapping mapping, ActionForm formInstance, HttpServletRequest request, HttpServletResponse response) throws ServletException

原文地址

0
相关文章