客户化JSP标签:
创建客户化JSP标签的步骤:
1创建标签的处理类
标签处理类必须扩展以下两个类中的一个:
--javax.servlet.jsp.tagext.TagSupport
--javax.servlet.jsp.tagext.BodyTagSupport
2创建标签库描述文件
标签库描述文件的后缀名是:.tld Tag Library Descriptor (是一个标准的XML文件) 必须跟web.xml文件在一个目录,也就是WEB-INF目录下
3在JSP文件中引入标签库,然后插入标签
<%@ taglib uri="/myTag" prefix="hello"%> prefix是前缀的意思,代表前面的/myTag。
<hello:firstTag />
Servlet容器编译JSP网页时,如果遇到自定义标签,就会调用这个标签的处理类,并且执行对应的方法。
doStartTag() Servlet容器遇到自定义标签的起始标志时候调用这个方法
方法返回一个整数值,用来决定程序的后续流程。有两个可选值
-Tag.SKIP_BODY 表示标签之间的内容被忽略
-Tag.EVAL_BODY_INCLUDE 表示标签之间的内容被正常执行。
doEndTag() 当Servlet容器遇到自定义标签的结束标志,就会调用这个方法
-Tag.SKIP_PAGE 表示立即停止执行JSP网页,网页上未处理的静态内容和JSP程序均被忽略,任何已有的输出内容立刻返回到客户的浏览器上。
-Tag.EVAL_PAGE 表示按正常的流程
parent:代表嵌套了当前标签的上层标签的处理类
pageContext:代表Web应用中的java.servlet.jsp.PageContext对象
在标签中还能包含自定义的属性,例如:
<prefix:mytag username="zhangsan">
... ...
</prefix:mytag>
在标签处理类中应该将这个属性作为成员变量,并且分别提供set和get方法。
在标签处理类中,如何访问session范围内的共享数据?
pageContext.getAttribute("attributename",PageContext.SESSION_SCOPE);
在标签处理类TagSupport类中定义了pageContext成员变量,先通过它的getSession方法获得当前的HttpSession对象,
再调用HttpSession对象的getAttribute方法。