springmvc集成表现层.docx

上传人:b****3 文档编号:27456809 上传时间:2023-07-01 格式:DOCX 页数:37 大小:33.05KB
下载 相关 举报
springmvc集成表现层.docx_第1页
第1页 / 共37页
springmvc集成表现层.docx_第2页
第2页 / 共37页
springmvc集成表现层.docx_第3页
第3页 / 共37页
springmvc集成表现层.docx_第4页
第4页 / 共37页
springmvc集成表现层.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

springmvc集成表现层.docx

《springmvc集成表现层.docx》由会员分享,可在线阅读,更多相关《springmvc集成表现层.docx(37页珍藏版)》请在冰豆网上搜索。

springmvc集成表现层.docx

springmvc集成表现层

主题:

springmvc集成表现层

 

内容部分:

Spring之所以出色的一个原因就是将表现层从MVC的框架中分离出来。

例如,通过配置就可以让Velocity或者XSLT来代替已经存在的JSP页面。

本章介绍和Spring集成的一些主流表现层技术,并简要描述如何集成新的表现层。

这里假设你已经熟悉第12.5节“视图与视图解析”,那里介绍了将表现层集成到MVC框架中的基本知识。

和JSP&JSTL一起使用Spring

Spring为JSP和JSTL提供了一组方案(顺便说一下,它们都是最流行的表现层技术之一)。

使用JSP或JSTL需要使用定义在WebApplicationContext里的标准的视图解析器。

此外,你当然也需要写一些JSP页面来显示页面。

这里描述一些Spring为方便JSP开发而提供的额外功能。

视图解析器

就象和Spring集成的其他表现层技术一样,对于JSP页面你需要一个视图解析器来解析。

最常用的JSP视图解析器是InternalResourceViewResolver和ResourceBundleViewResolver。

它们被定义在WebApplicationContext里:

#TheResourceBundleViewResolver:

views

#Andasamplepropertiesfileisuses(views.propertiesinWEB-INF/classes):

welcome.class=org.springframework.web.servlet.view.JstlView

welcome.url=/WEB-INF/jsp/welcome.jsp

productList.class=org.springframework.web.servlet.view.JstlView

productList.url=/WEB-INF/jsp/productlist.jsp

你可以看到ResourceBundleViewResolver需要一个属性文件来把视图名称映射到1)类和2)URL。

通过ResolverBundleViewResolver,你可以用一个解析器来解析两种类型的视图。

org.springframework.web.servlet.view.JstlView

/WEB-INF/jsp/

.jsp

InternalResourceBundleViewResolver可以配置成使用JSP页面。

作为好的实现方式,强烈推荐你将JSP文件放在WEB-INF下的一个目录中,这样客户端就不会直接访问到它们。

普通JSP页面和JSTL

当你使用Java标准标签库(JavaStandardTagLibrary)时,你必须使用一个特殊的类,JstlView,因为JSTL在使用象I18N这样的功能前需要一些准备工作。

其他有助于开发的标签

正如前面几章所提到的,Spring可以将请求参数绑定到命令对象上。

为了更容易地开发含有数据绑定的JSP页面,Spring定义了一些专门的标签。

所有的Spring标签都有HTML转义功能来决定是否使用字符转义。

标签库描述符(TLD)和库本身都包含在spring.jar里。

Tiles象其他表现层技术一样,可以集成在使用Spring的Web应用中。

下面大致描述一下过程。

所需的库文件

为了使用Tiles,你必须将需要的库文件包含在你的项目中。

下面列出了这些库文件。

strutsversion1.1

commons-beanutils

commons-digester

commons-logging

commons-lang

这些文件以从Spring中获得。

如何集成Tiles

