1.3 XML和Java EE

如前所述,Java是跨平台的编程语言,而XML是跨平台的数据交换格式,它们是“天生的一对”,因此Java和XML之间一直有着千丝万缕的联系,尤其在Java EE方面,XML文档更是必不可少的工具。

1.3.1 配置描述

从JSP开始,Java EE的学习者和开发者就开始广泛接触各种配置文件,通常最早接触的是web.xml配置文件,它是所有Java Web应用所必需的配置文件。开发者在开发了Servlet、Filter和Listener之后,必须在web.xml文件中配置它们。

在web.xml文件中配置Servlet、Filter和Listener也体现了XML的作用:开发者开发了Servlet、Filter和Listener类之后,Web应用并不知道去加载它们,就算知道加载Servlet、Filter等,也不知道如何为它们定义URL。此时可以在web.xml文件中增加如下配置片段:

alt

上面的配置文件中包含了<servlet…/>和<servlet-mapping…/>两个元素,其中的<servlet…/>元素里又包含<serlvet-name…/>和<servlet-class…/>两个子元素,它们定义了一个名为firstServlet的Servlet,该Servlet的实现类是lee.FirstServlet;<servlet-mapping…/>元素里则包含了<servlet-name…/>和<url-pattern…/>两个子元素,它们定义了名为firstServlet的映射的URL为/firstServlet。提供了上面的配置文件之后,Servlet依然不会生效,还需要重启Tomcat或重新加载该Web应用,这样做的目的是让Tomcat读取该web.xml文件,并根据其中的配置信息来启用该Servlet。


alt提示

关于JSP、Servlet、Filter和Listener的Java Web编程的知识,请参考疯狂Java体系的《轻量级Java EE企业应用实战》第3版一书。


由上面的介绍可以看出,web.xml文件的作用就是为各Web组件(包括JSP、Servlet、Filter和Listener)指定必要的信息。


alt学生提问:指定Web组件的配置信息是不是只能采用web.xml文件呢?


答:Web应用的开发者并不清楚该Web应用将要部署在怎样的平台上,也不清楚将要把它部署到怎样的Web服务器上,但他们必须向Web服务器传递必要的信息,以保证Web服务器能正确部署这些Web组件,这时候必然需要选择一个平台无关的数据交换格式来指定这些配置信息。在这样的需求下,必然会使用XML文件来指定Web组件的配置信息。当然,后来Rails框架改变了这种传统的观点:Rails认为服务器可以按约定加载指定的Web组件,并按约定来部署它们,这样就避免了使用XML配置文件。

alt


由于Java应用可能需要部署在各种不同的平台上,比如部署在各种不同的Web服务器、应用服务器之中,因此通常会采用大量XML文件作为配置文件。不仅如此,各种Java框架也会采用XML文件进行配置管理。

对于Struts 1.x框架而言,它总是需要提供一个或多个配置文件,Struts 1.x默认的配置文件是struts-config.xml文件,该配置文件负责管理Struts 1.x中的Action、ActionForm、Forward映射和异常映射等。

对于Struts 2.x框架而言,它同样需要提供一个或多个配置文件(即使采用基于Convention插件的“零配置”进行开发,Struts 2.x框架本身也包含一个struts-default.xml文件),Struts 2.x默认的配置文件是struts.xml文件,该配置文件同样负责管理Struts 2.x中的Action、Result映射和异常映射等。

对于Hibernate框架而言,通常需要提供两个配置文件:一个是hibernate.cfg.xml文件,负责管理创建数据连接池的必要信息;另一个是名为xxx.hbm.xml的映射文件,负责管理持久化类和数据表之间的映射关系。

对于Spring框架而言,XML配置文件尤为重要,Spring IoC容器的核心思想就是把Java对象的依赖关系放在XML文件而不是Java代码中进行管理,这样就可将类之间的耦合程度降下来,从而可以更好地提高系统的可伸缩性。

无论如何,当需要向Java应用指定额外信息时,XML配置文件总是各种Java技术和Java框架的首选,这样可以保证不管在怎样的平台或服务器上,Java应用都总是可以准确地获得这些额外信息。

1.3.2 简化的数据交换

从严格意义上讲,配置描述文件其实也是数据交换的一种,也是将需要指定的额外信息传入Java应用程序。不过此处所指的数据交换并不是配置文件,而是更为广泛的使用场景。

现在假设Linux平台上的某个程序需要把数据传给Windows平台上的另一个程序,此时我们可以考虑使用XML作为数据交换的载体,采用图1.4所示方式进行数据交换。

alt

图1.4 使用XML作为数据交换格式

从图1.4中可以看出,由于不同计算机系统使用不兼容的格式来保存数据,从而导致不同系统之间数据交换存在障碍,但XML以纯文本格式对数据进行存储,因此提供了一种独立于软件和硬件的数据交换方式。

通过使用XML文档,开发人员可以在不兼容的系统之间交换数据,从而轻松解决不兼容系统之间数据交换的这个难题。

从图1.4中可以看出,任何系统都可以使用XML来保存程序状态,因此XML文档还是一种轻量级的持久化机制。XML文档以文本格式保存数据,这使得XML可以在不损失数据的情况下,更容易扩展或升级到新操作系统或新应用程序。

1.3.3 Web Service

Web Service是Java EE应用的一个重要方面,Web Service使用基于XML的消息处理作为数据通信方式,消除了不同组件模型、操作系统和编程语言之间存在的差异,使异构系统能作为单个计算机网络协同运行。简而言之,Web Service是异构系统整合的重要方式。

不仅如此,当前一些前沿的技术概念,如SOA(面向服务的架构)和云计算等,都意图整合不同平台、不同系统的软件服务,而普通软件用户只需按通用规则使用这些软件服务即可。这些前沿的技术概念底层大都会选择以Web Service作为支撑。

Web Service建立在一些通用协议的基础上,如SOAP、WSDL和UDDI等,而这些协议都需要以XML作为支撑。