网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.状态栏动态提示超链接地址的效果.
.Structs的基本配置.
.java指南之使用图形:动画.
.Java入门笔记7_Stream.
.利用Java芯片实现信息家电.
.java入门-Java对象及其引用.
.java实现的18位身份证格式验证算.
.J2ME的体系结构.
.给.NET中的Windows窗体加载Xp样式.
.你好,JOGL-Java与OpenGl的绑定.
.Java和C++版本的简单Stack程序.
.让你学习控制住 Web 2.0的方向盘.
.学习深入Java 1.5枚举类型的内部.
.Java 国际化和本地化 Toolkit 2..
.Java 库的建立方法及其实例(6).
.为Java应用程序添加退出事件处理.
.发挥J2EE的优势,管理J2EE的世界.
.诊断和纠正Java程序中反复出现的.
.Aspectwerkz 2.0开发企业AOP快速.
.JAVA学习经验之谈.

struts1.1中的异常应用实践

发表日期:2008-1-5


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

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


public class BaseException extends RuntimeException {...}

下来你可以定义几个子类,例如: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 {

 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}"/>



上一篇:用JBuilder9 开发Struts实例 人气:575
下一篇:如何在Linux下配置Java开发环境详述 人气:751
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