为了使用Tiles,你必须用定义文件(definitionfile)来配置它(有关于定义(definition)和其他Tiles概念,请参考http:

//jakarta.apache.org/struts)。

在Spring中,这些都可以使用TilesConfigurer在完成。

下面是ApplicationContext配置的片段。

org.apache.struts.tiles.xmlDefinition.I18nFactorySet

/WEB-INF/defs/general.xml

/WEB-INF/defs/widgets.xml

/WEB-INF/defs/administrator.xml

/WEB-INF/defs/customer.xml

/WEB-INF/defs/templates.xml

你可以看到,有五个文件包含定义,它们都存放在WEB-INF/defs目录中。

当初始化WebApplicationContext时,这些文件被读取,并且初始化由factoryClass属性指定的定义工厂(definitonsfactory)。

在这之后,你的SpringWeb应用就可以使用在定义文件中的tilesincludes内容。

为了使用这些,你必须得和其他表现层技术一样有一个ViewResolver。

有两种可以选择,InternalResourceViewResolver和ResourceBundleViewResolver。

InternalResourceViewResolver

InternalResourceViewResolver用viewClass属性指定的类实例化每个它解析的视图。

ResourceBundleViewResolver

必须提供给ResourceBundleViewResolver一个包含viewnames和viewclassess属性的属性文件。

views

 

...

welcomeView.class=org.springframework.web.servlet.view.tiles.TilesView

welcomeView.url=welcome(thisisthenameofadefinition

vetsView.class=org.springframework.web.servlet.view.tiles.TilesView

vetsView.url=vetsView(again,thisisthenameofadefinition

findOwnersForm.class=org.springframework.web.servlet.view.JstlView

findOwnersForm.url=/WEB-INF/jsp/findOwners.jsp

...

你可以发现,当使用ResourceBundleViewResolver,你可以使用不同的表现层技术。

Velocity是Jakarta项目开发的表现层技术。

有关与Velocity的详细资料可以在http:

//jakarta.apache.org/velocity找到。

这一部分介绍如何集成Velocity到Spring中。

所需的库文件

在使用Velocity之前,你需要在你的Web应用中包含两个库文件,velocity-1.x.x.jar和commons-collections.jar。

一般它们放在WEB-INF/lib目录下,以保证J2EE服务器能够找到,同时把它们加到你的classpath中。

当然假设你也已经把spring.jar放在你的WEB-INF/lib目录下!

最新的Velocity和commnonscollections的稳定版本由Spring框架提供,可以从/lib/velocity和/lib/jakarta-commons目录下获取。

分发器(DispatcherServlet)上下文

你的SpringDispatcherServlet配置文件(一般是WEB-INF/[servletname]-servlet.xml)应该包含一个视图解析器的bean定义。

我们也可以再加一个bean来配置Velocity环境。

我指定DispatcherServlet的名字为‘frontcontroller’,所以配置文件的名字反映了DispatcherServlet的名字

下面的示例代码显示了不同的配置文件

--===========================================================-->

--Viewresolver.Requiredbywebframework.-->

--===========================================================-->

--

ViewresolverscanbeconfiguredwithResourceBundlesorXMLfiles.Ifyouneed

differentviewresolvingbasedonLocale,youhavetousetheresourcebundleresolver,

otherwiseitmakesnodifference.IsimplyprefertokeeptheSpringconfigsand

contextsinXML.SeeSpringdocumentationformoreinfo.

-->

true

/WEB-INF/frontcontroller-views.xml

--===========================================================-->

--Velocityconfigurer.-->

--===========================================================-->

--

ThenextbeansetsuptheVelocityenvironmentforusbasedonapropertiesfile,the

locationofwhichissuppliedhereandsetonthebeaninthenormalway.Myexampleshows

thatthebeanwillexpecttofindourvelocity.propertiesfileintherootofthe

WEB-INFfolder.Infact,sincethisisthedefaultlocation,it'snotnecessaryforme

tosupplyithere.Anotherpossibilitywouldbetospecifyallofthevelocity

propertieshereinapropertysetcalled"velocityProperties"anddispensewiththe

actualvelocity.propertiesfilealtogether.

-->

id="velocityConfig"

class="org.springframework.web.servlet.view.velocity.VelocityConfigurer"

singleton="true">

/WEB-INF/velocity.properties

Velocity.properties

 

 

 

这个属性文件用来配置Velocity,属性的值会传递给Velocity运行时。

其中只有一些属性是必须的,其余大部分属性是可选的-详细可以查看Velocity的文档。

这里,我仅仅演示在Spring的MVC框架下运行Velocity所必需的内容。

模版位置

大部分属性值和Velocity模版的位置有关。

Velocity模版可以通过classpath或文件系统载入,两种方式都有各自的优缺点。

从classpath载入具有很好的移植性,可以在所有的目标服务器上工作,但你会发现在这种方式中,模版文件会把你的java包结构弄乱(除非你为模版建立独立树结构)。

从classpath载入的另一个重要缺点是在开发过程中,在源文件目录中的任何改动常常会引起WEB-INF/classes下资源文件的刷新,这将导致开发服务器重启你的应用(代码的即时部署)。

这可能是令人无法忍受的。

一旦完成大部分的开发工作,你可以把模版文件存在在jar中,并把它放在WEB-INF/lib目录下中。

velocity.properties示例

这个例子将Velocity模版存放在文件系统的WEB-INF下,客户浏览器是无法直接访问到它们的,这样也不会因为你开发过程中修改它们而引起Web应用重启。

它的缺点是目标服务器可能不能正确解析指向这些文件的路径,尤其是当目标服务器没有把WAR模块展开在文件系统中。

Tomcat4.1.x/5.x,WebSphere4.x和WebSphere5.x支持通过文件系统载入模版。

但是你在其他类型的服务器上可能会有所不同。

#

#velocity.properties-exampleconfiguration

#

 

#uncommentthenexttwolinestoloadtemplatesfromthe

#classpath(i.e.WEB-INF/classes)

#resource.loader=class

#class.resource.loader.class=org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader

#commentthenexttwolinestostoploadingtemplatesfromthe

#filesystem

resource.loader=file

file.resource.loader.class=org.apache.velocity.runtime.resource.loader.FileResourceLoader

 

#additionalconfigforfilesystemloaderonly..tellVelocitywheretheroot

#directoryisfortemplateloading.Youcandefinemultiplerootdirectories

#ifyouwish,Ijustusetheonehere.Seethetextbelowforanoteabout

#the${webapp.root}

file.resource.loader.path=${webapp.root}/WEB-INF/velocity

 

#cachingshouldbe'true'inproductionsystems,'false'isadevelopment

#settingonly.Changeto'class.resource.loader.cache=false'forclasspath

#loading

file.resource.loader.cache=false

#overridedefaultloggingtodirectvelocitymessages

#toourapplicationlogforexample.Assumesyouhave

#definedalog4j.propertiesfile

runtime.log.logsystem.log4j.category=com.mycompany.myapplication

Web应用的根目录标记

上面在配置文件资源载入时,使用一个标记${webapp.root}来代表Web应用在文件系统中的根目录。

这个标记在作为属性提供给Velocity之前,会被Spring的代码解释成和操作系统有关的实际路径。

这种文件资源的载入方式在一些服务器中是不可移植的。

如果你认为可移植性很重要,可以给VelocityConfigurer定义不同的“appRootMarker”,来修改根目录标记本身的名字。

Spring的文档对此有详细表述。

另一种可选的属性规范

作为选择,你可以用下面的内嵌属性来代替Velocity配置bean中的“configLocation”属性,从而直接指定Velocity属性。

file

org.apache.velocity.runtime.resource.loader.

FileResourceLoader

${webapp.root}/WEB-INF/velocity

false

缺省配置(文件资源载入)

注意从Spring1.0-m4起,你可以不使用属性文件或内嵌属性来定义模版文件的载入,你可以把下面的属性放在Velocity配置bean中。

/WEB-INF/velocity/

 

视图配置

配置的最后一步是定义一些视图,这些视图和Velocity模版一起被显示。

视图被定义在Spring上下文文件中。

正如前面提到的,这个例子使用XML文件定义视图bean,但是也可以使用属性文件(ResourceBundle)来定义。

视图定义文件的名字被定义在

WEB-INF/frontcontroller-servlet.xml文件的ViewResolver的bean中。

--

Viewscanbehierarchical,here'sanexampleofaparentviewthat

simplydefinestheclasstouseandsetsadefaulttemplatewhich

willnormallybeoverriddeninchilddefinitions.

-->

mainTemplate.vm

--

-Themainviewforthehomepage.Sincewedon'tsetatemplatename,thevalue

fromtheparentisused.

-->

MyVelocityHomePage

--

-Anotherview-thisonedefinesadifferentvelocitytemplate.

-->

se

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 英语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1