高级自定义标记功能
自定义标记时用户定义的标记,它可通过创建可重用的组件来尽量较少JSP中复杂、重复的业务逻辑代码。这些组件可用于其他应用程序。Javax.servlet.jsp.tagtext包定义了开发自定义标记的类和接口。您可以使用此包的类和接口创建标记处理程序,这些程序可实现带属性的自定义标记、带主体的自定义标记、嵌套自定义标记。
1. 自定义标记API
自定义标记API有javax.servlet.jasp.tagtext包的类和接口组成,它们用于创建自定义标记。这些类和接口可在自定义标记和其运行时环境之间进行通信。javax.servlet.jsp.tagtext包中定义的接口有:
- Tag:定义在标记的生命周期中由JSP实现类调用的方法。标记处理程序实现这些方法以执行自定义操作。Tag接口中定义的方法由doEndTag()、doStartTag()、release()、setPageContext()、setParent()、getParent()。
- InterationTag():扩展了Tag接口,除Tag接口中定义的方法外,还定义了doAfterBody()方法。此方法可重新计算自定义标记的主体内容。
- BodyTag:扩展了InterationTag接口,定义了可让标记处理程序操作自定义标记主体内容的方法。此接口定义了doInitBody()和setBodyContent()方法。doInitBody()方法可让标记处理程序准备用于计算的标记。setBodyContent()方法可让标记处理程序操作标记的主体内容。
下表描述了javax.servlet.jsp.tagtext包的各种类:
类 | 描述 |
---|---|
BodyContent | 是JSPWriter类的子类,表示标记的主体内容。 |
TagSupport | 作为标记处理程序的基类并实现空标记。 |
BodyTagSupport | 实现jBodyTag接口。此类用于开发带主体的自定义标记。 |
TagData | 表示属性及其值。 |
TagInfo | 表示TLD文件的元素中指定的信息。JSP将JSP页面转换为servlet时使用此类。 |
TagLibraryInfo | 表示TLD文件的信息,例如它定义的标记和版本信息。 |
TagVariableInfo | 表示自定义标记的变量的相关信息。 |
下表描述了可在标记处理程序中实现的各种方法:
方法 | 描述 |
---|---|
public int doStartTag( ) | 是由Tag接口定义的。当遇到自定义标记的开始标记时调用此方法。doStartTag() 方法返回SKIP_BODY值指定跳过主体内容的处理。此方法还返回EVAL_BODY_INCLUDE值指定应处理标记的主体内容。 |
public void release( ) | 是由Tag接口定义的。调用此方法可让标记处理程序释放其部分资源。 |
doAfterBody( ) | 是由BodyTagSupport类实现的。计算主体标记后调用此方法。doStartTag() 方法返回EVAL_BODY_AGAIN值指定应重新计算主体内容。doStartTag()方法返回SKIP_BODY值指定跳过主体内容的计算。 |
public int doEndTag( ) | 是由Tag接口定义的。当遇到自定义标记的结束标记时调用此方法。doEndTag()方法返回EVAL_PAGE值处理剩余的JSP页面或返回SKIP_PAGE值以跳过剩余页面的处理。 |
javax.servlet.jsp包包含PageContent类,该类表示JSP页面并将JSP页面的信息提供给标记处理程序。PageContent类定义可在标记处理程序中调用来访问JSP页面各种隐式对象的方法。下表描述了PageContext类的一些重要方法:
方法 | 描述 |
---|---|
public abstract JspWriter getOut( ) | 返回JSP隐式对象out。 |
public abstract ServletRequest getRequest( ) | 返回JSP隐式对象request。 |
public abstract ServletResponse getResponse( ) | 返回JSP隐式对象response。 |
public abstract HttpSession getSession( ) | 返回JSP隐式对象session。 |
public abstract Exception getExcepiton( ) | 返回JSP隐式对象exception。 |
public abstract ServletContext getServletContext( ) | 返回JSP隐式对象application。 |
public abstract ServletConfig getServletConfig( ) | 返回JSP隐式对象config。 |
public abstract Object getPage( ) | 返回JSP隐式对象page。 |
2. 页面中的自定义标记
根据应用程序的需要,您可开发不同类型的自定义标记并将其包含在JSP页面中。自定义标记的各种类型有:
- 带属性的自定义标记
- 带主体的自定义标记
- 嵌套自定义标记
带属性的自定义标记
自定义标记可包含各种属性。您可使用各种属性定制自定义标记执行的功能。每个自定义属性(attribute)需定义一个属性(property)。您可以使用getXXX()和setXXX()方法访问和设置标记处理程序类的属性。例如,以下代码段显示了带有属性copyright的自定义标记,该属性的值为books:
<cpyrt