到目前为止,JSP基本语法常用的已经接触过了。现在继续完成EL表达式、JSP注释、特殊字符序列的转义处理以及如何查找JSP页面中的错误的认识。
EL(Expression Language)表达式语言是JSP 2.0中新增加的一种可简化JSP开发的技术,它可以非常方便地访问JSP页面相关的数据和支持基本的算术、关系和逻辑运算。EL表达式的基本语法格式为"${表达式}"。它可以出现在JSP自定义标签和标准标签的属性值中,其计算结果将作为标签的属性值或属性值的一部分。EL表达式也可以出现在模版元素中,其计算结果将插入进当前的输出流中。使用EL表达式可以非常方便地访问JSP页面相关的数据。例如访问请求参数JSP表达式为:<%= reqeust.getParameter("user") %>,而EL表达式为:${param.user},访问JavaBean及其中的嵌套属性的JSP表达式为:<%CustomerBean custormBean = (CustomerBean)pageContext.findAttribute("customerBean");%> <%= customerBean.getAddress().getCountry()%>,而EL表达式:${customerBean.address.country},可见在EL表达式中访问属性是非常方便的。不仅如此,在EL表达式中还可以直接使用${cookie.user}来访问名称为user的Cookie信息,在JSP脚本表达式中却无法实现这样的功能,虽然使用JSP脚本片断也可以实现这个功能,但是其程序代码却比EL表达式要复杂的多。还有一个好处是如果表达式的计算结果为null,JSP脚本表达式将输出内容为"null"的字符文本,而EL表达式会将它强制转换成空字符串("")后再输出,而不是显示为"null",这样的处理结果对用户来说是非常有用,比较直观,说明无值,而null只有程序员明白其含义,对用户不友好。在EL表达式中还可以使用empty操作符来判断一个参数是否为null、某个集合或字符串中的内容是否为空。EL表达式还具有JavaScript等脚本语言的优点,能够对字符串、数字等各种类型的数据进行自动转换,摆脱了Java语言严格的数据类型限制,使得应用起来更加简单。但是EL表达式仅仅是专门为网页作者量身定做的一种数据访问语言,可以方便地访问和处理应用程序数据,但是它并不一种程序设计语言,不能替代Java语言的强大功能。
接着是JSP注释,JSP注释的格式:<%-- 注释信息 --%>,JSP引擎在将JSP页面翻译成Servlet程序时,忽略JSP页面中被注释的内容。总的来说:在JSP引擎看来,出现在JSP脚本元素中的Java注释属于Java代码的一部分,它们将被原封不动地插入进Servlet源文件中,但在Servlet源文件被编译成class文件时由Java编译程序忽略。而JSP页面中的HTML注释就是一段文本,其处理方式与普通的文本内容完全一样,都被转换成out.write语句输出到客户端。由于HTML注释相当于一段普通文本,其中当然可以嵌入JSP的其他各种元素,JSP引擎依然会对这些嵌套的JSP元素进行解释处理。
例如:<!--This page was loaded on <%=(new java.util.Date()).toLocaleString()%>-->
这段文本注释将被直接输出到页面上,其中的JSP元素会被替换成网页代码执行的当前时间。
最后是特殊字符序列的转义处理和查找JSP页面中的错误,转义处理是几乎所有编程语言都会涉及的知识点。首先在JSP中,由于三种JSP脚本元素的分界符都使用到了"<%"和"%>",如果要在JSP模版元素和JSP脚本元素内部表示字面意义的"<%"和"%>",需要进行转义处理。要在脚本元素内表达字面意义上的"%>",必须用"%/>"进行转义。JSP引擎在生成servlet源文件时,将把脚本元素内部的"%/>"转换成"%>"。因为"%/>"在脚本元素内要被转义处理,如果要表达字面意义上的"%/>",应该使用"%//>"。要在JSP模版元素内表达字面意义上的"<%",必须用"</%" 进行转义。要表达字面意义上的"</%",应该使用"<//%"。为了让JSP引擎不要把JSP模版元素内的字符序列"${"当作EL表达式的开始,在支持EL表达式的JSP页面中,"$"可以使用"/$"来表示,但这不是必须的。如果要表达字面意义上的"${",这时候就必须使用"/${"。如果要达字面意义上的"/$",必须使用"//$"。在JSP标签的属性内部,如果使用单引号将属性值部分引起来,那么属性值中的单引号要用"/'"表示。如果使用双引号"将属性值部分引起来,那么属性值中的双引号要用"/""表示。反斜杠(/)要用"//"表示。其次由于EL表达式使用"${"和"}"作为分界符,在一些应用中,也需要对它们进行转义处理。但是EL表达式内的任何字符序列都不需要进行转义处理。
至于JSP页面的查错主要有三点:
1.JSP页面中的JSP语法格式有问题,导致其不能被翻译成Servlet源文件,JSP引擎将提示这类错误发生在JSP页面中的位置(行和列)以及相关信息。
2.JSP页面中的JSP语法格式没有问题,但被翻译成的Servlet源文件中出现了Java语法问题,导致JSP页面翻译成的Servlet源文件不能通过编译,JSP引擎也将提示这类错误发生在JSP页面中的位置(行和列)以及相关信息。
3.JSP页面翻译成的Servlet程序在运行时出现异常,这与普通Java程序的运行时错误完全一样,Java虚拟机将提示错误发生在Servlet源文件中的位置(行和列)以及相关信息。