struts1.1中的异常应用实践

2016-02-19 14:02 2 1 收藏

只要你有一台电脑或者手机,都能关注图老师为大家精心推荐的struts1.1中的异常应用实践,手机电脑控们准备好了吗?一起看过来吧!

【 tulaoshi.com - 编程语言 】

  struts的异常处理机制带我们很大的方便。通过思考和自己作例子,觉得以下这种方式较为灵活:

      首先为你的应用程序定制一套异常类。例如,先定义一个基类(可以是虚类),注重,在此它扩展自RuntimeException,这是为了在struts的action中顺利捕捉到。

  
  public class BaseException extends RuntimeException {...}

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  下来你可以定义几个子类,例如:Dao异常,事务处理异常,service异常等。在spring中,包
  org.springframework.dao下定义了一套Dao异常,值得大家学习一下。

  接着,在struts-cofig.XML文件中定义全局异常如下,此处的key属性我已经不预备用了:
      global-exceptions
          exception key="todo" type="org.chage.exception.BaseException"        handler="org.chage.exception.MyExceptionHandler" /
      /global-exceptions

     
  下面看一下我的处理异常的类:
     
  package org.chage.exception;
  import org.apache.struts.action.ExceptionHandler;
  import ...  
  public class MyExceptionHandler  extends ExceptionHandler {

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

   public ActionForward execute(
     Exception exception,
     ExceptionConfig config,
     ActionMapping mapping,
     ActionForm form,
     HttpServletRequest request,
     HttpServletResponse response)
    throws ServletException
   {      
      request.setAttribute("exception", exception);
      //返回原始请求的Forward,当然你也可以定义一个全局异常ForWord,都转向它
      return mapping.getInputForward();
   }
  }
  

  在页面上(此页面我们设置为请求action,即发生异常的action的input属性),我们显示错误信息时可以使用struts标签如下,注重,这里显示的信息和资源属性文件无关,是你自己抛出的:

  logic:present name="exception"
     bean:write name="exception"/
  /logic:present

  这样作的好处在哪里呢?我们来看一下,一般我们的思路是,发生了逻辑错误,比如说,用户名输重复,或者预备修改的数据已被他人删除等,我们要捕捉它并显示给用户,第一感是在action中作的,例如:
  try{
     //do something logic method...
  }catch (XXXException e){
    ActionErrors errors= new ActionErrors();
    ActionError error=new ActionError("error.missing.username");
    errors.add("error.xxx",error);
    saveErrors(request,errors);
    return mapping.findForward("errorPage");
  }

   
  设计良好的action应该仅仅是web层的一个“路标指引器”,真正的逻辑方法是调用其他的业务bean来完成的,简单地说,通常认为action中的代码越少越好.假如采用了上面那种全局异常处理机制,action此时就可以不用管逻辑异常了,由业务bean负责抛出就可以了,大家就可以少写一些action中的try  catch 语块了,也可以绕开ActionError,思路上是不是更清楚?异常在真正发生的类中被抛出,然后向上传递,一直传到action中,struts负责捕捉之,当然这里的异常你必须已经定义过了。

  注:
  1. 假如你不想写 MyExceptionHandler 类,当然struts-config.xml中的handler=属性也要去掉,还有一种办法可以显示错误信息在 jsp页上,先引用jstl标签库,然后如下:

  c:out value="${requestScope['org.apache.struts.action.EXCEPTION'].message}"/

  
  

来源:https://www.tulaoshi.com/n/20160219/1606002.html

延伸阅读
模型--视图--控制器(Model-View-Controller,MVC)体系突出了Servlets和jsp的优点,同时也令它们的缺点最小化。在实现中,用户请求被发送到一个控制器servlet,该servlet决定请求的性质,并且根据请求的类型传送给适合的处理器。每个处理器都和一个非凡的模型相关,里面封装有商业逻辑来执行一些非凡的函数集合。处理完毕后,结果会发送回...
首先,本文的目标读者是正在从事技术工作的架构师。为了避免浪费大家的才智,我会避免讲述一些陈腐的最佳实践,例如"日常构建(build daily)"、"测试一切(test everything)"和"经常集成( integrate often)。 任何具有称职架构师的项目都有分工明确的、定义良好的团队结构。他们还为进行编码检查、构建代码(每日或在需要时)、进行测试(...
摘要: 这篇文章将讨论怎样组合几个闻名的框架去做到松耦合的目的,怎样建立你的构架,怎样让你的各个应用层保持一致。富于挑战的是:组合这些框架使得每一层都以一种松耦合的方式彼此沟通,而与底层的技术无关。这篇文章将使用3种流行的开源框架来讨论组合框架的策略 其实,就算用Java建造一个不是很烦琐的web应用...
MVC介绍 MVC模式是一种非常理想化的设计模式,应用MVC模式完成两个以上项目的人都有同样的体会,他们已经对以前的工作方法进行了彻底的改造。工作模式的改变要付出痛苦的代价,但现在你有现成的技术架构可以采用,避免在项目中自己开发、摸索。它就是开源Apache Struts framework,它提供了实现MVC设计模式最好的实现工具。 ...
摘要: Struts框架具有组件的模块化,灵活性和重用性的优点,同时简化了基于MVC的web应用程序的开发。本文讨论了Struts框架实现MVC模式的原理与方法,给出了一个具体的应用实例。 分布式企业应用软件结构复杂、涉及多种技术,对设计开发人员提出了很高的要求。在此情况下,运用设计模式――可复用的设计方案进行软件的设计开发十分必要。MVC模...