Spring MVC框架的高级配置_第1页
Spring MVC框架的高级配置_第2页
Spring MVC框架的高级配置_第3页
Spring MVC框架的高级配置_第4页
Spring MVC框架的高级配置_第5页
已阅读5页,还剩11页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文将为您供应关于SpringMVC框架的配置技巧,以帮助管理基

于Spring的web应用程序的多个实例。本配置管理主题常被学术

界所忽视,但是,这对于现实的web开发尤为重要。本主题并不干

脆关联任何具体的技术,因此,我们将从最基本的概念起先对这个问

题进行说明。下面,我们将依据SpringMVC框架,为基于本技术

开发的项目供应一系列的解决方案。

Spring配置

人们常常会在一台以上的主机上配置一种Web应用程序。例如,

在生产中,一个网站可能只有一个实例。除了此实例外,开发人员可

以在用于开发的机器上配置其他的(开发)实例。也可以在公司(机

构)内部的本地开发服务器上维护其他应用程序装置,这将让您受益

匪浅。该实例的目的是使Web设计者可以获得有质量保证的材料,

并为须要为应用程序供应文件资料的人供应准入。

大家都知道,即使是最简洁的场景,也须要安装、配置和维护三

个实例。而对于位于不同地理位置的团队来说,要从事这样的项目便

更加困难。对于任何不是特殊简洁的Web应用程序项目,都须要多

名开发人员来安装项目装置和本地设置以及运行单元测试的装置等。

很多组织都将自己开发的产品作为Web应用程序。我们可以在

很多产品中发觉这种状况,例如电子商务系统、内容管理系统

(CMS),以及博客发布平台等。这类产品可在多个服务器中进行

部署。对于胜利的多用途Web应用程序来说,他们的开发人员必须

要保证他们的应用程序便于安装,并且能够与其他Web应用程序完

备集成。经过上述探讨之后,我们应当明白,作为本文主题的应用程

序配置是通用Web应用程序项目开发人员所须要解决的重要问题之

O

诸如CVS或Subversion之类的版本限制系统是开发组织运用

的一种标准工具。这种工具代表了一些组织的中心源代码版本库,它

们被用于保持源代码的有序。用户可以跟踪应用程序源代码的变更,

显示不同版本的区分,并可以确定项目分支。而且,它们使得在应用

程序部署中进行部分更新成为可能。

很明显,版本限制系统软件是跟踪源代码所必需的,它对于解决

应用程序配置问题有特别大的帮助。在本文中,我们将不会把重点放

在版本限制系统上,因为这方面已经有很多相关的材料了。在此,我

们将关注版本限制问题中的一个小话题:如何使Web应用程序的配

置更加便捷(尤其是运用SpringMVC框架编写的Web应用程序)。

问题是:我们在此探讨的是一种什么样的配置?任何Web应用

程序都须要一些资源,这些资源通常都是其所运行的服务器所特有

的,例如数据库URL,发送电子邮件的SMTP服务器,以及包含专

用软件文件的文件夹等。这样的设置应当集中,从而使应用程序配置

更加简洁。

但是,这只是这个问题最简洁的一种版本。有时候,在应用程序

开发中须要更加困难的配置。这意味着,必需将各次部署中的不同

Bean连接起来,而这会使问题更加困难。

这些应用程序配置问题的解决方案有诸多优势,包括:简化应用

程序的安装和配置过程,使源代码版本限制更加简便,削减源代码版

本库中的冲突现象。下面,我们将通过示例具体探讨这个话题。

问题

我们首先来演示一下上文所提到的最简洁的版本。在这一•场景

中,我们希望在应用程序部署中变更的是简洁的配置参数,例如链接、

密码等。假如您曾经运用SpringMVC框架开发过Web应用程序,

那么您应当知道这里将用到的两个配置文件:

•/WEB-INF/applicationContext.xml,它让您可以配置

Bean,或者显示应用程序上下文。通过这个文件,您可以定义

自己的业务逻辑Bean、资源以及其他可以与Web端口相关联

的全部Beano

•/WEB-INF/[servlet-name]-servlet.xml,它被用于配置

Web层、视图解析器、限制相、校验器以及其他全部MVC框

架中必需的Beano[servlet-name]指的是在web.xml部

署描述符中定义的Springdispatcherservlet的名称。

那么问题在哪儿呢?问题就出在applicationcontext.xml中

将包括一些特定于主机的Bean定义。其中,最明显的一个示例就是

包含了JDBC连接信息的bean,但是任何一种略微困难些的应用程

序都有十几个类似的Bean。看一下下面的示例:

er</value>

</property>

<propertyname="urT>

<value>jdbc:postgresql://localhost/test</valu

e>

</property>

<propertyname=,,usernamen>

