7.4.6 EL的错误处理机制
优质
小牛编辑
133浏览
2023-12-01
由于EL表达式需要JSP页面中使用,而且JSP页面通常用于Web应用程序的表现层,因此,JSP页面向客户端输出的信息应尽量友好。EL没有提供警告信息,只提供了默认值和错误。默认值是空字符串,而错误就是抛出异常。如果EL表达式有错误,EL的处理原则是尽可能不抛出异常,而输出空串,很显然,输出空串要比抛出异常更友好。EL提供了如下的一些友好的错误处理机制:
l 假设在域中未找到product对象,但却使用了该对象,例如,${product},则该表达式会输出空串,而不是“null”,很显然,输出空串要比输出“null”更友好。
2 如果在域中未找到product对象,而且又使用了product对象的name属性,例如,${product.name},则该表达式会输出空串,而不会输出“null”或抛出异常。
3 如引用EL内置对象中不存在的属性时,例如,${requestScope.abc}、${cookie.xyz},这些EL表达式会输出空串,而不会输出“null”或抛出异常
4 如果在域中找到了product对象,并且使用了product对象不存在的属性name,这时会抛出一个javax.el.PropertyNotFoundException异常。
综上所述,只有使用了某个对象不存在的属性,并且域中存在这个对象,EL表达式才会抛出异常。如果该对象在域中未找到,无论如何使用该对象,都会输出一个空串,而不会抛出异常。
如下面的JSP页面中的三个EL表达式都不会抛出异常:
<!-- elexception.jsp -->
<%@ page language="java" pageEncoding="UTF-8"%>
<!-- 下面两个EL表达式输出空串 -->
${requestScope.product.name }
${product.name }
<!-- 下面的EL表达式输出true -->
${product == null}
下面的代码将抛出javax.el.PropertyNotFoundException异常:
<!-- elexception.jsp -->
<%@ page language="java" pageEncoding="UTF-8"%>
<%
request.setAttribute("date", new java.util.Date());
%>
<!-- 由于Date类中不存在abc属性,因此,该EL表达式将抛出异常 -->
${date.abc}