⑶ 创建一个标签处理器 标签处理器使用以下的代码: HTML编码标签处理器 import Java.io.IOException; import Javax.servlet.jsp.*; import Javax.servlet.jsp.tagext.*; public class HTML_FormatTag extends BodyTagSupport { /* 1} 在标签末将会调用这个函数 */ public int doEndTag() throws JspTagException { try { /* 2}得到标签中的文本 */ BodyContent l_tagbody = getBodyContent(); String ls_output = ""; /* 3}如果标签体有文本,就处理它 */ if(l_tagbody != null) { HTML_Format l_format = new HTML_Format(); /* 3a} 将标签体的内容转换为一个字符串 */ String ls_html_text = l_tagbody.getString(); ls_output = l_format.HTML_Encode(ls_html_text); } /* 4}将结果写回到数据流中 */ pageContext.getOut().write(ls_output.trim()); } catch (IOException e) { throw new JspTagException("Tag Error:" + e.toString()); } /* 让JSP继续处理以下页面的内容 */ return EVAL_PAGE; } } 这个处理很简单,它包括有: o 读入标签开始和结束间的文本 o 调用html编码函数 o 返回结果到JSP页面。 ⑷ 创建一个标签描述器 需要描述自定义标签以让系统知道如何处理。该描述文件的后缀为.tld,通常它的名字和标签处理器相同,并存放在"/WEB-INF/"目录。 HTML编码标签描述器 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://Java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd"> <TAGLIB> <TLIBVERSION>1.0</TLIBVERSION> <JSPVERSION>1.1</JSPVERSION> <SHORTNAME>HTML_FormatTag</SHORTNAME> <URI></URI> <INFO>HTML Encoding Tag </INFO> <TAG> <NAME>HTMLEncode</NAME> <TAGCLASS>HTML_FormatTag</TAGCLASS> <INFO>Encode HTML</INFO> </TAG> </TAGLIB> ⑸ 更新Web XML文件 现在可告诉JSP容器使用标签库。为此要修改web.xml文件,具体说来是要在其中加入一个taglib的项目来注册该标签库。最重要的是,要为tag分配一个URI。URI是一个唯一的引用,只应用在该网站的这个特别的标签上。使用全长的URL或者包名是一个好的习惯,它可以确保唯一性,因为该标签可以在不同的网站使用。这个例子是简化了。 修改web.xml文件 <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://Java.sun.com/j2ee/dtds/web-app_2.2.dtd"> <WEB-APP> <TAGLIB> <TAGLIB-URI> HTMLEncode </TAGLIB-URI> <TAGLIB-LOCATION> /WEB-INF/HTML_FormatTag.tld </TAGLIB-LOCATION> </TAGLIB> </WEB-APP> ⑹ 使用新的标签 自定义的标签已经设置好,可以用在一个JSP页面上。要做到这一点,只需在该页面使用taglib指示命令声明一下该标签就可以了,该标签通过它唯一的URI被引用,并且会被分配一个名字空间前缀。前缀可以任意,只要它不与其它的名字空间冲突便可。 在一个JSP页面上使用HTML编码标签: <%@ taglib uri="HTMLEncode" prefix="Examples" %> <PRE> <?XML:NAMESPACE PREFIX = Examples /><Examples:HTMLEncode> < Hello , Simple sample > </Examples:HTMLEncode> </PRE> 范例代码的输出 < Hello , Simple sample > which displays as: < Hello , Simple sample > |