如果希望实现能够操纵主体内容的定制标记,就必须真正理解什么是主体内容,以及servlet容器处理主体内容的方式。通过BodyContent类表示的主体内容是缓冲写入器,它包含已计算的标记的主体内容。可以使用这个缓冲区按照任何方式操纵标记主体的内容。
在网站建设编码中如果希望实现能够操纵主体内容的定制标记,就必须真正理解什么是主体内容,以及servlet容器处理主体内容的方式。通过BodyContent类表示的主体内容是缓冲写入器,它包含已计算的标记的主体内容。可以使用这个缓冲区按照任何方式操纵标记主体的内容。BodyContent类扩展JspWriter类,JspWriter的类型是隐含的out变量,这并不是巧合。通常,在JSP页面中,在向隐含的out变量中写入数据时,输出会被写入相应流中。在定制标记中,输出被传到BodyContent实例。
Servlet容器包含BodyContent对象栈,所以,嵌套标记不需要重写祖先标记的主体内容。无论是主体内容,还是隐含的out变量,每个BodyContent对象都有一个到缓冲写入器的引用,该引用处于对象栈的下方。这个写入器即前一个输出,或者是封闭写入器,通过BodyContent.getEnclosingWriter或BodyTagSupport.getPreviousOut可访问该写入器。知道servlet容器如何维护BodyContent对象栈非常重要。如果不理解这个原理,就难以了解修改标记主体内容后应该使用哪类JSP写入器,更难以知道从BodyTagSupport覆盖哪个方法。