如何在 JSP 页面中处理错误

JSP 页面的错误处理主要分为页面内局部处理全局统一错误页面两类,核心目标是捕获异常并返回友好提示,而非直接暴露异常堆栈给用户。

方式 1:页面内局部错误处理(page 指令配置)

通过page指令的errorPageisErrorPage属性,实现单个页面的异常跳转:

  • errorPage:指定当前页面抛出未捕获异常时,跳转的错误处理页面路径;
  • isErrorPage:标记当前页面为错误页面(设为true后可使用exception隐式对象)。

步骤示例:① 业务页面(index.jsp):配置错误跳转

1
2
3
4
5
6
<%@ page contentType="text/html;charset=UTF-8" 
errorPage="error.jsp" %> <%-- 异常时跳转到error.jsp --%>
<%
// 模拟抛出异常
int a = 10 / 0; // 算术异常
%>

② 错误页面(error.jsp):展示友好提示

1
2
3
4
5
6
7
8
9
10
11
<%@ page contentType="text/html;charset=UTF-8" 
isErrorPage="true" %> <%-- 标记为错误页面,启用exception对象 --%>
<h1>抱歉,页面出错了!</h1>
<%-- 可选:打印异常信息(开发环境用,生产环境隐藏)--%>
<p>错误信息:<%= exception.getMessage() %></p>
<p>异常堆栈:</p>
<pre>
<%
exception.printStackTrace(new java.io.PrintWriter(out));
%>
</pre>

方式 2:全局统一错误页面(web.xml 配置)

通过web.xml配置全局错误页面,统一处理整个 Web 应用的异常(推荐生产环境使用),支持按异常类型状态码匹配:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="4.0">
<!-- 按异常类型配置 -->
<error-page>
<exception-type>java.lang.ArithmeticException</exception-type>
<location>/error/arithError.jsp</location>
</error-page>

<!-- 按状态码配置(如404、500) -->
<error-page>
<error-code>404</error-code>
<location>/error/404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error/500.jsp</location>
</error-page>
</web-app>

方式 3:手动捕获异常(脚本 / EL)

在 JSP 脚本段中通过try-catch手动捕获异常,控制错误处理逻辑:

1
2
3
4
5
6
7
8
9
10
11
12
<%@ page contentType="text/html;charset=UTF-8" %>
<%
String msg = "";
try {
int a = 10 / 0;
} catch (ArithmeticException e) {
msg = "计算错误:除数不能为0";
// 记录日志
e.printStackTrace();
}
%>
<p style="color:red"><%= msg %></p>

核心注意事项:

  1. 生产环境需隐藏异常堆栈(仅展示友好提示),避免泄露系统信息;
  2. 全局错误页面优先级高于页面内errorPage配置;
  3. 错误页面的isErrorPage="true"仅影响exception对象的可用性,不影响页面功能。
  • <%@ page pageEncoding=”UTF-8” %> <%– 等价于contentType=”text/html;charset=UTF-8” –%>