国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
JSP頁面中的錯(cuò)誤處理(轉(zhuǎn)載)

jsp頁面中主要有兩種錯(cuò)誤
(1)編譯時(shí)錯(cuò)誤
(2)運(yùn)行時(shí)錯(cuò)誤
      編譯時(shí)錯(cuò)誤是容器把JSP代碼翻譯為JAVA源代碼時(shí)出現(xiàn)的,而運(yùn)行時(shí)錯(cuò)誤則是在執(zhí)行已編譯的JAVA字節(jié)碼來處理一個(gè)到來的請(qǐng)求時(shí)出現(xiàn)。對(duì)于編譯時(shí)錯(cuò)誤并沒有一個(gè)一般的方法可遵循,但運(yùn)行時(shí)錯(cuò)誤一般有下列兩種處理方法。

一、通過JSTL<c:catch>標(biāo)記來處理JSP頁面所產(chǎn)生的錯(cuò)誤,一般形式如下:
<c:catch [var="變量名"]>
...... 這里是可能導(dǎo)致錯(cuò)誤的JSP代碼
</c:catch>

例:下面代碼假定沒有定義errobj對(duì)象。
<c:catch>
<jsp:include page="nosuch.jsp" />
<jsp:setProperty name="errobj" property="nosuch"
     value="This is invalid" />
</c:catch>

這段代碼沒有指定var屬性,盡管會(huì)捕獲錯(cuò)誤,但是不能做進(jìn)一步的處理。應(yīng)該為它增加一個(gè)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對(duì)象的stackTrace性質(zhì),可以得到出現(xiàn)錯(cuò)誤時(shí)的一個(gè)java VM棧軌跡??梢允褂肊L<c:forEach> 循環(huán)標(biāo)記來訪問這個(gè)信息。修改這個(gè)例子如下:

<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>
運(yùn)行后輸出如下:


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錯(cuò)誤頁面轉(zhuǎn)發(fā)處理錯(cuò)誤

   使用JSP的錯(cuò)誤頁面轉(zhuǎn)發(fā)機(jī)制,可以使用一個(gè)特定的JSP頁面來處理或顯示錯(cuò)誤。相對(duì)于前面的<c:catch>標(biāo)記,這樣能提供一個(gè)更為全局的錯(cuò)誤處理機(jī)制,還能為多個(gè)JSP頁面提供同一個(gè)錯(cuò)誤頁面來處理錯(cuò)誤。

必須在一個(gè)JSP頁面中通過<@% page %>指令指定errorPage屬性,把一個(gè)JSP頁面與一個(gè)錯(cuò)誤頁面相關(guān)聯(lián)。如:

<%@page errorPage="showerr.jsp" %>

這里指定showerr.jsp來完成錯(cuò)誤處理,在showerr.jsp中必須包含<%@page isErrorPage="true" %>以表明這是一個(gè)應(yīng)用于多個(gè)JSP頁面的錯(cuò)誤處理頁面。

看下面的一個(gè)實(shí)例:

1、這是一個(gè)會(huì)產(chǎn)生錯(cuò)誤的頁面index.jsp,并指出了錯(cuò)誤處理頁面。

<%@ taglib prefix="c" uri="<%@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>

這個(gè)頁面中調(diào)用了一個(gè)bean的方法,這個(gè)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 "";
}

}
兩個(gè)方法會(huì)導(dǎo)至java代碼中出現(xiàn)一個(gè)運(yùn)行時(shí)錯(cuò)誤。

2、看看錯(cuò)誤處理頁面是如何訪問錯(cuò)誤信息的
<%@ taglib prefix="c" uri="<%@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的一個(gè)子類,通過它可獲取錯(cuò)誤信息,只有在頁面發(fā)生錯(cuò)誤時(shí)才會(huì)有一個(gè)可用的pageContext.exception,通過pageContext.exception.stackTrace可訪問棧軌跡.

(II)在錯(cuò)誤處理期間可以訪問pagecontext.errorDate對(duì)象,這個(gè)對(duì)象類型為javax.servlet.jsp.ErrorDate,它有兩個(gè)有用的性質(zhì):
       pageContext.errorData.statusCode 錯(cuò)誤返回的HTTP狀態(tài)碼
       pageContext.errorData.requestURI 導(dǎo)至錯(cuò)誤的頁面原URL

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
JSP 的技術(shù)原理
自定義 Tomcat 404錯(cuò)誤處理邏輯,以及錯(cuò)誤現(xiàn)實(shí)頁面
Java面試題全集(中)
圖解JSP與Servlet的關(guān)系
Tomcat 報(bào)異常org.apache.catalina.core.standardwr...
MyEclipse下struts2、spring、hibernate整合
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服