<value>postgres</value>

</property>

<propertyname="password">

<valuex/value>

</property>

</bean>

这个解决方案的问题在于对applicationcontext:.xml文件的

维护。对于初学者来说,设想一下,项目放在源代码版本限制系统中,

例如CVS。下面,假设您希望在网站中添加新的功能,那么就须要

在应用程序上下文定义中添加额外的Bean定义。问题是如何在生产

服务器上体现这些变更。

通常状况下,应用程序的本地实例不会与活动站点运用同样的数

据库,因止匕applicationcontext.xml文件将包括让您能够访问本地

数据库的设置。当您想提交在源代码版本库中的变更时,就须要留意

这些特定于主机属性的同步性。版本库中的文件最终可能运用本地设

置中的配置。假如想在生产服务器上更新配置,就必需手动同步这些

属性的值。这是特别枯燥的任务,而且还特别简洁出错。

对于应用程序的每个实例来说,这个问题更加重要。假如有三位

开发人员正在运用代码段基址,而且他们运用的是本地的数据库。当

您提交更改的时候,他们每个人在本地服务器上更新源代码的时候都

必需特别谨慎。他们会手动同步这些更改,然后提交他们的工作C这

样一来,版本限制系统对于这些配置文件来说已经毫无用处。假如曾

经运用过SpringMVC,那么您应当知道applicationcontext.xml

是应用程序中的关键组件,因为是它将全皆的东西粘合在一起。所以,

我们须要一种机制来帮助使应用程序中各项保持有序,这点特别重

要。

正如前面所提到的,这是您可能遇到的较简洁的配置问题。更难

的问题出现在当须要在不同服务器中进行不同的Bean连接的时候。

这类问题常会出现在日常软件开发任务中。例如,假如您的产品有一

个客户身份验证模块,可以对来自关系数据库或LDAP服务器中的用

户进行身份验证。自然,这一身份验证模块可以运用抽象了特定版本

库的Bean进行配置。假如您想变更不同应用程序部署中验证用户的

方式,就须要在applicationcontext.xml文件中进彳亍不同的Bean

连接。这种配置问题常见于在部署中有可配置特性的全部应用程序。

在下文中,我们将探讨这两种配置问题。首先我们会关注同步的

Bean属性问题及其解决方案,接下来,我们会探讨更加困难的同步

Bean连接问题。

解决方案

同步Bean属性

这个问题的一种可行的解决方案是将全部特定于主机的参数都

放到一般的Java属性文件中,运用Spring的

PropertyPlaceHolderConfigurer》咨这些参数写入Bean属T生

中。

运用这一解决方案,我们可以生成如下的属性文件

(/WEB-INF/perties):

jdbc.driver=org.postgresql.Driver

jdbc.url=jdbc:postgresql://localhost/test

jdbc.user=postgres

jdbc.password=

我们的Bean配置如下:

ig.PropertyPlaceholderConfigurer">

<propertyname=,,location',>

<value>/WEB-INF/perties</value>

</property>

</bean>

<beanid=ndataSource"

class=,,org.springframework.jdbc.datasource.DriverManag

erDataSource">

<propertyname="driverClassName">

<value>${jdbc.driver)</value>

</property>

<propertyname=',url',>

<value>${jdbc.url}</value>

</property>

<propertyname="username">

