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

JSP
我认为JSP有问题(上)
我认为JSP有问题(下)
jsp“抓”网页代码的程序
关于在bean里面打印html的利弊看法
bean里面如何打印到html页面
jdbc3中的RowSet 接口规范
Apusic Application Server1.0中jsp源代码泄漏漏洞
Unify的eWave ServletExec拒绝服务漏洞
通过提交超长的GET请求导致IBM HTTP Server远程溢出
在HTTP请求中添加特殊字符导致暴露JSP源代码文件
Resin 1.2 重要源代码暴露漏洞
多中WEB服务器的通用JSp源代码暴露漏洞
Tomcat 暴露JSP文件内容
IBM WebSphere Application Server 暴露JSP文件内容
JRun 2.3.x 范例文件暴露站点安全信息
BEA WebLogic 暴露源代码漏洞
IBM WebSphere Application Server 3.0.2 存在暴露源代码漏洞
Tomcat 3.1 存在暴露网站路径问题
Sun Java Web Server 能让攻击者远程执行任意命令
Netscape 修复 JAVA 安全漏洞

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-03   浏览: 169 ::
收藏到网摘: 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") %>