Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 299|回复: 0

[jsp学习]Jsp页面中的错误处理

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-1 19:26:08 | 显示全部楼层 |阅读模式
    jsp页面中主要有两种错误
    (1)编译时错误
    (2)运行时错误
          编译时错误是容器把JSP代码翻译为java源代码时出现的,而运行时错误则是在执行已编译的JAVA字节码来处理一个到来的请求时出现。对于编译时错误并没有一个一般的方法可遵循,但运行时错误一般有下列两种处理方法。
        一、通过JSTL<c:catch>标记来处理JSP页面所产生的错误,一般形式如下:
    <c:catch [var="变量名"]>
    ...... 这里是可能导致错误的JSP代码
    </c:catch>
        例:下面代码假定没有定义errobj对象。
    <c:catch>
    <jsp:include page="nosuch.jsp" />
    <jsp:setProperty name="errobj" property="nosuch"
         value="This is invalid" />
    </c:catch>
       
      
       
       
         
       

       
       
      
      
      这段代码没有指定var属性,尽管会捕获错误,但是不能做进一步的处理。应该为它增加一个var属性,如: <c:catch var="localerr" >
    < jsp:include page="nosuch.jsp" />
        <jsp:setProperty name="errobj" property="nosuch" value="This is invalid" />
    </c:catch>

    $ {localerr} 这次输出如下: Page with error in JSP directive and actions
    org.apache.jasper.JasperException     使用localerr对象的stackTrace性质,可以得到出现错误时的一个java VM栈轨迹。可以使用EL<c:forEach> 循环标记来访问这个信息。修改这个例子如下: <c:catch var="localerr">
       <jsp:include page="nosuch.jsp" />
       <jsp:setProperty name="errobj" property="nosuch" value="This is invalid" />
    </c:catch>
    <c:forEach var="trace" items="$ {localerr.stackTrace}">
       <p>$ {trace}</p>
    </c:forEach>
    运行后输出如下:
      Page with error in JSP directive and actions
    org.apache.jasper.runtime.JspRuntimeLibrary.internalIntrospecthelper(JspRuntimeLibrary.java:359) org.apache.jasper.runtime.JspRuntimeLibrary.introspecthelper(JspRuntimeLibrary.java:306) org.apache.jsp.example3.index_jsp._jspx_meth_c_catch_0(org.apache.jsp.example3.index_jsp:104) org.apache.jsp.example3.index_jsp._jspService(org.apache.jsp.example3.index_jsp:63) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97) javax.Servlet.http.HttpServlet.service(HttpServlet.java:802) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:868) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744) org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) java.lang.Thread.run(Thread.java:595) 注意:
    变量localerr的类型是org.apache.jasper.JasperException
      二、使用JSP错误页面转发处理错误    使用JSP的错误页面转发机制,可以使用一个特定的JSP页面来处理或显示错误。相对于前面的<c:catch>标记,这样能提供一个更为全局的错误处理机制,还能为多个JSP页面提供同一个错误页面来处理错误。  必须在一个JSP页面中通过<@% page %>指令指定errorPage属性,把一个JSP页面与一个错误页面相关联。如: <%@page errorPage="showerr.jsp" %>

    这里指定showerr.jsp来完成错误处理,在showerr.jsp中必须包含<%@page isErrorPage="true" %>以表明这是一个应用于多个JSP页面的错误处理页面。 看下面的一个实例: 1、这是一个会产生错误的页面index.jsp,并指出了错误处理页面。

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@page errorPage="showerr.jsp" %>
    <HTML>
    <head>
    <jsp:useBean id="errgen" class="com.wrox.begjsp.ch10.ErrorGenerator" />
       
         
         <title>Error Generating page</title>
    </head>
    <body>
    <h1>Page to Generate Error</h1>
    <table>
    <tr>
    <td><h3>$ {errgen.divideByZero}</h3></td>
    </tr>
    </table>
    </body>
    </html> 这个页面中调用了一个bean的方法,这个bean代码如下: package com.wrox.begjsp.ch10;
    public class ErrorGenerator {

      private Integer[] tpArray = new Integer[3];
          
         
          public ErrorGenerator() {
    }

    public String getOutOfRange() {
       tpArray[3] = tpArray[2];
        return "";
    }
    public String getDivideByZero() {
       tpArray[3] = new Integer(1/0);
       return "";
    }

    }
    两个方法会导至java代码中出现一个运行时错误。 2、看看错误处理页面是如何访问错误信息的
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@page isErrorPage="true" %> <html>
    <head>
    <title>An Error is detected</title>
    </head>
    <body>
    <h1>Error Detected</h1>
    <table width="600" border="1"> <tr valign="top">
    <td ><b>Error:</b></td>
    <td>$ {pageContext.exception}</td>
    </tr> <tr valign="top">
    <td><b>URI:</b></td>
    <td>$ {pageContext.errorData.requestURI}</td>
    </tr>
      <tr valign="top">
    <td><b>Status code:</b></td>
    <td>$ {pageContext.errorData.statusCode}</td>
    </tr> <tr valign="top">
    <td><b>Stack trace:</b></td>  <td>
    <c:forEach var="trace" items="$ {pageContext.exception.stackTrace}">
    <p>$ {trace}</p>
    </c:forEach>
    </td>
    </tr> </table> </body>
    </html> 说明:

    (I)pageContext.exception是java.lang.Throwable的一个子类,通过它可获取错误信息,只有在页面发生错误时才会有一个可用的pageContext.exception,通过pageContext.exception.stackTrace可访问栈轨迹. (II)在错误处理期间可以访问pagecontext.errorDate对象,这个对象类型为javax.servlet.jsp.ErrorDate,它有两个有用的性质:
           pageContext.errorData.statusCode 错误返回的HTTP状态码
           pageContext.errorData.requestURI 导至错误的页面原URL
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-16 02:41 , Processed in 0.391580 second(s), 48 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表