您当时的方位:主页 > 言语编程 > JSP

JSP与XML的结合

2014-09-14  www.codeforacause.net
总述:可扩展标示言语(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="http://www.jspinsider.com/jspkit/JAXP" prefix="JAXP"%>
c:/xml/example.xml
c:/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可主动完结创立一个自界说标签的大部分作业,这样你只需求写代码和标签处理就能够了。
  留意:一个标签处理仅界说一个自界说标签;一个标签库是几个处理相同使命的标签处理器的调集。

本新闻共4页,当时在第1页  1  2  3  4  


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 taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
"http://Java.sun.com/j2ee/dtds/we