| /* HTML_Format.Java */ public class HTML_Format extends Object implements Java.io.Serializable { /** 创建新的HTML_Format */ public HTML_Format() {} /** 将一个字符串中所有的所有 < 和 > 字符用响应的HTML编码代替 */ public String HTML_Encode(String as_data) { int li_len = as_data.length(); /*string buffer的长度要比原来的字符串长*/ StringBuffer lsb_encode = new StringBuffer(li_len + (li_len/10)); /* 循环替换全部的< 和 > 字符 */ for( int li_count = 0 ; li_count < li_len ; li_count++) { String ls_next = String.valueOf(as_data.charAt(li_count)); if (ls_next.equals("<")) ls_next = "<"; if (ls_next.equals(">")) ls_next = ">"; lsb_encode.append( ls_next ); } return( lsb_encode.toString() ); } } |
| 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; } } |
| 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文件 <?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> |
| <%@ 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 > |
通过这个标签,我就将该页面的所有代码编码了。有趣的是所有的自定义标签都是在服务器上处理的。这意味着你将不会在输出的页面上看到自定义的标签。
建立一个标签不是很难吧。最困难的部分是要学习标签处理的所有细节。这是一个很强大的功能,我们只是提到了最基本的地方。由于这个处理需要几步,新的JSP编程者在创建标签时将会感到迷惑。