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

原创 2004年09月14日 16:39:00
   jsp有一个指令可以定义jsp的错误页面,并在此jsp页面出错时跳转到该页面输出出错
日志。如下的例子:
<%@ page errorPage="errorPage.jsp" %>
errorPage.jsp的代码如下所示:
.....
<%@ page isErrorPage="true" %>
....
//输出出错日志
<%= exception.getMessage() %>

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

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

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

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

servlet页面request转发集合到jsp页面

在不同页面间传值使用request.setAttribute()时,只会从一个jsp页面到另一个jsp页面进行一次传递,之后它就会失去它的作用范围。 如果还需要传值,就要再设置一个request.se...
  • hongge_k
  • hongge_k
  • 2017年04月09日 11:16
  • 1258

JSP页面实现自动跳转

1. function out(obj){ var i = obj ; if(i==0) document.location.href="t.html"; document.body...
  • caomiao2006
  • caomiao2006
  • 2015年07月18日 09:50
  • 1217

web组件(Servlet、JSP)的调用和如何实现数据传递

转载:http://blog.sina.com.cn/s/blog_531101430100lyef.html 1、web组件之间的关系 (1)web组件 所谓的web组件,指jsp文件以及...
  • hgk324
  • hgk324
  • 2014年08月13日 22:29
  • 765

servlet跳出frameset框架

servlet跳出frameset框架 代码如下:
  • friendan
  • friendan
  • 2014年05月06日 19:05
  • 2770

php或js判断网站访问者来自手机或者pc机

From: http://www.cnblogs.com/nobcool/p/3341471.html php或js判断网站访问者来自手机或者pc机        2013年9月26日,在弄w...
  • nomad2
  • nomad2
  • 2013年11月10日 22:18
  • 6092

JSP怎么将表单提交到对应的servlet

JSP怎么将表单提交到对应的servlet,以及其中的配置信息。
  • mjj123mjj123
  • mjj123mjj123
  • 2014年02月23日 11:32
  • 5868

从jsp页面提交数据到servlet页面问题

input.jsp Insert title here /ShowServlet"> 用户名 密码
  • Joywy
  • Joywy
  • 2012年09月22日 19:02
  • 15567

jsp如何获取servlet的值

servlet中: request.getSession().setAttribute("tf", tf); 在jsp中如何获取tf的值,详细步骤。谢谢! 分享到: ...
  • a85397446
  • a85397446
  • 2015年07月09日 22:44
  • 394

servlet、jsp和框架的前世今生

servlet、jsp和框架的由来
  • MrShuoAn
  • MrShuoAn
  • 2017年02月06日 10:43
  • 794

使用servlet,jdbc将mysql中数据显示在jsp页面中

项目开始前找齐所需要的jar包  我这里只做一个小的示例只需要这两个Jar包 jstl.jar  做页面时需要的c标签库 mysql-connector-java-5.1.18-bin.jar  ...
  • qq_27292113
  • qq_27292113
  • 2016年01月08日 11:22
  • 5469
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:可以自动跳转到出错页面的servlet/jsp框架
举报原因:
原因补充:

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