dever.cn中的异常处理

原创 2004年06月22日 23:21:00

回想起靠关键字或错误代码定义异常的ASP时代,现在JAVA和.net中的异常处理机制实在是进步的太多了。 

先定义一个异常源的struct

 public struct ErrorItem
 {
  public string UserIp ;//用户IP
  public string Page ;//错误发生的页面
  public string Resource ;//错误源
  public string ErrorInfo ;//错误信息
  public DateTime ErrorTime ;//错误发生的时间
 }

以下是一些我用到的主要异常处理方法: 

public static void setError(Exception e)
  {
   System.Web.HttpContext hc = System.Web.HttpContext.Current;

   // 将捕获的异常实例分解并处理
   ErrorItem ei = new ErrorItem();

   ei.ErrorInfo = e.Message;
   ei.Resource = e.Source;
   ei.Page = hc.Request.Path;
   ei.UserIp = hc.Request.UserHostAddress.ToString();
   ei.ErrorTime = DateTime.Now;
   
   saveError(ei,true); //调用错误处理函数
}


  public static void saveError(ErrorItem errItem,bool isView)
  {
   // 将错误信息写库供显示用
   System.Web.HttpContext hc = System.Web.HttpContext.Current;
   string strSql = "update error set ------------" 
   SqlHandle.ExecuteUpdateQuery(strSql)

   ErrorHandle eh = new ErrorHandle()
   // 判断日志文件是否存在,不存在则新建
   eh.isExistLog()
   // 将错误信息写入日志文件
   XmlElement xErrorElement = xmlDoc.CreateElement("error") ;

   eh.AddXmlAttribute(xErrorElement,"time",errItem.ErrorTime.ToString());
   eh.AddXmlAttribute(xErrorElement,"resource",errItem.Resource);
   eh.AddXmlAttribute(xErrorElement,"page",errItem.Page);
   eh.AddXmlAttribute(xErrorElement,"ip",errItem.UserIp);
   xErrorElement.InnerText = errItem.ErrorInfo ;
   xmlRoot.AppendChild(xErrorElement) ;

   if(isView)
   {
    hc.Response.Redirect( DeverClass.getRoot("ErrorHandle.aspx") );
   }
  }

// 用弹出窗口弹出错误信息并自动回退
  public static void popError(string strError)
  {
   System.Web.HttpContext hc = System.Web.HttpContext.Current;
   hc.Response.Write(" ");
  }

  // 用弹出窗口弹出错误信息,第二个参数为返回页面
  public static void popError(string strError,string strRePage)
  {
   System.Web.HttpContext hc = System.Web.HttpContext.Current;
   hc.Response.Write(" ");
  }

setError方法处理的是程序中try{}中捕获的错误,将异常实例的信息分解后交给saveError来处理。saveError方法处理这些异常的同时也处理一些自定义的异常。参数isView控制是否要将错误显示给用户。

popError处理一些用户操作上的错误,比如说登陆时输入错误等,此类错误不影响程序运行,只要弹出个小窗口提示一下就OK。


异常处理一个很重要的环节是记录日志,将异常写到库里比较方便,但存在一个致命弱点,就是它会使数据库变的很大且难以控制,所以一般不推荐,我采用的方法是,将异常写到库里,注意是update而不是insert。这样库里永远就只有最新发生的一条异常。这条异常主要是显示给用户看的。异常写库的同时也将异常写到日志文件中,我写在一个XML文件中,查询历史记录时可直接显示XML文件中的内容。 

在程序中捕获异常是控制程序正常运转的好办法,但并不能解决所有问题,因为我们不能把整个程序包在一个try块中,或者程序里到处是try块,这样都是低效的,明智的做法是预测可能发生的异常并捕获,对于一些预测不到的错误就交给系统来帮我们捕捉吧。

修改Global.asax.cs中的Application_Error方法,这个方法是在发生错误时系统自动调用的,当然对于try{}块中的错误它是不处理,因为它的错误处理优先级低于用户自定义异常处理。下面是我改写的该函数

protected void Application_Error(Object sender, EventArgs e)
  {
      if(System.Configuration.ConfigurationSettings.AppSettings["ErrorView"].Equals("ON"))
     {
         System.Web.HttpContext hc = System.Web.HttpContext.Current;
         // 自定义错误信息
         ErrorItem ei = new ErrorItem();

         ei.ErrorInfo = "未捕获的错误";
         ei.Resource = "未知";
         ei.Page = hc.Request.Path;
         ei.UserIp = hc.Request.UserHostAddress.ToString();
         ei.ErrorTime = DateTime.Now;
         ErrorHandle.saveError( ei,true );  //此处为出错处理
     }
 }

