`
lym6520
  • 浏览: 705919 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

你的第一杯Web 2.0 —— 快速浏览jQuery、Spring MVC和XStream/Jett

    博客分类:
  • JAVA
阅读更多

不再有页面刷新:使用jQuery

相关厂商内容
你的第一杯Web 2.0 —— 快速浏览jQuery、Spring MV和XStream/Jettison

使用JSF、Ajax和Seam开发Portlets(2/3)

InfoQ中文站电子杂志《架构师》试刊第二期发布了

下载免费的 IBM DB2 Express-C 数据库

IDC:《软件商成长路线图》白皮书免费下载

相关赞助商

InfoQ中文站Java社区,关注企业Java社区的变化与创新,通过新闻、文章、视频访谈和演讲以及迷你书等为中国Java技术社区提供一流资讯。
在我参与创建的一些Web网站应用中,一直存在有对用户理所当然的抱歉:“哦,对不起,我不得不让你经受一些不必要的页面刷新。”哈,这就是我在今年年初听说jQuery后,我的脑子里一下闪过的念头。

jQuery是个强大而非侵入式的JavaScript库,但它的名字起得很差劲。它的简洁而高可读性的语法再次激发了我编写JavaScript代码的兴趣。它的非侵入性能让它只需要对既有代码做小小的修改,就能很容易为web应用添加一些丰富的功能——比如后台表单提交。当你工作在一个很大的代码库,或者扩展性的重构无法取得成效时,非侵入的特性显得尤其重要。我的老板不会给我四周的时间推倒重来,为一个已经存在的网站添加一些视觉效果。但我也许可以有四个小时的时间,而这对jQuery来说足够了。

作为一个简单的例子,我们假设有一个汽车搜索功能,它会基于一个交通工具型号来返回结果。向文本框输入文本,点击提交,然后显示结果。JSP看起来会是这样:
0

在用户输入名称并点击提交后,在页面刷新时整个屏幕会变白,然后就会显示出结果来。这不是一个好的用户体验。现在,让我们用jQuery来改善一下用户的体验,只刷新页面中那部分的确需要改变的部分。对这个既有页面所做的修改是:

  1. 把搜索表单和搜索结果分成两个单独的JSP页面,这样结果也可以独立的显示,而不需要重新渲染搜索的表单。
  2. 在搜索表单JSP上添加一个
    占位符,来存放搜索的结果。
  3. 添加一行jQuery代码,来在后台使用AJAX提交搜索表单内容,并把结果存放在占位符
    中。

修改后的代码是这样的:

当用户输入名称并点击了提交时,只有搜索结果的

会刷新。这样用户体验就得到了改善,而我们也不需要编写太多的JavaScript代码。让我们来深入一点研究下这段jQuery脚本:

这段代码的意思是:

第2行——“当页面加载完成时……”

第3行——“找到一个id为searchForm的表单,并让它变成具备AJAX功能的表单(在后台提交)”

第4行——“使用POST方法而不是GET”

第5行——“把搜索的结果放在一个id为searchResults的DIV中”

这几行jQuery代码以$()开始,并总是会选择某个元素来进行操作,比如“document”或者“#searchForm”。jQuery就像是个装饰器,可以让你为元素添加各种各样有趣的行为,比如具备AJAX提交功能的表单、可视化效果、拖拽等等。

这个例子演示出几行代码所包含的众多功能,也表达了为什么我会喜欢jQuery:使用装饰器方法来增强既有的web应用,是非常理想而完美的。不需要重写既有的HTML,你使用jQuery就可以添加新的行为。

使用Spring MVC和XStream/Jettison返回数据而不是HTML

第一个例子中,jQuery是用在了客户端,而在服务器端没有什么显著的变化。我们仍然保留基本的流程,用户在浏览器上点击某个元素,创建一个服务器请求,然后返回HTML内容。当如果服务器端能返回JSON或者XML格式的数据,而不是HTML,会怎样呢?

返回数据而不是可以展现的HTML,这可以让客户端缓存结果,从而减少服务器请求的次数。数据本身要比HTML简洁很多——这样也减小了返回结果的尺寸。请看下面的这个例子:

 

在标准的流程中,三次用户与浏览器的交互会带来三次服务器请求。现在让我们看看一个优化过后,服务器只返回数据而不是HTML的流程:

在优化后的流程中,三次用户交互只会产生一次服务器请求。

还有许多潜在的可以由服务器返回的数据格式。具体选择哪种,可以根据情况而定。下面是一些选项以及选择的原因:

服务器请求格式 何时使用 使用频率
完整HTML页面 初始页面加载
HTML片段 在服务器端展现更加容易而且有必要。比如使用流行的标签库来显示一个table。
JSONB

{
  "car": {
      "id": "5",
      "make": "Acura",
      "model": "MDX"
  }
}
在大多数服务器响应中都可以使用的数据格式。简洁,并且很容易跟JavaScript配合工作。
XML


     Acura
     MDX

复杂的无法轻松使用JSON表示的数据。XML的结果包括元素和属性,而JSON只包含元素。

让我们来看一个服务器返回JSON数据到浏览器的例子。我们把原来的汽车型号搜索页替换成一个新的页面,它包含一个制造商(make)和型号(model)的下拉列表。当用户选择制造商时,对应那个制造商的所有模型就会自动更新。如果用户选择了一个型号,下面就会显示一张列满该可用型号年代的表格。

由服务器端开始,我们会看到我们如何使用Spring MVC以及XStream和Jettison来创建JSON数据。首先我们会构建一个Spring MVC控制器:

第1行——@Controller注解告诉Spring MVC把这个类用作一个控制器。

第4行——@RequestMapping注解将请求URL映射到处理方法上。

第6行——创建ModelAndView对象,其中view名称为carselector,它将会映射到carselector.jsp。

第7行——使用键值makeList将一个制造商(Make)列表添加到ModelAndView中。这个对象可以在JSP中通过${makeList}来取到。

第11行——再一次,@RequestMapping注解将请求URL映射到处理方法上。

第12行——@RequestParam将一个请求参数对应到一个方法参数上。

第13行——通过我写的叫做JsonView的JSON视图类来创建ModelAndView对象。Spring MVC让编写自定义视图类变得非常简单,而JsonView中就包含了XStream的逻辑。

第14行——使用JsonView所期望的键值将型号(Model)的列表添加到ModelAndView。

总的来说,控制器会响应两个URL,“carselector.html”和“models.html”。它通过一个标准的JSP视图针对 “carselector.html”返回一个HTML页面。让我们来看看JsonView类,它针对“models.html”返回JSON结果:

 

第4行——使用JettisonMappedXmlDriver来初始化XStream,从而输出JSON而不是XML。

第6行——Spring MVC视图类必须实现render()方法。

第9行——从model中取出之前由控制器创建的数据。

第11行——实际生成JSON(尽管方法叫做toXML)。

它就是那么简单。XStream库也包含一套注解,你可以将其放在你自己的域中或者传输对象上,来提示如何展现JSON,但一般来说这个库基本不需要什么配置。

现在服务器端就生成了JSON,但客户端如何使用它呢?针对这个问题,我们需要再次来利用jQuery。请记住,我们需要处理两个事件:从“制造商(make)”下拉列表中选择数值会更新“型号(model)”下拉列表中的数据。而选择型号(model)下拉列表中的数值会填充型号(model)年代表格中的数据。下面是用jQuery的ready方法来绑定事件处理方法:

“select[name^=make]”表达式看起来非常像CSS选择器,那是因为jQuery选择器是CSS选择器的一个超集(就好像CSS和 Regex有一个共同的孩子)。这些表达式相当强大,可以用来同时选择一个或多个对象。在这个例子中,表达式的意思是,“选择一个名字叫‘make’ 的

 

在infoQ网站上看到了这边文章,挺不错的,与大家共享下,希望对你以后的开发有帮助!

http://www.infoq.com/cn/articles/First-Cup-Web-2.0-Joel-Confino;jsessionid=B6426F614B109FEB39467367087209A4

 

分享到:
评论

相关推荐

    spring mvc 3.0.5 jar包

    Spring MVC是Spring框架的一个核心模块,专用于构建Web应用程序。Spring 3.0.5版本是这个MVC框架的一个稳定版本,提供了许多功能和优化,适用于各种规模的项目。在这个jar包中,包含了构建Spring MVC应用程序所需的...

    json XStream

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript的一个子集,但通常被用作独立于语言的网络数据交互标准。JSON格式通常用于服务器向...

    springMVC整合xStream实现对象和xml转换

    在IT行业中,SpringMVC是Java企业级应用开发中广泛使用的Web MVC框架,它提供了强大的模型-视图-控制器架构来构建可维护、高性能的Web应用程序。XStream则是一个Java库,用于将Java对象序列化为XML,以及将XML反序列...

    Spring 3 MVC ContentNegotiatingViewResolver Example

    在本文中,我们将深入探讨Spring 3 MVC框架中的ContentNegotiatingViewResolver组件,这是一个用于内容协商的关键工具,它使得应用程序能够根据用户代理或请求参数返回适当格式的响应。...

    xstream-1.4.2.jar

    在标题"xstream-1.4.2.jar"中,我们看到的是XStream的一个特定版本——1.4.2。这个版本包含了XStream库的所有功能和该版本的修复与改进。 描述中提到,这个文件可以在官方网站上找到,地址是...

    SpringMVC jar包

    SpringMVC是Spring框架的一部分,专门用于构建Web应用程序。它是一个模型-视图-控制器(MVC)架构的实现,提供了强大的数据绑定、验证、国际化等功能,极大地简化了Java Web应用的开发工作。在"spring-framework-...

    java 利用Xstream注解生成和解析xml

    Java中的Xstream库是一个强大的工具,它允许程序员方便地将Java对象序列化为XML和从XML反序列化回Java对象。这个过程对于数据交换、持久化或者创建XML配置文件非常有用。Xstream通过使用注解提供了高度的灵活性,...

    、jackson、xStream、castor、jibx、jaxb2.docx

    在Spring MVC框架中,处理XML和JSON视图的集成是常见的需求,这使得应用程序能够以这些格式进行数据交换。在给定的文档中,提到了几种用于Java对象与XML之间转换的技术,包括Jackson、xStream、castor、Jibx和Jaxb2...

    Java用xStream拼接xml

    在IT行业中,XML(eXtensible Markup Language)是一种被广泛使用的数据交换格式,尤其在Web服务和数据存储中。当需要将数据转换为XML格式以便于传输或处理时,工具如xStream就显得尤为重要。Java中的xStream库提供...

    activemq-transport-xstream-2.0.jar.zip

    《ActiveMQ 传输组件XStream 2.0详解》 ActiveMQ是Apache软件基金会开发的一款开源消息代理,它提供了一种高效、灵活且可靠的中间件服务,用于在分布式系统中传递消息。在ActiveMQ中,传输组件是核心部分,负责消息...

    spring O/X 映射

    Spring 3.0 的一个新特性是 O/X Mapper。O/X 映射器这个概念并不新鲜,O 代表 Object,X 代表 XML。它的目的是在 Java 对象(几乎总是一个 plain old Java object,或简写为 POJO)和 XML 文档之间来回转换。 例如,...

    使用XStream序列化/反序列化对象

    XStream是一个强大的库,它允许开发者以XML格式进行序列化和反序列化Java对象。在这个场景中,我们将深入探讨如何使用XStream处理对象的序列化和反序列化。 首先,让我们了解什么是XStream。XStream是由Joe Walnes...

    com.thoughtworks.xstream.XStream操作XML和java对象的一些用法

    XStream库提供了一个简单、直观的方式来实现这种转换,使得XML序列化和反序列化变得非常方便。本篇将详细介绍XStream如何处理XML与Java对象的相互转换,以及如何处理List、Map等集合类型的数据。 首先,XStream是一...

    xStream转换xml和json源码

    xStream是一个轻量级的Java库,用于将Java对象序列化为XML,同时也能将XML反序列化回Java对象。这个强大的工具同样支持JSON格式,使得在Java应用程序中处理XML和JSON数据变得非常便捷。本篇文章将深入探讨xStream...

    XML开发包xstream.zip

    XStream是Java平台上的一个开源库,它提供了一种简单且直观的方式来序列化和反序列化Java对象到XML,反之亦然。这个开发包“xstream.zip”包含的是XStream的特定版本——1.4.3-SNAPSHOT。 **XStream的核心功能:** ...

    好用的xStream XML和JAVA对象互相转换的简单示例

    在Java开发中,数据交换和持久化是常见的需求,XML作为一种通用的数据交换格式,被广泛应用于各种系统间的数据传输。然而,将XML与Java对象直接对应起来操作可以大大简化编程工作,这就是XStream库的作用所在。...

    XStream在JavaBean与XML/JSON 之间相互转换

    XStream是一个开源库,它为Java对象提供了简单且直观的XML序列化和反序列化的解决方案。它不仅能够将Java对象转换成XML,反之亦然,还能支持JSON格式的转换。这个强大的工具在处理数据交换、持久化或配置文件时非常...

    xstream实现xml和java bean 互相转换

    XStream:XStream是一个简单易用的Java库,用于序列化和反序列化对象。它可以将Java对象转换为XML文档,也可以将XML文档转换为Java对象。 pom引用 <groupId>com.thoughtworks.xstream</groupId> <artifactId>...

Global site tag (gtag.js) - Google Analytics