教程:了解 JSP 2.0 的新特性
讨论此教程。 可打印版本 (PDF)。
这是目录页。 无上一页。 到上一级。 转至下一页。

JSP 片段


在本章节中,我们将了解 JSP 2.0 的另一个有趣的新特性,JSP 片段。我们将主要关注以下的主题内容:

JSP 片段定义
创建 JSP 片段的方法
调用 JSP 片段
JspFragment 语法


JSP 片段定义

JSP 片段是 JSP 2.0 的一个新特性,允许页面制作人员创建可以被调用的自定义操作片段。它允许将 JSP 代码的一部分封装到 Java 对象中,该对象可以被传递以及赋值为零或多次赋值。在 JSP 片段中可以包含模板文本和表达式赋值。

在为某个被定义为片段或类型为 JspFragment 的属性提供 标准操作的主体时,或者在提供标记调用(由简单标记处理程序来处理)的主体时,创建 JSP 片段。根据被调用操作的配置情况,元素的主体或者指定一个只赋值一次的值,或者将主体指定为 JSP 片段。

例如,在代码段 A 中,我们定义了一个名为 x 的属性,并为其分配值为 tutorial1,该片段只能被调用一次。另一方面,在代码段 B 中,可以多次调用该片段进行赋值。

代码段 A


tutorial1

代码段 B


This is the output of chaining 2 defined strings:${result}

值得注意的是,即使 JSP 片段是用 JSP 语法编写而成,片段本身是由 Java 中的 JSP 容器所表示的,例如 javax.servlet.jsp.tagext.JspFragment 接口。在标记调用的上下文中,JSP 代码的部分被转换为 JSP 片段。

创建 JSP 片段的方法

创建 JSP 片段有两种方法:

  • 提供 的主体:

对于在标记文件中被定义为片段(或者类型为 JspFragment)的属性,可以通过在属性中指定 fragment = "true"来提供 的主体,从而创建 JSP 片段:

<%@ attribute name="stringFrag" fragment="true" %>
  • 提供标记调用的主体:

另一种创建 JSP 片段的方法是提供一个由简单标记处理程序处理的标记调用主体。在被传递到标记处理程序之前,JspFragment 实例与周围页面的 JspContext 相关联。不专属于 servlet 的所有信息由 JspContext 提取,JspContext 还作为 PageContext 类的基类。这种提取易受影响,因为片段不但可以与 JSP 协作,而且可以与其他技术协作,并且这种提取允许进行依赖于实施的访问。必须注意,片段与 JspContext 的协作被保留给使用标记调用的时期。

调用 JSP 片段

在使用了上述两种创建 JSP 片段的方法中的任何一种之后,片段被传递到标记处理程序,供以后调用。可以从用 Java 编写的标记处理程序以编程的方式调用 JSP 片段,或者使用 标准操作从标记文件调用 JSP 片段。类型为 Jsp-Fragment 的组件属性用于将 JSP 片段传递到标记处理程序。可以通过调用 JspFragment 接口中的 invoke() 方法来调用这些片段。值得注意的是,片段可以递归(间接)调用其本身。

对调用页面/标记的 JspContext 中所有声明的 AT_BEGIN 和 NESTED 变量值的设置,由 JSP 片段所传递到的标记处理程序接替负责。该过程在调用 JSP 片段之前发生。.当使用具有 var 属性规范的 来调用片段时,创建一个自定义的 java.io.Writer,它可以将调用的结果作为 java.lang.String 对象提供。如果指定了 varReader 属性,则创建一个自定义的 java.io.Writer 对象,它可以将结果调用作为 java.io.Reader 对象提供。

JspFragment 语法

JspFragment 的简单语法是:

public interface JspFragment

JSP 语法用于将 JSP 片段定义为调用简单标记处理程序的标记主体,或者定义为 标准操作的主体,该操作指定一个被声明为片段或者在 TLD 中类型为 JspFragment 的属性的值。

注意,标记库开发人员和页面制作人员不应手动生成 Jsp-Fragment 实施。还值得注意的是,不必为每个片段生成单独的类。一种可行的实施方法是为实施 JspFragment 的每个页面生成单个帮助类。可以在构造时传递一个辨别符,以选择实例将要执行哪个片段。


讨论此教程。 可打印版本 (PDF)。
这是目录页。 无上一页。 到上一级。 转至下一页。
寄送此页面
Printer View 打印机视图