| JAVA基础:XML在分布式系统中的作用 |
| JAVA基础:XML在分布式系统中的作用 | ||||||||||||
| 作者:YesHack 文章来源:YesHack.Com 更新时间:2006-9-20 15:52:51 【字体:小 大】 | ||||||||||||
1 引论 在学习web过程中,无论是学习Tomcat,还是Struts,hibernate,Spring,都出现配置文件。而配置文件一般都是用XML语言编写的。从而对本文web应用中的XML所起的作用产生了兴趣。随着分布式系统越来越流行,更多基于XML的技术都会出现,研究目前XML在web应用中对以后学习和研究web新技术具有指导意义。
2 XML
2.1 什么是XML?
1998年2月发表的XML 1.0规范中有如下描述:
“eXtensible Markup Language (XML)是SGML的一个子集……其目标是能够以目前HTML可能实现的方式在web上使用、接受和处理通用SGML。XML的设计目标是实现简便并且能与SGML和HTML共同操作。”
也就是说,XML是一个精简的SGML,它保留了SGML的可扩展功能,将SGML的丰富功能和HTML的易用性结合到web应用中。简单地说,XML是一种定义标记语言的元标记语言,是一套定义语义标记的规则,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的语言。
XML不是HTML的扩展,而是一种用于定义标记语言的类似于SGML的语言。XML不再使用固定标记,而允许定义数量无限的标记来描述文档中的资料。HTML是web中显示数据的通用方法,而XML着重描述web页面的内容。
为了使编写的web页面成为一个有效的XML文档,文档中的每一个添加的标记必须记入DTD(Document Type Definitions,文档类型定义)中。XML主要用于描述web页面的内容,因此它必须与多种相关技术相互作用才能达到正确的显示效果和链接。这些技术主要包括CSS(Cascading Style Sheet,级联样式单)、XSL(eXtensible Style Language,可扩展样式语言)和XLL(eXtensible Link Language,可扩展链接语言)。CSS可以使XML页面具有更复杂的表现形式。XSL可以将XML 数据翻译为HTML风格或其他的风格,并提供一种级联样式单的功能,使开发者能构造出具有表达层次结构的web页面。XLL是XML的链接语言,它与HTML的链接相似,但功能更强大,同时支持可扩展的链接和多方向的链接。
2.2 XML的优点
1. 减少固有数据的障碍;
2. 让应用系统可以相同方式存取所有数据;
3. 让搜索更快速,更有效率;
4. 数据的比较与汇整更为便利;
5. 系统可以逐步修改,不需要大幅调整;
6. 具有识别数据提供者提供程序并验证他的身份的功能;
7. 可降低重复数据的传输,强化网络系统的使用效率。
2.3 XML的特点
(1)XML遵循严格的语法要求
浏览器可以显示有文法错误的HTML文件。但XML就不同了,它不但要求标记配对、嵌套,而且还要求严格遵守DTD的规定,一个具有良好语法结构的网页文件可以提供较好的可读性和可维护性,从长远来看还是大有好处的。何况这大大减轻了浏览器开发人员的负担,也提高了浏览器的时间空间效率。
(2)XML便于不同系统之间信息的传输
当今的计算机世界中,不同企业、不同部门中存在着许多不同的系统。操作系统有NT、UNIX,数据库系统有SQL Server、Oracle,...,要想在这些不同的平台、不同的数据库软件之间传输信息,不得不使用一些特殊的软件,非常之不便。而不同的显示界面,从工作站、个人微机、到手机,使这些信息的个性化显示也变得很困难。
现在有了XML,各种不同的系统之间可以采用XML作为交流媒介。XML不但简单易读,而且可以标注各种文字、图像甚至二进制文件,只要有XML处理工具,就可以轻松地读取并利用这些数据,使得XML成为一种非常理想的网际语言。 (3)XML具有较好的保值性
XML的保值性来自它的先驱之一——SGML语言。SGML是一套历史悠久的国际标准,它具有强大复杂的功能。HTML目前是web页面的显示标记语言。XML可以很好地与HTML和SGML兼容,具有较好的保值性。
2.4 XML组件
重要组件:元素、属性、实体、DTD
元素:是文档的一个成分。元素可能由其他元素、其他类型数据或描述性表示构成。该描述性表示告知XML分析应用程序关于存在于文档外的什么地方的资源;
属性:提供有关XML元素及其内容的其他信息,由名-值对和等号算符组成;
实体:希望在文档中引用的任何一部分数据;
DTD:文档类型定义。独立于主XML文档的单元,提供了该XML文档所附的一组规则;
3 XML应用
作为表达数据的一种规范,XML必须和具体的应用结合起来才能体现出它的优势。
从XML刚引入开始,几年内已经出现了许多XML应用。如电子商务,电子数据存储,数据交换,前后检索,多媒体传输,化学科技领域,以至于各个不同的领域的特殊文件格式,都可使用XML定义,达到网络统一文件的目的,有人称XML为“计算机语言的世界语”。
我们本文中主要是针对XML在web领域的应用做一些说明,寻找出XML应用的主要方面。
4 XML作为web配置文件
XML文件常用做各种web应用的配置文件。下面列举它在一些新的web技术中的应用。
4.1 XML作为Tomcat的配置文件
下面是Tomcat服务器配置示例文件。这些组件的构成是根据相互之间的父子关系进行嵌套的。
一个“Server”是一个提供完整的JVM的独立组件,它可以包含一个或多个“Service”实例。服务器在指定的端口上监听shutdown命令。一个“Service”自身不是一个“Container”(容器),而是一个或多个共用一个单独“Container”(容器)的“Connectors”组合(因此,应用程序在容器中可见)。通常,这个容器是一个“Engine”(引擎),但这不是必须的。
一个“Connector”(连接器)代表一个请求被接收和应答所需要的端点。每个连
接器通过相关的“Container”(容器)处理请求。默认情况下,一个非SSL的HTTP/1.1的连接器被绑定在端口8080。在端口8443上定义一个SSL的HTTP/1.1的连接器。在端口8009上定义一个Coyote/JK2 AJP 1.3连接器。在8082端口上定义一个代理HTTP/1.1连接器 一个“Engine”(引擎)代表处理每个请求的入口点(在Catalina内)。这个Tomcat的标准独立引擎实现分析包含在请求中的HTTP头信息,并将请求传送到适当的主机或虚拟主机上。请求转储器值转储非常有用的通过Tomcat这个实例接收到的所有请求的,关于接收到的请求头和cookies,以及发送出的回应头和cookies的调试信息。如果你只在意一个特定的虚拟主机或者一个特定应用程序的请求,在对应的
与这个虚拟主机有关系所有上下文所共享的日志。默认情况下(使用FileLogger时),日志文件被创建在相对于$CATALINA_HOME目录下的logs目录下。如果你希望,你也可以给directory指定一个不同的路径。可以使用相对于$CATALINA_HOME的相对路径,也可以使用绝对路径。
4.2作为Struts的配置文件
在基于Struts框架的web应用中,有两个重要的配置文件: web.xml 和struts-config.xml 。web.xml文件用于配置web应用,如Servlet组件。struts-config.xml用于配置Struts框架,如各种Action组件。
那么配置文件的作用是什么呢?
当web容器启动时,会加载并解析web.xml文件,而web.xml文件是将所有的组件组合起来构成一个整体的文件。DTD对XML文档的格式做了定义,DTD把XML文档划分为元素,属性,实体。每一种XML文档都有独自的DTD文件,可以从网上下载。.如果把所有的组件比喻成人的四肢的话,那么web.xml文件相当于人大大脑,它将各个组件协调起来,完成一定的任务。
不过,web容器不支持动态加载web.xml文件,也就是说,一旦启动了web容器,那么它将读取web.xml文件,根据它来创建和配置各种Struts组件。如果在不关闭web容器的情况下修改web.xml文件,那么系统是不会自动更新web.xml文件的。若希望看到修改后的web.xml文件,则必须关闭web容器,然后再重新启动。
下面让我们来看一下web.xml的DTD
下面让我们先看看web.xml文件的构成。
PUBLIC “-//Sun Microsystems ,Inc.//DTD Web Application 2.2//EN”
“http://java.sun.com/j2ee/dtds/webapp_2_2.dtd”
>
…
…
(1) icon 子元素
它包含
(2)
它提供对父元素的短文字(short textual)描述信息,如下: (3)
它提供对父元素的完全(full-length textual)的描述信息,如下: (4)
它在一个web应用程序配置描述器中的出现标明了该web应用程序可以配置到分布式的servlet容器中。
(5)
context-param元素包含了web应用程序的servlet上下文(servlet context)的初始化参数的声明。
(6)
filter 元素声明了web应用程序里的一个filter。通过filter-name的值作为引用,在filter-mapping元素里,filter被映射到一个Servlet或者是一个URL范式上。通过FilterConfig接口,filter可以使用配置描述器所声明的初始化参数。
(7)
filter-mapping元素声明了在wen应用程序里面的filter映射。容器根据filter-mapping声明来决定哪些filter按照什么顺序应用于一个请求上。容器匹配按照正常方式访问一个Servlet的请求URI。然后根据所有filter-mapping的servlet-name或者是url-pattern来决定哪个filter可以应用到该URI之上。决定filter调用顺序的是适合该URI的filter-mapping列表中的filter顺序。
(8)
如果某个会话在一定时间内未被访问,服务器可以抛弃它以节省内存。
(9)
listener元素标明了一个web应用程序的listener bean的配置属性。
(10) < servlet>子元素
servlet元素的内容是一个servlet的数据声明。如果指定了一个jsp文件而且load-on-startup
元素出现了,则该JSP必须被预编译并载入。 (11)
servlet-mapping元素定义了一个在一个servlet和一个url范式之间的映射。
(12) < session-config>子元素
session-config元素定义了该web应用程序的session参数。
(13) < mime-mapping>子元素
mime-mapping 元素定义了一个在后缀名和mime类型之间的映射。
(14) < welcome-file-list>子元素
当客户访问Web应用时,如果仅仅给出Web应用的Root URL,,没有指定具体的文件名,Web容器会自动调用Web应用的欢迎文件。
(15)
error-page元素的内容是一个错误代码或者例外类型和该web应用程序里面的一个资源的路径的映射。
(16) < taglib>子元素
taglib元素是用来描述一个JSP标志库的。
(17)
resource-env-ref元素的内容是一个web应用程序对一个和一个web应用程序环境里的资源联合了
的管理对象的应用。它由以下几个组成:一个可选的描述,该资源的环境引用的名字,和一个该web 应用程序代码所需要的资源环境引用类型的指明。 (18) < resource-ref>子元素
resource-ref元素的内容是一个对web应用程序对一个外部资源的引用。它由一个可选的描述,一
个资源管理器连接工厂引用的名字,web应用程序代码中所需要的资源管理器连接工厂的类型指示, 应用程序或者容器的身份鉴证的类型和一个可选的从该资源所得连接得可共享性说明(其值为 Shareable或者是Unchareable)。 (19)
security-constaint元素用来在联合一个或多个web资源集合和安全约束时使用。
(20) < env-entry>子元素
env-entry元素的内容是一个web应用程序的环境入口(environment entry)的声明。该声明由
一个可选的描述,该环境入口的名字,和一个可选的值组成。如果值没有指定,则必须在配置的时 候提供一个。 (21)
ejb-ref元素是用来声明一个对enterprise bean的home的引用。该声明由以下几部分组成:
- 一个可选的说明(description) - 在引用了该enterprise bean的web应用程序的代码中所使用的该EJB的引用名。 - 所引用的enterprise bean所期望的类型。(the expected type of the referenced enterprise bean) - 所期望的所引用的enterprise bean的home和远程接口。(the expected home and remote interfaces of the referenced enterprise bean) - 可选的ejb-link信息,用来标明所引用的enterprise bean。 (22)
ejb-local-ref元素是用来声明一个对enterprise bean的本地 home的引用。该声明由以下几
部分组成: - 一个可选的说明(description) - 在引用了该enterprise bean的web应用程序的代码中所使用的该EJB的引用名。 - 所引用的enterprise bean所期望的类型。(the expected type of the referenced enterprise bean) - 所期望的所引用的enterprise bean的本地 home和本地接口。(the expected local home and local interfaces of the referenced enterprise bean) - 可选的ejb-link信息,用来标明所引用的enterprise bean。 当Struts框架启动时,会加载并解析struts-config.xml文件。Struts的核心是struts-config.xml配置文件,在这个文件里描述了所有的Struts组件。
Struts配置文件使得开发者可以灵活地组装和配置各个组件,提高了应用软件的可扩展性和灵活性,可以避免硬编码。
Struts配置文件是基于XML的。
Struts-config 的DTD
Servlet-config是Struts配置文件的根元素,和它对应的配置类为org.apache.struts.config.ModuleConfig类。
下面让我们先看看struts-config.xml文件的构成。
PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
注意:以上各元素的顺序是非常重要的,struts-config.xml配置文件必须按照这个顺序进行配置,否则在容器启动的时候就会出错。
struts-config.xml的子元素:
(1)data-sources
属性描述信息
Key 绑定在ServletContext上的DataSource实例的索引键,若不设定则缺省为Action.DATA_SOURCE_KEY,如果在应用程序中有多于一个的DataSource,则必须设置Key的值。
DriverClass 所用的JDBC驱动类(必须的)如:com.microsoft.jdbc.sqlserver.SQLServerDriver
url 所用的JDBC的URL(必须的)如:jdbc:microsoft:sqlserver://xg088:1433
MaxCount 同时打开的最大连结数,缺省值为2(可选的)
MinCount 同时打开的最小连结数,缺省值为1(可选的) User 连结到数据库的用户名(必须的) Password 连结到数据库的密码(必须的) Description 关于DataSource的描述信息(可选的) ReadOnly 如果设为true,则表示该连结是只读的,缺省为false。(可选的) LoginTimeout 创建连结的最大允许时间,以秒为单位。(可选的) AutoCommit 如果为true,则每次execute之后会强制回滚。缺省为true。(可选的) 举例说明: (2)配置form-bean type=”fully qualified class name of
FormBean"/>
例:
(3) 配置global-forwards
全局转发可以定义几个
path="context-relative path to targetted resource
"/>
除了name及path属性之外,还有一个redirect属性,如果redirect设为true的时候,则用HttpServletResponse.sendRedirect()方法,否则用RequestDispatcher.forward()方法,缺省为false。
注:如果为true,则用HttpServletResponse.sendRedirect()方法,此时存储在原来的HttpServletRequest中的值将会丢失。
例子:
(4)配置action-mappings
它可以定义几个子元素,它主要是定义Action实例到ActionServlet类中,语法如下:
< path="…">
type="…"
name="…"
scope=""
validate="…"
input="…">
属性及其描述信息如下:
属 性 描 述 信 息
path 指定请求访问Action的路径 (必须的) type 连结到本映射的Action的完整类名(可选的)
name 与本操作关联的Action Bean在
scope 指定ActionForm
Bean的作用域(session和request),缺省为session。(可选的),这里为request。
input 当Bean发生错误时返回的控制。(可选的)
className 指定一个调用这个Action类的ActionMapping类的全名。缺省用org.apache.struts.action.ActionMapping,(可选的)
forward 指定处理相应请求所对应的JSP页面。(可选的)
include 如果没有forward的时候,它起forward的作用。(可选的)
validate 若为true,则会调用ActionForm的validate()方法,执行表单验证。否则不调用,缺省为true。(可选的)
例子:
< path="/lookupAction">
type="wiley.LookupAction"
name="LookupForm"
scope="request"
validate="true"
input="/index.jsp">
(5) 配置RequestProcessor
在struts-config.xml文件中用
属性描述
processorClass 指定自定义的RequestProcessor类的全名 bufferSize 指定用来下载所用的缓存大小。缺省是4096字节
contentType 定义response文本类型,缺省是text/html
debug 定义当前系统的除错级别,缺省是0
locale
如果是true,则在用户的session中存放Locale对象,缺省为true
maxFileSize 指定下载文件最大的大小。缺省是250M
multipartClass
指定去代替org.apache.struts.upload.DiskMultipartRequestHandler类的类的全名
nocache
如果是true,则会关闭每个response的缓存功能。缺省是false
tempDir 指定上载文件所用的临时目录。缺省值由容器决定
例子:
①
②
contentType="text/html;charset=UTF-8"
debug="3"
locale="true"
nocache="true"
processorClass="org.apache.struts.action.RequestProcessor"/>
(6) 配置Message Resources
在struts-config.xml文件中用
属性描述
Parameter 给定资源文件全名 className 定义处理消息资源的类名的全名,缺省是org.apache.struts.config.MessageResourcesConfig
factory
定义MessageResourcesFactory类的全名,缺省是org.apache.struts.util.property.MessageResourcesFacotry
key
定义绑定在这个资源包中的ServletContext的属性主键,缺省值是Action.MESSAGES_KEY.
null 如果为true,则找不到消息key时,则返回null,缺省是true.
例子:
①
②
parameter="StorefrontMessageResources"
null="false"/>
key="IMAGE_RESOURCE_KEY"
parameter="StorefrontImageResources"
null="false"/>
注意:设定key的目的如下:
bundle="IMAGE_RESOURCE_KEY"
pageKey="navbar.home.image"
width="125" height="15" border="0"/>
这里说明要到StorefrontImageResources.properties资源文件中找主键值是”navbar.home.image”所对应的值。
这里StorefrontImageResources.properties的内容如下:
……
navbar.home.image=/images/home.gif
navbar.home.image.alt=Home
……
此处navbar.home.image.alt说明的和
(7) 配置Plug-in
也可如下:
上面主要是讲了Struts的两个配置文件web.xml 和struts-config.xml
。通过分析,我们发现配置文件是这个Struts的核心,通过[配置文件,原来松散的结构就变成系统的结构。
4.3 作为Hibernate的配置文件
Hibernate的配置文件有两种:hibernate.properties和hibernate.cfg.xml
。
先来看看hibernate.properties和hibernate.cfg.xml之间的对应关系:
PUBLIC “-//Hibernate//Hibernate Configuration
DTD//EN”
“http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd”>
Net.sf.hibernate.dialect.MySQLDialect
相当于hibernate.properties中的
hibernate.dialect net.sf.hibernate.dialect.MySQLDialect;
这里我们重点来介绍Hibernate.cfg.xml.
PUBLIC"-//Hibernate/HibernateConfigurationDTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
举个例子:
PUBLIC"-//Hibernate/HibernateConfigurationDTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
我们关闭了SQL命令的log,告诉Hibernate使用哪种SQL数据库方言(dialet),还有如何得到JDBC连接(通过声明数据源池绑定的JNDI地址)。方言是必需的,因为不同的数据库都和SQL
"标准"有一些出入。Hibernate会替你照管这些差异之处,发行包包含了所有主流的商业和开放源代码数据库的方言。
SessionFactory是Hibernate的概念,对应一个数据存储源,如果有多个数据库,可以创建多个XML配置文件,也在你的程序中创建多个Configuration和SessionFactory对象。
在hibernate.cfg.xml中的最后一个元素声明了Cat.hbm.xml是一个Hibernate
XML映射文件,对应持久化类Cat。这个文件包含了把POJO类映射到数据库表(或多个数据库表)的元数据。
4.4 作为Spring的配置文件
在Spring
Framework的WEB-INF中存在两个配置文件:web.xml和Config.xml。当Tomcat初始化Spring时,会加载并解析web.xml文件,而web.xml文件是将所有的组件组合起来。
和Struts框架类似,web容器不支持动态加载web.xml文件,也就是说,一旦启动了web容器,那么它将读取web.xml文件,然后根据DTD来解析web.xml文件。如果在不关闭web容器的情况下修改web.xml文件,那么系统是不会自动更新web.xml文件的。若希望看到修改后的web.xml文件,则必须关闭web容器,然后再重新启动。
这里的Config.xml和Struts框架中的struts-config.xml类似的作用。不再赘述。
下面看看一个例子:
web.xml
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
contextConfigLocation
/WEB-INF/Config.xml
Config.xml
"http://www.springframework.org/dtd/spring-beans.dtd">
了解Spring应用程序应当从配置文件开始,它显示了主要的bean以及应用程序如何将它们组合在一起。Spring配置文件在应用程序上下文中定义bean。将上下文看作是收集应用程序指定资源的一种便利方式。
这里的web.xml与Struts框架中web.xml一样,它们使用相同的DTD。Config.xml中根元素为beans,它可以有一个或者多个bean子元素,每个都有一个或者多个property子元素。
看来Struts框架和Spring FrameWork的配置文件从本质上来说是一样的。
4.5 小结 若XML作为web容器的配置文件,它是放在WEB-INF文件目录下的web.xml文件,将各个组件装配成一个大型复杂的软件,协调各组件间的工作。这里的组件是无法完成单独功能的单元,类似于模块。如果web应用在Struts框架,Spring
FrameWork或者Hibernate中,那么还要配置Config.xml文件。具体的配置文件为: struts-config.xml,spring
Config.xml ,hibernate.cfg.xml。
使用XML作为配置文件很复杂,但是,我们为什么要使用呢?
在大型并且复杂的项目中,使用传统的一个大应用程序,运行效率固然好于分布式系统,但是它的可维护性和复用能力大大下降,从而带来宽展上的麻烦。但是,使用分布式系统,整个应用程序是由一系列组件构成的,便于维护和复用。随着软件系统的复杂和升级,分布式带来更大的潜在价值。而将各组件协调起来一起工作的就是配置文件。目前,大部分的配置文件是用XML编写的有些是使用properties文件(比如hibernate.properties),但是使用properties文件没有XML文件灵活和功能强大,从发展趋势上来看,最终所有的配置文件都要基于XML编写。
至于小型项目,从开发复杂性和产品的复用上来讲,一般还是不提倡使用带有配置文件的分布式技术,显得有些大材小用。如果考虑了以后会升级为复杂的系统的话,当然也可以使用分布式模式(如J2EE模式),那么配置文件就是真个系统的灵魂,一定要花时间和精力编写和调试。
用XML的最大的好处是当你的配置文件中并非一行一行独立的配置项,而是一组一组的,每组还不一样,这个时候好处就多了,你如果自己去控制他们之间的逻辑,肯定会很复杂。但是如果你用XML就简单多了。还有XML它是一种通用的工具,它可以做任何事。就像字典一样,我们拿字典来查字,字典事什么,工具而已,XML也是一样,你可以用XML组合封装成各种各样的东西,甚至协议。
分布式技术存在的主要问题是效率。因为当容器(或者框架)启动的时候,它会读取XML配置文件到内存中。这需要花时间。这个配置文件一直存在在内存中,直到容器关闭为止,虽然XML配置文件代码量不是太大,但是长期占有内存,使得内存的使用效率下降。计算机寻找DTD来解析XML配置文件也需要花时间,所以从时间和效率来分析,分布式系统就不是很好。但是对于大型项目来说,牺牲一些时间和效率换来系统的可扩展性和可维护性是值得的。
5 XML在分布式技术的映射应用
5.1 XML在Struts中的映射作用
再回头看Struts的web-app配置文件,其中有3个映射子元素:filter-mapping,servlet-mapping,mime-mapping。
filter-mapping元素声明了在web应用程序里面的filter映射。filter-mapping规定了请求URI到filter的映射。
servlet-mapping元素定义了一个在一个servlet和一个url范式之间的映射。
mime-mapping元素定义了一个在后缀名和mime类型之间的映射。
它们都是web-app中存在的映射。
在Struts的struts-config.xml配置文件中,其中有一个映射子元素:action-mappings。
它的语法如下:
< path="…">
type="…"
name="…"
scope=""
validate="…"
input="…">
举一个Struts的例子来说:
< path="/lookupAction">
type="wiley.LookupAction"
name="LookupForm"
scope="request"
validate="true"
input="/index.jsp">
在这个例子中,从路径为/lookupAction访问name叫做LookupForm的wiley.LookupAction类型的文件,若成功通过验证,则映射到路径为/quote.jsp,name叫做success的文件;若未成功通过验证,则映射到路径为/index.jsp
,name叫做failure的文件。这里存在着name叫做LookupForm文件到name叫做success(或者failure)的文件之间的映射。
5.2 XML在Hibernate中的映射作用。
在Hibernate中,XML文件除了可以做配置文件外,还大量地以映射作用出现。
下面看一下Hibernate的映射文件的DTD
Sql-query*)>
具体地,我们举出一个Hibernate的例子:
“http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd”>
在这个例子中,hibernate-mapping是根元素,它可以有一个或多个class子元素。在每个class子元素中,它的属性总会出现name和table。name是对象,table则是数据库表。class子元素可以有自己的子元素,比如property子元素,它必须有name/
column出现,其中name是对象类,column是数据库表的属性。这样,就将对象和数据库表一一映射起来。
5.3 XML在Spring FrameWork中的映射作用
由于Spring
FrameWork的web.xml与Struts框架中web.xml一样,它在配置文件web-app同样也具有3个映射子元素:filter-mapping,servlet-mapping,mime-mapping。这里不再赘述。
在Spring FrameWork的Config.xml中也有映射作用出现。
5.4 小结
XML作为映射作用大多都出现在配置文件中,一般以
-mapping出现,理论上,使用XML可以建立任何两个对象之间的映射。作为独立的映射文件主要出现在Hibernate中。大量地使用了从对象到数据库表之间的映射,从而使得Hibernate成为了持久化层和模型层之间的中间件。可以想象使用基于XML的中间件的应用会越来越流行。
6 结束语
通过对Struts, hibernate,
spring中出现的XML研究,我们发现它在分布式系统中主要有两个作用:配置文件和映射作用。
7 参考文献
《深入浅出XML》 人民邮电出版社 老虎工作室 贾小珠 宋立智 赵玮 等 2001年第一版
《精通Struts:基于MVC的Java Web 设计与开发》电子工业出版社 孙卫琴
2004年第一版
《精通Hibernate: Java对象持久化技术祥解》电子工业出版社 孙卫琴 2005年第一版
8 致谢
在论文编写过程中,得到了复旦大学软件学院孙卫琴老师,赵卫东老师,以及数位同学的帮助,在此表示由衷的感谢!
|
||||||||||||
|
||||||||||||
| 教程录入:YesHack 责任编辑:YesHack.Com | ||||||||||||
您现在的位置: