以下将一步一步地教你如何建立自定义的标签,具体的例子是扩展JSP,令它拥有自己的HTML编码功能。这个功能将所有的<和>字符用 HTML代码来代替。它可以很容易地扩展为做其它的编码处理。为了简化,这个例子只解释了建立自定义标签的基本要素。 代码中的任何可重用部分都应该放到一个JavaBean中。这一点是很重要的。这样你就可以在其他项目中重用这些代码了。由于任何放置在标签处理器内的代码在标签外都是不可以重用的,因此将可重用的代码部分独立开来是很重要的。在这个例子哗弯中,为HTML编码的逻辑是常用的,因此放到JavaBean中,请参看清单B
清单B:HTML编码JavaBean
/* 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() )
}
} 标签处理器的代码请参看清单C:
清单C: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
}
}
这个处理很简单,它包括有:
1.读入位于开始和结束标签间的文本
2.调用html编码函数
3.将结果返回到JSP页面。 我们需要描述自定义标签以让系统知道如何处理。该描述文件的后缀为.tld,TLD文件通常就以标签处理器命名,并存放在“/WEB-INF/”目录之下。请参看清胡芦冲单D。
清单D:HTML编码标签描述器
<!DOCTYPE taglib
PUBLIC -//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN
http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd>
1.0
1.1
HTML_FormatTag
HTML Encoding Tag
HTMLEncode
HTML_FormatTag
Encode HTML 现在可以告诉JSP容器如何使用标签库了。为此要修改web.xml文件,具体说来是要在其中加入一个taglib的项目来注册该标签库,并为标签分配一个URI。URI是Web站点上唯一应用于这一特定标签的索引。由于标签今后还可能用在不同的Web站点上,所以你最好采用完整的URL和/或者包名字(package name)来保证这一唯一性。这个例子是简化了,示例代码请参看清单E。
清单E:修改web.xml文件
<!DOCTYPE web-app
PUBLIC -//Sun Microsystems, Inc.//DTD Web Application 2.2//EN
http://java.sun.com/j2ee/dtds/web-app_2.2.dtd>
HTMLEncode
/WEB-INF/HTML_FormatTag.tld 自定义的标签设置好后,就可以用在你的JSP页面上了。要做到这一点,只需要在页面上使用taglib指示命令声明所要采用的标签即可。标签通过其唯一的 URI被索引,然后被分配给一个名字空间前缀(prefix)。这一前缀并没有什么特别的意义,只要它不与其它的名字空间冲突便可,可以任意。请参看以下的清单F和G。
清单F:在一个JSP页面上使用HTML编码标签
清单G:范例代码的输出
which displays as:
通过这个标签,我就将该页面的所有代码编码了。所有的自定义标签都是在服务器上处理的。这意味着你将不会在输出的页面上看到自定义的标签。
正如你所看到的那样,建立标签并非难事。最麻烦的是学习标签处理器的整个细节。这是一个很强大的功能,我们不过是触及了皮毛。由于这一过程需要采取的步骤很多,所以刚入门的JSP程序员可能在建立标签的时候会觉得很困惑。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)