2.11 JSP2特性
2.11 JSP2特性
目前Servlet3.1对应于JSP2.3规范,JSP2.3也被统称为JSP2。相比JSP1.2,JSP2主要增加了如下新特性。
- 直接配置
JSP属性。 - 表达式语言。
- 简化的自定义标签
API Tag文件语法
如果需要使用JSP2语法,其web.xml文件必须使用Servlet2.4以上版本的配置文件。Servlet2.4以上版本的配置文件的根元素写法如下:
<?xml version="1.0" encoding="GBK"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_4.xsd" version="2.4">
</web-app>
本书所给出的Web应用都是使用Servlet3.1规范,也就是对应于JSP2.3规范,因此完全支持JSP2的特性。Servlet3.1规范的web-app元素的写法如下:
<?xml version="1.0" encoding="GBK"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
</web-app>
2.11.1 配置JSP属性
JSP属性定义使用<jsp-property-group>元素配置,主要包括如下4个方面。
- 是否允许使用表达式语言:使用
<el-ignored>元素确定,默认值为flase,即允许使用表达式语言。 - 是否允许使用
JSP小脚本:使用<scripting-invalid>元素确定,默认值为false,即允许使用JSP小脚本。 - 声明
JSP页面的编码:使用<page-encoding>元素确定,配置该元素后,可以代替每个页面里page指令contentType属性的charset部分。 - 使用隐式包含:使用
<include-prelude>和<include-coda>元素确定,可以代替在每个页面里使用include编译指令来包含其他页面。(此处隐式包含的作用与JSP提供的静态包含的作用相似。)
下面的web.xml文件配置了该应用下的系列属性。
1 |
|
上面的配置文件中配置了三个<jsp-property-group>元素,每个元素配置一组JSP属性,用于指定哪些JSP页面应该满足怎样的规则。例如,第一个jsp-property-group元素指定:
1 | <jsp-property-group> |
/noscript/*下的所有页面应该使用GBK字符集进行编码,且不允许使用JSP脚本,忽略表达式语言,并隐式包含页面头、页面尾。
如果在不允许使用JSP脚本的页面中使用JSP脚本,则该页面将出现错误。即/noscript/*下的页面中使用JSP脚本将引起错误。
noscript\test1.jsp
看下面的JSP页面代码,为test1.jsp页面代码。
1 | <%@ page contentType="text/html; charset=UTF-8" language="java" errorPage="" %> |
上面的页面中粗体字代码就是表达式语言,关于表达式语言请看下一节介绍。但由于在web.xml文件中配置了表达式语言无效,所以浏览该页面将看到系统直接输出表达式语言。在浏览器中浏览该页面的效果如图2.44所示。
从图2.44中可以看出,test1.jsp的表达式语言不能正常输出,这是因为配置了忽略表达式语言。
上面页面中看到隐式include的页面头分别是inc\top.jspf和inc\bottom.jspf,这两个文件依然是JSP页面,只是将文件名后缀改为了jspf而已。
test2.jsp
而位于应用根路径下的JSP页面则支持表达式语言和JSP脚本,但没有使用隐式include包含页面头和页面尾。应用根路径下的test2.jsp页面代码如下。
1 | <%@ page contentType="text/html; charset=UTF-8" language="java" errorPage="" %> |
上面的页面中两行粗体字代码正是嵌套在JSP页面中的JSP脚本和表达式语言,浏览该页面将看到如图2.45所示的效果。
图2.45中椭圆形圈出的3就是${1+2}的结果这就是表达式语言的计算结果。