7.4.6 EL的错误处理机制

优质
小牛编辑
130浏览
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}