<value>${jdbc.user></value>

</property>

<propertyname=npassword">

<value>${jdbc.password}</value>

</property>

</bean>

如上所述,我们定义了一个PropertyPlaceholderConfigurer

类的实例,并将其位置属性设置为我们的属性文件。该类被实现为

Bean工厂的后处理器,并将运用定义在文件中的属性来代替全部的

占位符(${...}value)o

利用这种技术,我们可以从applicationcontext.xml中移除全

部特定于主机的配置属性。通过这种方式,我们可以自由地为该文件

添力U新的Bean,而不必担忧特定于主机属性的同步性。这样可以简

化生产部署和维护。

同步性连接

上面的技术解决了第一个问题,可是假如您安排修改不同应用程

序部署之间的Bean连接,这一技术便不很适合。针对这一问题的一

个解决方案便是额外创建一个名为

applicationcontext-[hostname].xml的XML定义文件。其中

[hostname]是部署应用程序的主机的名称。例如,在本地的机器

上,这个文件通常名为applicationContext-localhost.xml,而

在部署时,它可能更名为

applicationContext-somehost.xmL

可以揣测,这一文件必需包括特定于某一主机的全部配置Bean。

在本文中,我们将假设datasourcebean定义将位于这类文件中,

而不是通用的applicationcontext.xml定义。当然,这种机制与前

者并非冲突,但是为了更加简洁明白,我们将只关注这种方法。

既然我们已经有了特定的配置,下面我们就来探讨一下如何将其

整合到整个SpringMVC配置概念中。要达到这一目的,可以有很

多方法,我们将具体地一一说明。但首先,我们应当留意到,由于有

些Bean可能位于独立的配置文件中,因此在

applicationContext.xml中,全部对它们的局部弓I用都必需更换成

全局名称。

例如,如下引用:

<propertyname="someProperty">

<reflocal="someBean'7>

</property>

应更改为:

<propertyname="someProperty">

<refbean="someBeann/>

</property>

在这之后,我们有很多可以添加额外的资源以用于配置的方式。

其中最明显的就是运用〈importA标签将这一额外资源包含在

dpplicationContext.xml配置文件中。运用时,要将该标签放在

applicationContext.xml文件开头。例如:

<import

resource="applicationContext-somehost.xml7>

现在,在独立的XML定义文件和一般的应用程序上下文定义文

件中的全部通用Bean定义都有了特定于主机的连接。由于大多数的

Bean都不是特定于主机的,因此我们可以像处理Web应用程序中

的其他资源一样自由地处理applicationcontext.xml文件,并可以

通过合适的版本限制系统与其进行同步。

但是,上述方法也有肯定的弊端。假如您想保留不同XML文件

的不同配置,就仍旧必需担忧applicationcontext.xml的同步性,

因为资源的名称必需依据不同服务器进行更改。虽然与原有的解决方

案相比有了很大提高,只需更改文件名,但是这还是须要开发人员的

手动帮助。

由于与applicationcontext.xml相比,主机配置不需如此频繁

地进行更改,因此下一步便是将主机配置移动到web.xml文件中(假

如可能的话)。幸运的是,我们有一个可用的解决方案。看一下下面

关于web.xml配置的片断:

<listener>

<listener-class>

org.springframework.web.context.ContextLoaderListe

ner

</listener-class>

</listener>

<context-param>

<param-name>contextConfigLocation</param-name

>

<param-value>

/WEB-INF/applicationContext.xml

/WEB-INF/applicationContext-somehost.xml

</param-value>

</context-param>

正如您所看到的,除了web.xml文件中常有的

ContextLoaderListener之外,我们还添加了

contextConfigLocation上下文参数配置。这一参数用于指示框架

查找这些配置文件的位置。假如这一参数被省略,则Spring就只能

到applicationcontext.xml中查找。这里我们也定义了特定于主机

的配置文件来运用。

利用这种方法,我们将全部特定于主矶的配置从

applicationContext.xml文件中移除,这样便减轻了其在不同应用

程序部署中的同步性。

假如这种方法成为您的新习惯,您还可以使其更加敏捷。通过遵

守下列指令,也可以将特定于主机的配置从web.xml文件中移除。

为此,须要创建特定于我们的应用程序上下文的类:

packagenet.nighttale.spring.util;

import.InetAddress;

import

org.springframework,web.context.support.XmlWebApplica

tionContext;

publicclassPerHostXmlWebApplicationContext

extendsXmlWebApplicationContext{

protectedString[]getDefaultConfigLocations(){

Stringhostname="localhost";

try{

hostname=

InetAddress.getLocalHost().getHostName();

}catch(Exceptione){

}

StringperHostConfiguration=

DEFAULT_CONFIG_LOCATION_PREFIX

+"applicationContext-"

+hostname

+DEFAULT_CONFIG_LOCATION_SUFFIX

Iogger.debug(

"Addingperhostconfigurationfile:"

+perHostConfiguration

);

if(getNamespace()!=null){

returnnewString[]{

DEFAULT_CONFIG_LOCATION_PREFIX

+getNamespace()

+DEFAULT_CONFIG_LOCATION_SUFFIX

,perHostConfiguration};

?

else{

returnnewString[]{

DEFAULT_CONFIG_LOCATION

,perHostConfiguration};

)

}

}

这个类拓展了Spring中常被作为默认值运用的

XmlWebApplicationContextoXmlWebApplicationContext类

将Web应用程序的配置从XML定义文件中复制过来。默认状况下,

它可以配置来自applicationcontext.xml和

[servlet-name]-servlet.xml文件中的应用程序。这个类执行的

惟一一项额外任务便是获得它所在的主机名称,并将

applicationContext-[hostname].xml文彳牛添力口到西己置文件列

表中。

为了运用这个类,我们须要对其进行编译,将其包含在类途径中,

并指示Spring框架运用它。前两步特别简洁,我们就不在此赘述。

我们可以指示Sping通过contextclass上下文参数来运用它。除

了web.xml文件中的原有配置,我们还可以添加下列内容:

<context-param>

<param-name>contextClass</param-name>

<param-value>

net.nighttale.spring,util.PerHostXmlWebApplicationCont

ext

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论