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}
的结果这就是表达式语言的计算结果。