当前位置: 首页 > 图文教程 > 网络编程 > JSP > 可以自动跳转到出错页面的servlet/jsp框架

JSP
搭建Eclipse+MyEclipse开发环境
卖jsp编程技巧的那个垃圾的所有实例的答案全部已收集,现将他人收集的实例答案公布出来,大家鉴赏!
一个jsp+AJAX评论系统
JSP 多个文件打包下载代码
JSP 动态树的实现
jsp 重复提交问题
J2ME/J2EE实现用户登录交互 实现代码
访问JSP文件或者Servlet文件时提示下载的解决方法
JSP EL表达式详细介绍
JSP 报表打印的一种简单解决方案
jsp 自定义标签实例
AJAX自学练习 无刷新从数据库后台取数据显示
AJAX 自学练习 请求与显示
AJAX 自学练习 无刷新提交并修改数据库数据并显示
jsp 文件上传浏览,支持ie6,ie7,ie8
JSP application(return String)用法详例
jsp form表单方法示例
JSP request(return String)用法详例
JSP forward用法分析实例代码分析
JSP JavaBean的setProperty属性

JSP 中的 可以自动跳转到出错页面的servlet/jsp框架


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-03   浏览: 168 ::
收藏到网摘: n/a

    jsp有一个指令可以定义jsp的错误页面,并在此jsp页面出错时跳转到该页面输出出错
日志。如下的例子:
  1. <%@ page errorPage="errorPage.jsp" %>
  2. errorPage.jsp的代码如下所示:
  3. .....
  4. <%@ page isErrorPage="true" %>
  5. ....
  6. //输出出错日志
  7. <%= exception.getMessage() %>

    但是,这只能在jsp页面层控制。在J2EE的实现中,很多的情况是jsp往往只作为页面显
示,与业务相关的数据库操作都是在后台的servlet执行,处理完毕之后再跳转某个jsp显示
页面。这种设置框架,实现了MVC结构,使得整个系统的维护难度大大降低。

    实际的工作中,尽管系统采用了以上的设置框架,但由J2EE开发人员水平以及编程的习
惯都有可能不通,经常会遇到开发人员在servlet中对有可能报错的地方处理不恰当。最常
见的一种情况是,catch一个Exception e,然后仅仅调用e.printStackTrace()。这样造成
的后果非常严重。一旦有Exception发生,web页面会出现白屏,我们可以从两方面来看:
(1)如果是使用的用户。他往往会不知所措,并且有可能还不知道有错误发生,继续使用
系统,但这时候的系统已经出错了,在错误的基础上继续业务流程,往往会造成更多系统级
别的错误。
(2)如果是开发人员。用户反映了这个出错,但是不知道出错原因。只能说出现要白屏。
开发人员需要调试抓错的话,非得到应用服务器的输入端查看出错日志,定位可能出错的原
因,再进行排错。

    在此,我介绍一种有效的servlet出错处理机制,这种机制将所有Exception的出错内容
抛出到web页面,让使用用户立即有错误发生,并可以及时将该出错内容提交给开发人员定
位出错原因。
    其实,这种机制非常简单。思路是定义一个抽象的BaseServlet基类,它继承HttpServlet。
并增加一个抽象的 
  1. abstract public void doWorkFlow(HttpServletRequest request,HttpServletResponse response)
的方法,这个方法是所有BaseServlet子类都必须且仅需实现的方法。BaseServlet基类当然要实现service方法 -- 
  1. public final void service(HttpServletRequest request,HttpServletResponse response)
。它的代码片断如下:
  1. public final void service(HttpServletRequest request,HttpServletResponse response)
  2.                         throws ServletException, IOException {
  3.     try{
  4.         //在执行doWorkFlow()之前,你可以在此处理是否有权限处理等问题
  5.         .......
  6.         doWorkFlow();
  7.     }catch(Exception e){
  8.         StringWriter out = new StringWriter();
  9.         e.printStackTrace(new PrintWriter(out));
  10.         request.setAttribute("err_msg", out.toString());
  11.         RequestDispatcher rd = this.getServletContext().getRequestDispatcher("errorServlet.jsp");
  12.         rd.forward(request,response);
  13.     }
  14. }

  errorServlet.jsp非常简单。代码片断如下:
  1. ....
  2. //输出出错日志
  3. <%= request.getAttribute("err_msg") %>