淘先锋技术网

首页 1 2 3 4 5 6 7

发展历程

1.2版本

JSP1.2不支持EL,但可以使用外部的JSTL标签以便使用EL。

2.版本

JSP 2.的一个主要特点是它支持表达语言(expression language)。JSTL表达式语言可以使用标记格式方便地访问JSP的隐含对象和JavaBeans组件,JSTL的核心标记提供了流程和循环控制功能。自制标记也有自定义函数的功能,因此基本上所有scriptlet能实现的功能都可以由JSTL替代。在JSP 2.中,建议尽量使用EL而使JSP的格式更一致。

SimpleTag

JSP 2.中加入了新的创建自制标记的API,javax.servlet.jsp.tagext.SimpleTag定义了用来实现简单标记的接口。和 JSP 1.2中的已有接口不同的是,SimpleTag接口不使用doStartTag和doEndTag方法,而提供了一个简单的doTag方法。这个方法在调用该标记时只被使用一次。而需要在一个自制标记中实现的所有逻辑过程、循环和对标记体的评估等都在这个方法中实现。从这个方面来讲, SimpleTag和IterationTag可以达到同等的作用。但SimpleTag的方法和处理周期要简单得多。在SimpleTag中还有用来设置JSP内容的setJspBody和getJspBody方法。Web容器会使用setJspBody方法定义一个代表JSP内容的 JspFragment对象。实现SimpleTag标记的程序可以在doTag方法中根据需要多次调用getJspBody.invoke方法以处理JSP内容。

重要功能

JSP2.中的一个主要功能是JSP fragment,它的基本特点是可以使处理JSP的容器推迟评估JSP标记属性。我们知道一般JSP是首先评估JSP标记的属性,然后在处理JSP标记时使用这些属性,而JSP fragment提供了动态的属性。也就是说,这些属性在JSP处理其标记体时是可以被改变的。JSP需要将这样的属性定义为 javax.servlet.jsp.tagext.JspFragment类型。当JSP标记设置成这种形式时,这种标记属性实际上的处理方法类似于标记体。在实现标记的程序中,标记属性可以被反复评估多次。这种用法称为JSP fragment。JSP fragment还可以定义在一个SimpleTag处理程序中使用的自制标记动作。像前面例子说明的,getJspBody返回一个 JspFragment对象并可以在doTag方法中多次使用。需要注意的是,使用JSP fragment的JSP只能有一般的文本和JSP action,不能有scriptlet和scriptlet表达式。

语言标准

句法

一个JSP页面可以被分为以下几部份:

》 静态数据,如HTML

》 JSP指令,如include指令

》 JSP脚本元素和变量

》 JSP动作

》 用户自定义标签

静态数据

静态数据在输入文件中的内容和输出给HTTP响应的内容完全一致。此时,该JSP输入文件会是一个没有内嵌JAVA或动作的HTML页面。而且,客户端每次请求都会得到相同的响应内容。

JSP指令

JSP指令控制JSP编译器如何去生成servlet,以下是可用的指令:

》 包含指令include –包含指令通知JSP编译器把另外一个文件完全包含入当前文件中。效果就好像被包含文件的内容直接被粘贴到当前文件中一样。这个功能和C预处理器所提供的很类似。被包含文件的扩展名一般都是jspf(即JSPFragment,JSP碎片):

》 页面指令page –页面指令有以下几个选项:

//example import导入样例 //example contentType页面类型样例 //example for non error page无错页面样例 //example for a thread safe JSP安全线程JSP样例

注意:在同一个JSP文件中只有import导入页面指令可以被多次使用。

》 标签库指令taglib –标签库指令描述了要使用的JSP标签库。该指令需要指定一个前缀prefix(和C++的命名空间很类似)和标签库的描述URI:

JSP脚本

标准脚本变量

以下是永远可用的脚本变量:

》 out – JSPWriter用来写入响应流的数据

》 page – servlet自身

》 pageContext –一个PageContext实例包括和整个页面相联系的数据,一个给定的HTML页面可以在多个JSP之间传递。

》 request –HTTP request对象

》 response –HTTP response对象

》 session –

脚本元素

有三个基本的脚本元素,作用是使JAVA代码可以直接插入servlet.

》 一种是声明标签,在JAVA SERVLET的类体中放入一个变量的定义。静态的数据成员也可以如此定义。

》 一种是脚本标签,在JAVA SERVLET的类的_jspService()方法中放入所包含的语句。

》 一种是表达式标签,在JAVA SERVLET的类中放入待赋值的表达式,表达式注意不能以分号结尾。

JSP动作

JSP动作是一系列可以调用内建于网络服务器中的功能的XML标签。JSP提供了以下动作:

jsp:include

和子过程类似,JAVA SERVLET暂时接管对其它指定的JSP页的请求和响应。当处理完该JSP页后就马上把控制权交还当前JSP页。这样JSP代码就可以在多个JSP页中共享而不用复制。

jsp:param

可以在jsp:include...展开