Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16503122
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 21:14:20

下载本文示例代码
  综述:可扩展标注语言(eXtensible Markup Language,XML)正被迅速的运用于业界,它已作为与平台、语言和协议无关的格式描述和交换数据的广泛应用标准。XML和它的辅助规范可用于描述数据的文档表现,描述XML文档类型的限制,描述XML文档和资源之间的链接,描述XML文档的自动转换和格式化。  如何开发自定义标签库?  我使用JSP和ASP编程已经有一段颇长的时间了,在两种服务器端的编程方式中,我越来越觉得JSP的功能要强大得多。不提别的,其中JSP的标签库就是我选择JSP作为首选服务器端Web应用开发工具的原因。为什么?因为:维护和开发的速度。在一个单一的服务器页面中,你可以混合使用各种不同的脚本方法和对象。就?quot;混凝土"一样,这种混合可令服务器端的脚本变得强大,并且让服务器端的编程者设计出非常灵活和动态的Web页面。不过这种自由的混合也有其缺点,那就是维护起来非常麻烦,特别是当项目逐渐变大时。由于最终的产品是经由一个传统的Web设计者来维护的,因此会带来问题。更糟糕的是,随着代码的复杂性增加,开发的速度就会变慢,不利于开发中等和大型的Web应用,一旦开发完,站点还要找合格的编程者来维护这些颇为复杂的代码。幸好,JSP提供了一个很好解决的办法。标签库提供了一个简单的方法来建立一个可重用的代码块。一旦标签库设计好,它就可以在许多项目中再次使用。更方便的是,与COM和J2EE不同,你无需学习任何其它的技巧就可以建立一个标签库!只要你懂得写JSP,你就可以建立一个标签库。标签库还可以改善Web应用的维护。这个是得益于JSP页面自定义标签的简单XML接口。这样,Web设计者甚至可以做到无需知道任何JSP的知识,就可以建立JSP的Web应用。这个开放式的Web开发对于团队运作是非常有效的。JSP编程者可以建立自定义的标签和后台的代码模块,而Web设计者可以使用自定义的标签来建立Web应用,并且将精力集中在Web设计上。   1. 标签库的定义  JSP标签库(也称自定义库)可看成是一套产生基于XML脚本的方法,它经由JavaBeans来支持。在概念上说,标签库是非常简单和可以重用的代码构造。  执行XML/XSL转换的标签范例和HTML页面 <%@ taglib uri="" prefix="JAXP"%>c:/xml/example.xmlc:/xml/example.xsl  在这个例子中,通过使用简单的标签来访问后台更为强大的代码,一个XML被装载,并且通过一个XSL文件来产生一个结果,并发送给客户端,全部通过使用一个简单的标签调用就做到了。  自定义标签为在JSP项目中创建易于重用的代码打开了一扇大门。你所需要的只是标签库和它的文档说明。   2. 标签的组件  虽然标签库非常易于使用,不过要建立一个内里的设计来支持标签库是颇复杂的,起码要比建立一个简单的JavaBean复杂。这个复杂是来自于标签库是由几部分构成的。不过,你只需要知道Java和JSP的知识就够了。一个简单的标签由下面的元素构成:  ⑴ JavaBeans:为了得到Java与生具来的面向对象的好处,可重用的代码应该放到一个独立的代码容器中。这些JavaBeans并不是标签库的一部分。不过它是你的代码库用来执行相关任务的基本代码块。  ⑵ 标签处理:这是标签库的真正核心。一个标签处理器将引用它需要的任何资源(你的JavaBeans)和访问你的JSP页面的全部信息(pageContext对象)。JSP页面也会将所有已经被设置的标签属性和JSP页面上的标签体中的内容传送给标签处理器。在标签处理器处理完毕后,它将发回输出到你的JSP页面进行处理。  ⑶ 标签库的描述(tld文件):这是一个简单的XML文件,它记录着标签处理器的属性、信息和位置。JSP容器通过这个文件来得知从哪里及如何调用一个标签库。  ⑷ 网站的web.xml文件:这是你网站的初始化文件,在这个文件中,你定义了网站中用到的自定义标签,以及哪个tld文件用来描述每个自定义的标签。  ⑸ 分发文件(一个WAR或者JAR文件):如果你想重用自定义标签的话,你需要一个方法来将它由一个项目转移到另一个项目中。将标签库打包为一个JAR文件是一个简单而且有效的方式。  ⑹ 在你的JSP文件中作标签库声明:很简单,如果要用到该标签的话,只要在页面声明一下就可以,其后,你就可以在该JSP页面的任何地方使用它。  看来要做的工作很多,不过其实并不是很难。它的要点并不在于编码,而是在于如何将各部分正确地组织起来。不过,这样的分层是很重要的,它可令标签的使用灵活和更容易转移。更重要的是,这些层的存在可让处理建立标签的工程通过一个JSP IDE(JSP的集成开发环境)自动完成。期望将来的JSP IDE可自动完成创建一个自定义标签的大部分工作,这样你只需要写代码和标签处理就可以了。  注意:一个标签处理仅定义一个自定义标签;一个标签库是几个处理相同任务的标签处理器的集合。  3. 建立自己的标签  以下将一步一步地教你如何建立自定义的标签,具体的例子是扩展JSP,令它拥有自己的HTML编码功能。这个功能将所有的<和>字符用HTML代码来代替。它可以很容易地扩展为做其它的编码处理。为了简化,这个例子只解释了建立自定义标签的基本要素。  ⑴ 创建一个JavaBean  你代码中任何可重新使用的部分都应该放到一个JavaBean中。这个很重要,因为你要经常在项目的其它地方用到这些代码。放在标签处理器中的任何代码在标签外都是不可以重新使用的,因此将可重用的代码部分独立开来是很重要的。在这个例子总,为HTML编码的逻辑是常用的,因此放到JavaBean中。  ⑵ 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() );}}  ⑶ 创建一个标签处理器  标签处理器使用以下的代码: 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 taglibPUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"""><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-appPUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"""><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 >  通过这个标签,我就将该页面的所有代码编码了。有趣的是所有的自定义标签都是在服务器上处理的。这意味着你将不会在输出的页面上看到自定义的标签。  建立一个标签不是很难吧。最困难的部分是要学习标签处理的所有细节。这是一个很强大的功能,我们只是提到了最基本的地方。由于这个处理需要几步,新的JSP编程者在创建标签时将会感到迷惑。共3页。 1 2 3 :   综述:可扩展标注语言(eXtensible Markup Language,XML)正被迅速的运用于业界,它已作为与平台、语言和协议无关的格式描述和交换数据的广泛应用标准。XML和它的辅助规范可用于描述数据的文档表现,描述XML文档类型的限制,描述XML文档和资源之间的链接,描述XML文档的自动转换和格式化。  如何开发自定义标签库?  我使用JSP和ASP编程已经有一段颇长的时间了,在两种服务器端的编程方式中,我越来越觉得JSP的功能要强大得多。不提别的,其中JSP的标签库就是我选择JSP作为首选服务器端Web应用开发工具的原因。为什么?因为:维护和开发的速度。在一个单一的服务器页面中,你可以混合使用各种不同的脚本方法和对象。就?quot;混凝土"一样,这种混合可令服务器端的脚本变得强大,并且让服务器端的编程者设计出非常灵活和动态的Web页面。不过这种自由的混合也有其缺点,那就是维护起来非常麻烦,特别是当项目逐渐变大时。由于最终的产品是经由一个传统的Web设计者来维护的,因此会带来问题。更糟糕的是,随着代码的复杂性增加,开发的速度就会变慢,不利于开发中等和大型的Web应用,一旦开发完,站点还要找合格的编程者来维护这些颇为复杂的代码。幸好,JSP提供了一个很好解决的办法。标签库提供了一个简单的方法来建立一个可重用的代码块。一旦标签库设计好,它就可以在许多项目中再次使用。更方便的是,与COM和J2EE不同,你无需学习任何其它的技巧就可以建立一个标签库!只要你懂得写JSP,你就可以建立一个标签库。标签库还可以改善Web应用的维护。这个是得益于JSP页面自定义标签的简单XML接口。这样,Web设计者甚至可以做到无需知道任何JSP的知识,就可以建立JSP的Web应用。这个开放式的Web开发对于团队运作是非常有效的。JSP编程者可以建立自定义的标签和后台的代码模块,而Web设计者可以使用自定义的标签来建立Web应用,并且将精力集中在Web设计上。   1. 标签库的定义  JSP标签库(也称自定义库)可看成是一套产生基于XML脚本的方法,它经由JavaBeans来支持。在概念上说,标签库是非常简单和可以重用的代码构造。  执行XML/XSL转换的标签范例和HTML页面 <%@ taglib uri="" prefix="JAXP"%>c:/xml/example.xmlc:/xml/example.xsl  在这个例子中,通过使用简单的标签来访问后台更为强大的代码,一个XML被装载,并且通过一个XSL文件来产生一个结果,并发送给客户端,全部通过使用一个简单的标签调用就做到了。  自定义标签为在JSP项目中创建易于重用的代码打开了一扇大门。你所需要的只是标签库和它的文档说明。   2. 标签的组件  虽然标签库非常易于使用,不过要建立一个内里的设计来支持标签库是颇复杂的,起码要比建立一个简单的JavaBean复杂。这个复杂是来自于标签库是由几部分构成的。不过,你只需要知道Java和JSP的知识就够了。一个简单的标签由下面的元素构成:  ⑴ JavaBeans:为了得到Java与生具来的面向对象的好处,可重用的代码应该放到一个独立的代码容器中。这些JavaBeans并不是标签库的一部分。不过它是你的代码库用来执行相关任务的基本代码块。  ⑵ 标签处理:这是标签库的真正核心。一个标签处理器将引用它需要的任何资源(你的JavaBeans)和访问你的JSP页面的全部信息(pageContext对象)。JSP页面也会将所有已经被设置的标签属性和JSP页面上的标签体中的内容传送给标签处理器。在标签处理器处理完毕后,它将发回输出到你的JSP页面进行处理。  ⑶ 标签库的描述(tld文件):这是一个简单的XML文件,它记录着标签处理器的属性、信息和位置。JSP容器通过这个文件来得知从哪里及如何调用一个标签库。  ⑷ 网站的web.xml文件:这是你网站的初始化文件,在这个文件中,你定义了网站中用到的自定义标签,以及哪个tld文件用来描述每个自定义的标签。  ⑸ 分发文件(一个WAR或者JAR文件):如果你想重用自定义标签的话,你需要一个方法来将它由一个项目转移到另一个项目中。将标签库打包为一个JAR文件是一个简单而且有效的方式。  ⑹ 在你的JSP文件中作标签库声明:很简单,如果要用到该标签的话,只要在页面声明一下就可以,其后,你就可以在该JSP页面的任何地方使用它。  看来要做的工作很多,不过其实并不是很难。它的要点并不在于编码,而是在于如何将各部分正确地组织起来。不过,这样的分层是很重要的,它可令标签的使用灵活和更容易转移。更重要的是,这些层的存在可让处理建立标签的工程通过一个JSP IDE(JSP的集成开发环境)自动完成。期望将来的JSP IDE可自动完成创建一个自定义标签的大部分工作,这样你只需要写代码和标签处理就可以了。  注意:一个标签处理仅定义一个自定义标签;一个标签库是几个处理相同任务的标签处理器的集合。  3. 建立自己的标签  以下将一步一步地教你如何建立自定义的标签,具体的例子是扩展JSP,令它拥有自己的HTML编码功能。这个功能将所有的<和>字符用HTML代码来代替。它可以很容易地扩展为做其它的编码处理。为了简化,这个例子只解释了建立自定义标签的基本要素。  ⑴ 创建一个JavaBean  你代码中任何可重新使用的部分都应该放到一个JavaBean中。这个很重要,因为你要经常在项目的其它地方用到这些代码。放在标签处理器中的任何代码在标签外都是不可以重新使用的,因此将可重用的代码部分独立开来是很重要的。在这个例子总,为HTML编码的逻辑是常用的,因此放到JavaBean中。  ⑵ 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() );}}  ⑶ 创建一个标签处理器  标签处理器使用以下的代码: 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 taglibPUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"""><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-appPUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"""><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 >  通过这个标签,我就将该页面的所有代码编码了。有趣的是所有的自定义标签都是在服务器上处理的。这意味着你将不会在输出的页面上看到自定义的标签。  建立一个标签不是很难吧。最困难的部分是要学习标签处理的所有细节。这是一个很强大的功能,我们只是提到了最基本的地方。由于这个处理需要几步,新的JSP编程者在创建标签时将会感到迷惑。共3页。 1 2 3 : 下载本文示例代码


JSP与XML的结合JSP与XML的结合JSP与XML的结合JSP与XML的结合JSP与XML的结合JSP与XML的结合JSP与XML的结合JSP与XML的结合JSP与XML的结合JSP与XML的结合JSP与XML的结合JSP与XML的结合JSP与XML的结合JSP与XML的结合JSP与XML的结合
阅读(106) | 评论(0) | 转发(0) |
0

上一篇:JSP安全性初探

下一篇:在JSP中操作文件

给主人留下些什么吧!~~