【Java.Web】JSP —— 语法基础 —— JSP异常处理

JSP异常处理

在异常处理页中处理异常

JSP在运行时抛出的异常,可以通过下面的指令将请求转发给另一个专门处理异常的网页:

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

errorpage.jsp是一个专门负责处理异常的网页,在这个处理异常的网页中,必须通过如下语句将该网页声明为异常处理网页:

<%@ page is ErrorPage="true" %>

用于处理异常的网页可以直接访问exception隐含对象,获取当前异常的详细信息,例如:

<p>
    The error is caused by: <% exception.printStackTrace(new PrintWriter(out)); %>
</p>


抛出异常的JSP文件与处理异常的JSP文件之间为请求转发关系,因此它们可以共享请求范围内的共享数据。



示例:

创建一个可能会抛出异常的JSP网页generate_error_page.jsp,其中的代码可能会抛出一个异常;容器会自动把客户请求转发到异常处理也error_page.jsp:

generator_error_page.jsp:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ page errorPage="error_page.jsp" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Generate Error Page JSP</title>
</head>
<body>
    <%-- Declare a member method, method: valueOf will throw an exception --%>
    <%! 
        private int toInt(String num){
            return Integer.valueOf(num).intValue();    
        }
    %>
    
    <%
        int num = toInt(request.getParameter("num"));
    %>
    
    <p>
        The result is <%= num %>
    </p>
</body>
</html>

error_page.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ page isErrorPage="true" %>
<%@ page import="java.io.PrintWriter" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
    <p>
        The parameter <%= request.getParameter("num") %> is invalid.
    </p>
    <p>
        The error is caused by: <br/>
        <% exception.printStackTrace(new PrintWriter(out)); %>
    </p>
    
</body>
</html>

【Java.Web】JSP —— 语法基础 —— JSP异常处理_第1张图片


在浏览器中请求如下URL:

http://localhost:8080/base-webapp/jsp/generate_error_page.jsp?num=123

未抛出异常,页面显示如下:


更改URL参数的值为一个非整数值,

http://localhost:8080/base-webapp/jsp/generate_error_page.jsp?num=123test

参数值违法,将输出一个异常页面:



在当前JSP页中处理异常

另外,我们也可以在当前JSP页面中捕获该异常,而不交由error page处理该异常:

修改generate_error_page.jsp为:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ page errorPage="error_page.jsp" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Generate Error Page JSP</title>
</head>
<body>
    <%-- Declare a member method, method: valueOf will throw an exception --%>
    <%! 
        private int toInt(String num){
            return Integer.valueOf(num).intValue();    
        }
    %>
    
    <%
        int num = 0;
        try{
        num = toInt(request.getParameter("num"));
        }catch(Exception e){
        	e.printStackTrace();
        }
    %>
    
    <p>
        The result is <%= num %>
    </p>
</body>
</html>


再次以错误参数访问该JSP,则页面正常输出,产生的异常将会写到容器的log中:






你可能感兴趣的:(java,Web)