JSP的執行過程及其異常處理機制


1、JSP的執行過程

    雖然JSP感覺上很像一般的HTML網頁,但事實上它是以Servlet的形式被運行的。因為JSP文件在第一次運行的時候會先解釋成Servlet源文件,然后編譯成Servlet類文件,最后才會被Servlet容器運行,JSP的執行過程主要可以分為以下幾點:
    1)客戶端發出請求;
    2)Web容器將JSP轉譯成Servlet源代碼;
    3)Web容器將產生的源代碼進行編譯;
    4)Web容器加載編譯后的代碼並執行;
    5)把執行結果響應至客戶端。
 
2、JSP的異常處理機制
    JSP中除了HTML代碼,其他的就是Java腳本元素,所以在JSP頁面中想使用try-catch來處理異常時比較困難的。JSP規范中定義了異常處理機制。
    1)撰寫一個JSP“錯誤頁面”
        異常處理文件中國需要使用page指令的isErrorPage屬性:<%@ page isErrorPage="true"%>,此時能夠訪問異常對象exception。
    2)在JSP內指定異常發生時應該回應到哪個“錯誤頁面”
        讓頁面產生異常的時候由專門的異常處理文件對異常進行處理,需要在該頁面中使用page指令的errorPage指定專門的異常處理頁面<%@ page errorPage="異常處理文件"%>
        當然,還可以通過web.xml文件進行異常處理文件的配置,為同一種類型的異常指定統一的異常處理文件。
        常見的異常編碼:
        · 400錯誤:錯誤請求
        · 401錯誤:訪問被拒絕
        · 403錯誤:文件被禁止訪問
        · 404錯誤:文件沒有找到
        · 500錯誤:文件在運行過程中發生未知錯誤
例子:
測試頁面index.jsp,故意設置一個異常
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>異常頁面</title>
</head>
<body>
    <%
        //這里故意設置了一個異常
        String[] strlen = {"hello","error","beijing"};
        for(int i = 0; i < 10; i++){
            out.println(strlen[i] + "--test");
            i++;
        }
    %>
</body>
</html>

在web.xml文件中配置異常處理頁面

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">
    <!--根據異常編碼進行配置-->
    <error-page>
        <!--為響應狀態碼聲明錯誤頁面-->
        <error-code>500</error-code>
        <location>/500.jsp</location>
    </error-page>
    <!--根據異常類型進行配置-->
    <error-page>
        <!--為特定的異常類型聲明錯誤頁面-->
        <exception-type>java.lang.Throwable</exception-type>
        <location>/500.jsp</location>
    </error-page>
</web-app>

編寫異常處理頁面500.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isErrorPage="true" %>
<html>
<head>
    <title>500錯誤處理</title>
</head>
<body>
這是500的錯誤處理頁面!
<br>
異常信息為<%=exception.getClass().getName()%>
</body>
</html>
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM