<%@ page contentType="text/html; charset=gb2312"%> XML在分布式系统中的作用
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
XML在分布式系统中的作用
     发布者: 发布时间:2006-09-07

摘要:本文首先简单介绍了XML的基本知识,然后,通过列举、比较,详细地介绍XML在目前流行的web应用如在TomcatstrutshibernateSpring中的作用,作为配置文件。同时,还介绍了它在web中的映射作用。

关键词:strutshibernateSpringTomcat

                   

                  The role of XML in distributed systems

Abstract: The paper firstly provides a brief description of the basic knowledge of XML, and then ,throughout listing and comparing ,we detailed introduce the role of XML as the configuration file in the current popular web applications such as Tomcat, struts, hibernate, Spring. At the same time, the role of mapping in the web also be introduced

Keywords: strutshibernateSpringTomcat

 

1           引论………………………………………………………………………………………….2

2           XML………………………………………………………………………………………….2

2.1          什么是XML……………………………………………………………………….2

2.2          XML的优点………………………………………………………………………….2

2.3          XML的特点………………………………………………………………………….2

2.4          XML组件…………………………………………………………………………….3

3   XML应用……………………………………………………………………………………3

4   XML作为配置文件…………………………………………………………………………3

    4.1   作为Tomcat的配置文件…………………………………………………………….4

    4.2   作为Struts的配置文件……………………………………………………………..6

    4.3   作为Hibernate的配置文件………………………………………………………….15

    4.4   作为Spring的配置文件…………………………………………………………….16

    4.5   小结………………………………………………………………………………...18

5           XML在分布式技术的映射作用……………………………………………………………18

5.1     XMLStruts中的映射作用……………………………………………………….18

5.2     XMLHibernate中的映射作用……………………………………………………19

5.3     XMLSpring FrameWork中的映射作用…………………………………………20

5.4     小结………………………………………………………………………………….20

6   参考文献…………………………………………………………………………………….20

7   致谢………………………………………………………………………………………….20

 

 

 

 

 

1  引论

在学习web过程中,无论是学习Tomcat,还是StrutshibernateSpring,都出现配置文件。而配置文件一般都是用XML语言编写的。从而对本文web应用中的XML所起的作用产生了兴趣。随着分布式系统越来越流行,更多基于XML的技术都会出现,研究目前XMLweb应用中对以后学习和研究web新技术具有指导意义。

2  XML

2.1 什么是XML

19982月发表的XML 1.0规范中有如下描述:

eXtensible Markup Language (XML)SGML的一个子集……其目标是能够以目前HTML可能实现的方式在web上使用、接受和处理通用SGMLXML的设计目标是实现简便并且能与SGMLHTML共同操作。”

也就是说,XML是一个精简的SGML,它保留了SGML的可扩展功能,将SGML的丰富功能和HTML的易用性结合到web应用中。简单地说,XML是一种定义标记语言的元标记语言,是一套定义语义标记的规则,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的语言。

XML不是HTML的扩展,而是一种用于定义标记语言的类似于SGML的语言。XML不再使用固定标记,而允许定义数量无限的标记来描述文档中的资料。HTMLweb中显示数据的通用方法,而XML着重描述web页面的内容。

 为了使编写的web页面成为一个有效的XML文档,文档中的每一个添加的标记必须记入DTDDocument Type Definitions,文档类型定义)中。XML主要用于描述web页面的内容,因此它必须与多种相关技术相互作用才能达到正确的显示效果和链接。这些技术主要包括CSSCascading Style Sheet,级联样式单)、XSLeXtensible Style Language,可扩展样式语言)和XLLeXtensible Link Language,可扩展链接语言)。CSS可以使XML页面具有更复杂的表现形式。XSL可以将XML 数据翻译为HTML风格或其他的风格,并提供一种级联样式单的功能,使开发者能构造出具有表达层次结构的web页面。XLLXML的链接语言,它与HTML的链接相似,但功能更强大,同时支持可扩展的链接和多方向的链接。

2.2  XML的优点

1.  减少固有数据的障碍;

2.  让应用系统可以相同方式存取所有数据;

3.  让搜索更快速,更有效率;

4.  数据的比较与汇整更为便利;

5.  系统可以逐步修改,不需要大幅调整;

6.  具有识别数据提供者提供程序并验证他的身份的功能;

7.  可降低重复数据的传输,强化网络系统的使用效率。

   2.3  XML的特点

1XML遵循严格的语法要求

浏览器可以显示有文法错误的HTML文件。但XML就不同了,它不但要求标记配对、嵌套,而且还要求严格遵守DTD的规定,一个具有良好语法结构的网页文件可以提供较好的可读性和可维护性,从长远来看还是大有好处的。何况这大大减轻了浏览器开发人员的负担,也提高了浏览器的时间空间效率。

2XML便于不同系统之间信息的传输

    当今的计算机世界中,不同企业、不同部门中存在着许多不同的系统。操作系统有NTUNIX,数据库系统有SQL ServerOracle...,要想在这些不同的平台、不同的数据库软件之间传输信息,不得不使用一些特殊的软件,非常之不便。而不同的显示界面,从工作站、个人微机、到手机,使这些信息的个性化显示也变得很困难。
    
现在有了XML,各种不同的系统之间可以采用XML作为交流媒介。XML不但简单易读,而且可以标注各种文字、图像甚至二进制文件,只要有XML处理工具,就可以轻松地读取并利用这些数据,使得XML成为一种非常理想的网际语言。

3XML具有较好的保值性

XML的保值性来自它的先驱之一——SGML语言。SGML是一套历史悠久的国际标准,它具有强大复杂的功能。HTML目前是web页面的显示标记语言。XML可以很好地与HTMLSGML兼容,具有较好的保值性。

2.4  XML组件

重要组件:元素、属性、实体、DTD

元素:是文档的一个成分。元素可能由其他元素、其他类型数据或描述性表示构成。该描述性表示告知XML分析应用程序关于存在于文档外的什么地方的资源;

属性:提供有关XML元素及其内容的其他信息,由名-值对和等号算符组成;

实体:希望在文档中引用的任何一部分数据;

DTD文档类型定义。独立于主XML文档的单元,提供了XML文档所附的一组规则;

3   XML应用

作为表达数据的一种规范,XML必须和具体的应用结合起来才能体现出它的优势。

XML刚引入开始,几年内已经出现了许多XML应用。如电子商务,电子数据存储,数据交换,前后检索,多媒体传输,化学科技领域,以至于各个不同的领域的特殊文件格式,都可使用XML定义,达到网络统一文件的目的,有人称XML为“计算机语言的世界语”。

我们本文中主要是针对XMLweb领域的应用做一些说明,寻找出XML应用的主要方面。

4  XML作为web配置文件

   XML文件常用做各种web应用的配置文件。下面列举它在一些新的web技术中的应用。

4.1 XML作为Tomcat的配置文件

下面是Tomcat服务器配置示例文件。这些组件的构成是根据相互之间的父子关系进行嵌套的。

一个Server是一个提供完整的JVM的独立组件,它可以包含一个或多个Service实例。服务器在指定的端口上监听shutdown命令。一个Service自身不是一个Container”(容器),而是一个或多个共用一个单独Container”(容器)Connectors组合(因此,应用程序在容器中可见)。通常,这个容器是一个Engine(引擎),但这不是必须的。

一个Connector(连接器)代表一个请求被接收和应答所需要的端点。每个连
接器通过相关的
Container(容器)处理请求。默认情况下,一个非SSLHTTP/1.1的连接器被绑定在端口8080。在端口8443上定义一个SSLHTTP/1.1的连接器。在端口8009上定义一个Coyote/JK2 AJP 1.3连接器。在8082端口上定义一个代理HTTP/1.1连接器

一个Engine(引擎)代表处理每个请求的入口点(在Catalina内)。这个Tomcat的标准独立引擎实现分析包含在请求中的HTTP头信息,并将请求传送到适当的主机或虚拟主机上。请求转储器值转储非常有用的通过Tomcat这个实例接收到的所有请求的,关于接收到的请求头和cookies,以及发送出的回应头和cookies的调试信息。如果你只在意一个特定的虚拟主机或者一个特定应用程序的请求,在对应的<Host><Context>入口中套用这个元素。通过定义这个群集元素,意味着每个管理员都将被改变。因此,当运行一个群集时,只有确认在必须被聚集和移除其他的地方有你的web软件。当配置群集时,你也添加一个值来捕获所有传入的请求,在请求结束时,这个会话可能被子复制,也可能不被复制。

与这个虚拟主机有关系所有上下文所共享的日志。默认情况下(使用FileLogger时),日志文件被创建在相对于$CATALINA_HOME目录下的logs目录下。如果你希望,你也可以给directory指定一个不同的路径。可以使用相对于$CATALINA_HOME的相对路径,也可以使用绝对路径。

<Server port="8005" shutdown="SHUTDOWN" debug="0">
   <Listener          className="org.apache.catalina.mbeans.ServerLifecycleListener"debug="0"/>
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"

debug="0"/>
  <GlobalNamingResources>
       <Environment  name="simpleValue"  type="java.lang.Integer"  value="30"/>

       <Resource name="UserDatabase" auth="Container"
                 type="org.apache.catalina.UserDatabase"
                 description="User database that can be updated and saved">
       </Resource>
    <ResourceParams name="UserDatabase">
      <parameter>
        <name>factory</name>
       
<value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
      </parameter>
      <parameter>
        <name>pathname</name>
        <value>conf/tomcat-users.xml</value>
      </parameter>
    </ResourceParams>

  </GlobalNamingResources>

  <Service name="Catalina">
      <Connector port="8080"
                    maxThreads="150"  minSpareThreads="25"  maxSpareThreads="75"
                    enableLookups="false"  redirectPort="8443"  acceptCount="100"
                    debug="0"  connectionTimeout="20000"  disableUploadTimeout="true" />

<Connector port="8009"  enableLookups="false"  redirectPort="8443" debug="0"  protocol="AJP/1.3" />

<Connector port="8082"  maxThreads="150"  minSpareThreads="25" maxSpareThreads="75" enableLookups="false"  acceptCount="100" debug="0"  connectionTimeout="20000"  proxyPort="80" disableUploadTimeout="true" />

<Engine name="Catalina"  defaultHost="localhost"  debug="0">

<Valve className="org.apache.catalina.valves.RequestDumperValve"/>

<Logger className="org.apache.catalina.logger.FileLogger"
                          prefix="catalina_log."  suffix=".txt" timestamp="true"/>

<Realm className="org.apache.catalina.realm.JDBCRealm" debug="99"
                         driverName="org.gjt.mm.mysql.Driver"
                        connectionURL="jdbc:mysql://localhost/authority"
                       connectionName="test" connectionPassword="test" userTable="users"

           userNameCol="user_name" userCredCol="user_pass"
                       userRoleTable="user_roles" roleNameCol="role_name" />
            <Realm className="org.apache.catalina.realm.JDBCRealm" debug="99"
                         driverName="oracle.jdbc.driver.OracleDriver"
                       connectionURL="jdbc:oracle:thin:@ntserver:1521:ORCL"
                       connectionName="scott" connectionPassword="tiger"userTable="users"

       userNameCol="user_name" userCredCol="user_pass"
                       userRoleTable="user_roles" roleNameCol="role_name" />
            <Realm className="org.apache.catalina.realm.JDBCRealm" debug="99"
                         driverName="sun.jdbc.odbc.JdbcOdbcDriver" 

connectionURL="jdbc:odbc:CATALINA" userTable="users" userNameCol="user_name" userCredCol="user_pass userRoleTable="user_roles" roleNameCol="role_name" />

          <Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true"   xmlValidation="false" xmlNamespaceAware="false">

          <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster" managerClassName="org.apache.catalina.cluster.session.DeltaManager" expireSessionsOnShutdown="false" useDirtyFlag="true">

                  <Membership
                      className="org.apache.catalina.cluster.mcast.McastService"
                      mcastAddr="228.0.0.4"
                      mcastPort="45564"
                      mcastFrequency="500"
                      mcastDropTime="3000"/>

                   <Receiver
                     className="org.apache.catalina.cluster.tcp.ReplicationListener"
                      tcpListenAddress="auto"
                      tcpListenPort="4001"
                      tcpSelectorTimeout="100"
                      tcpThreadCount="6"/>

                  <Sender
                   className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
                    replicationMode="pooled"/>

                 <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"

filter=".*\.gif;.*\.js;.*\.jpg;.*\.htm;.*\.html;.*\.txt;"/>

</Cluster>

        </Host>

     </Engine>

  </Service>

</Server>

4.2作为Struts的配置文件

在基于Struts框架的web应用中,有两个重要的配置文件: web.xml struts-config.xml web.xml文件用于配置web应用,如Servlet组件。struts-config.xml用于配置Struts框架,如各种Action组件。

那么配置文件的作用是什么呢?

web容器启动时,会加载并解析web.xml文件,而web.xml文件是将所有的组件组合起来构成一个整体的文件。DTDXML文档的格式做了定义,DTDXML文档划分为元素,属性,实体。每一种XML文档都有独自的DTD文件,可以从网上下载。.如果把所有的组件比喻成人的四肢的话,那么web.xml文件相当于人大大脑,它将各个组件协调起来,完成一定的任务。

不过,web容器不支持动态加载web.xml文件,也就是说,一旦启动了web容器,那么它将读取web.xml文件,根据它来创建和配置各种Struts组件。如果在不关闭web容器的情况下修改web.xml文件,那么系统是不会自动更新web.xml文件的。若希望看到修改后的web.xml文件,则必须关闭web容器,然后再重新启动。

下面让我们来看一下web.xmlDTD

<web-app> DTD

 

      <! ELEMENT web-app (icon?, display-name?, description?, distributable?, context-param*, filter*, filter-mapping*, listener*, servlet*, servlet-mapping*, session-config?, mime-mapping*, welcome-file-list?, error-page*, taglib*,resource-env-ref*, resource-ref*,security-constraint*, login-config?, security-role*, env-entry*, ejb-ref*, ejb-local-ref*)>

 

符号

含义

无符号

该子元素在父元素内必须存在且只能存在一次

+

该子元素在父元素内必须存在,可以存在一次或多次

*

该子元素在父元素内可以不存在,或者存在一次或多次

该子元素在父元素内可以不存在,或者只存在一次

 

   <web-app>web.xml的根元素。

下面让我们先看看web.xml文件的构成。

      <? xml version=”1.0” encoding=”UTF- 8 ”?>

      <! DOCTYPE web-app

PUBLIC “-//Sun Microsystems ,Inc.//DTD Web Application 2.2//EN”

“http://java.sun.com/j2ee/dtds/webapp_2_2.dtd”

> 

      <web-app>

        <icon></icon>

        <display-name> </display-name>

        <description> </description>

        <distributable></distributable>

<context-param> </context-param>

<filter > </filter>

<filter-mapping> </filter-mapping>

<listener > </listener>

        <servlet>

          <servlet-name> </servlet-name>

          <servlet-class> </servlet-class>

          <init-param>

             <param-name></param-name>

             <param-value></param-value>

          </init-param>

          <load-on-startup></load-on-startup>

        </servlet>

        <servlet-mapping>

            <servlet-name></servlet-name>

            <url-pattern></url-pattern>

        </servlet-mapping>

<session-config ></session-config>

<mime-mapping > </mime-mapping>

<welcome-file-list ></welcome-file-list>

<error-page > </error-page>

<taglib ></taglib>

<resource-env-ref> </resource-env-ref>

<resource-ref > </resource-ref>

<security-constraint ></ security-constraint >

 <login-config ></login-config>

<security-role > </security-role >

<env-entry > </env-entry >

<ejb-ref > </ejb-ref>

<ejb-local-ref > </ejb-local-ref>

 </web-app>

(1)    icon 子元素

它包含<small-icon ><large-icon >,它的作用是图形化其父元素,<small-icon>的内容      是一个16x16的图像文件,而<large-icon/>的内容是一个32x32的图像文件。如下例子:

<icon>

<small-icon>  /images/smalllogo.gif  </small-icon>

<large-icon>  /images/largelogo.gif </large-icon>

</icon>

(2) <display-name >子元素
     
它提供对父元素的短文字(short textual)描述信息,如下:

 <display-name> short textual discription of its parent element  </display-name>

(3) <description >子元素
     
它提供对父元素的完全(full-length textual)的描述信息,如下:

<description> full-length textual discription of its parent element</description>

  (4)<distributable>子元素