函数的处理根据你的需要来写。最好是在处理前加一个判断,因为有的时候我们并不希望它执行,比如说调试阶段。在web.config中加个开关值就OK了。


   

如果你觉得这样很麻烦,又或者你根本就不在意那些未捕获的异常,那好吧,有一些工作你还是应该做的。修改web.config文件。

    defaultRedirect = "Error.aspx" 
    mode="On"   
    />  

现在你的程序看起来就完美多了,再也不会出现令用户不快的黄底黑字了。

以上这些方法为便于大家理解,我写的都比较简单,一些处理函数也省去了,比如说在将错误信息写库时,一定要过滤,因为错误信息中可能会包含单引号。

什么是异常? 在什么情况用异常处理机制?

什么事异常????     异常(exception) 是程序运行过程中发生的事件,  该事件可以中断程序指令的正常执行流程.   异常的处理机制(重点) 1当JAVA程序运行时出现问题时,系...
  • woshi2512901978
  • woshi2512901978
  • 2013年01月17日 23:02
  • 5615

Spring统一异常处理

一、异常 异常,为我们处理非正常的业务流程提供了很好的解决方案。异常机制给你的代码可读行、可维护性带来了好处,同时,程序的健壮性也得到了增强。当然,异常也不是万能的,在有些项目中并不适用,比如:纯算...
  • na_tion
  • na_tion
  • 2014年06月01日 19:48
  • 3240

【SpringMVC学习07】SpringMVC中的统一异常处理

我们知道,系统中异常包括两类:编译时异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。在开发中,不管是da...
  • eson_15
  • eson_15
  • 2016年06月23日 20:47
  • 32381

Spring-Web项目中的异常处理

前言异常体系在任何计算机语言中都有着重要的分量,但是对于普通开发者来说总是存在着多多少少的疑问:什么时候使用异常?什么时候要对异常进行统一处理?该如何对异常进行统一处理?这里,我将把我们后台系统的异常...
  • BuquTianya
  • BuquTianya
  • 2016年04月10日 22:30
  • 2218

使用Spring MVC统一异常处理实战

1 描述  在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的、不可预知的异常需要处理。每个过程都单独处理异常,系统的代码耦...
  • ufo2910628
  • ufo2910628
  • 2014年10月23日 16:22
  • 109093

【VS开发】C++异常处理操作

异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制。 也许我们已经使用过异常,但是你会是一种习惯吗,不要老是想着当我打开一个文件的时候才用异常判断一下,我知道对你来说你喜欢...
  • LG1259156776
  • LG1259156776
  • 2016年05月21日 21:34
  • 1673

异常处理原则

《Rules for Developing Robust Programs with Java Exception》第6部分,作者总结的实用规则的译文。...
  • u010278882
  • u010278882
  • 2015年09月25日 16:55
  • 1177

详解Linux内核异常处理体系结构

本节内容:Linux内核异常处理的的初始化过程和异常发生时的处理流程。 【首先来区分一下两个概念:中断(Interrupt)和异常(Exception)。中断属于异常的一种,就拿2440开发板来说,他...
  • u011549260
  • u011549260
  • 2015年03月17日 22:00
  • 1102

JAVA中的异常处理机制及异常分类

JAVA的异常处理机制:如果某个方法不能按照正常的途径完成任务,就可以通过另一种路径退出方法。在这种情况下会抛出一个封装了错误信息的对象。此时,这个方法会立刻退出同时不返回任何值。另外,调用这个方法的...
  • sinat_36713319
  • sinat_36713319
  • 2017年04月01日 16:18
  • 3421

网页前端的异常处理方法、异常处理系统及异常处理服务器

摘要 本发明提供一种网页前端的异常处理方法、异常处理系统及异常处理服务器,包括:收集网页前端的异常信息,并根据收集的渠道判断异常类型;根据所述异常类型获取异常关键字;获取网页浏览器的通用信息;将...
  • dongwenkai365506
  • dongwenkai365506
  • 2016年04月16日 11:22
  • 1978
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:dever.cn中的异常处理
举报原因:
原因补充:

(最多只允许输入30个字)