传统的Java Web MVC框架距离REST有多远

news/2024/7/4 4:43:05

到目前为止,传统的Java Web MVC框架(Struts、WebWork、Spring MVC、etc.)还无法很好地支持REST风格的架构设计。它们在设计之初时基本上都是围绕着基于HTML表单的交互模式来设计的,View的粒度难以 达到单个页面以下。不能把响应Ajax请求而返回的XML/JSON/纯文本格式的数据简单地认为是Web MVC框架中的View,实际上这个时候这些数据的语义已经与传统的Web MVC架构中的View的语义相距甚远。

传统的Web MVC框架一个最大的问题是它们看待URL的方式与REST有很大的差别。REST把服务器端所有的URL都当作是抽象的资源(相当于是面向对象设计中的 接口),虽然Web MVC也强调不应该将硬编码的URL(例如:http://www.xxx.com/yyy/zzz/abcd.jsp)直接暴露出来,而应该通过某个Controller来暴露,将这个页面配置为Controller的一个View,但是Web MVC框架并没有有意识地将URL当作抽象的资源来看待和设计。

还有一个较为严重的问题是传统的Web MVC框架基本上都只支持GET和POST两种HTTP方法,而不支持PUT和DELETE方法,而Servlet API是支持上述所有的HTTP方法的(支持doPut和doDelete方法)。

举个例子,Spring MVC所支持的HTTP方法封装在org.springframework.web.servlet.supportWebContentGenerator类中,其中只有 METHOD_HEAD、METHOD_GET、METHOD_POST几个常量,而没有METHOD_PUT、METHOD_DELETE,显然其作者 并不认为有必要支持HTTP的PUT和DELETE方法。

我没有考察过Struts和WebWork,估计结果应该是一样的,而且也没有听说过Strust和WebWork的作者有支持REST风格架构设 计的计划。JSF呢?虽然Gavin King以前在某地说过JSF完全可以支持REST,上次见面我没有仔细向他请教这个问题,但是可以肯定的是JSF从来就没有把支持REST风格的架构设 计作为他们的核心目标之一。

所以在这个方面,Java社区要比Ruby社区落后很多了。目前只能脱离开传统的Web MVC框架,基于Servlet API来建造一个符合REST要求的新的服务器端架构(当然,Spring IoC、Hibernate等框架仍然可以保留)。好在不需要我们亲自来做这个事情,已经有一些Java的服务器端框架可以支持REST了。例如: Restlet(http://www.restlet.org)。另外还有一些横跨浏览器和服务器的设计模式可以利用,详情见《Ajax模式与最佳实践》。





http://www.niftyadmin.cn/n/3653125.html

相关文章

解析OpenSSL重大安全漏洞

2014年4月8日,XP宣布正式停止服务的日子,也是OpenSSL爆出大漏洞的日子。这个漏洞影响30~50%比例使用https的网站,其中包括大家经常访问的:支付宝、微信、淘宝、网银、社交、门户等知名网站。只要访问https的网站便有可能存在被嗅探…

一个成功的RIA技术需要满足的条件

不要将自己完全局限在现有技术的能力范围内,来跟我一起预测一下未来技术的发展趋势,看看一种理想的RIA技术应该满足哪些条件。我先来开个头。1. 与服务器的交互方式必需首先支持异步的交互。异步的交互才不会打断用户的操作。当然也可以同时支持同步的交…

Openssl AES

OpenSSL提供了AES加解密算法的API const char *AES_options(void); AES算法状态,是全部支持或者是部分支持。 返回值:“aes(full)” 或者"aes(partial)" int AES_set_encrypt_key(const unsigned char *userKey, const int bits,AES_KEY *key)…

给Ajax技术初学者的一些建议

Yu Sueng你好:我推荐你先看一下《Ajax实战》,然后再看看《征服Ajax——Dojo、Prototype、script.aculo.us框架解析与实例》。这两本书的内容我感觉都不错。Ajax的核心内容是XMLHttpRequest对象,只要掌握了这个对象的使用方法,就可…

Redis介绍及常用命令

一 Redis介绍 Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。 Redis能运行在大多数POSIX(Linux, *BSD, OS X 和Solaris等)系统…

如果你不肯告诉我你的架构所做的假设,我就认为你是在有意行骗

Fielding先生在其博士论文中,明确地给出了REST架构风格所基于的一些基本的假设。事实上,在任何一种架构风格中都存在着一些基本的假设,当然,作为架构风格的实例的某种特定的架构中也包含了这些假设。Fielding先生本人并不认为REST…

REST架构风格的性能为何比其他的架构风格更好

今天与一起翻译Fielding论文的朋友杨光讨论技术问题,杨光认为因为REST是基于文本来进行通信,所以其性能肯定不如基于二进制格式的通信协议好。因为这是一个对于REST的明显的误解,所以我觉得有必要专门在这里澄清一下。以下是我们的讨论内容&a…

Fielding的论文已经翻译完成

Fielding关于REST的经典论文我们已经翻译完成,已经发给国内的一些专家做review。我在两周后综合各位专家的review意见再做一次修订,然后就发给Fielding先生来发布。这篇论文绝对是所有做Web开发的人的必读,大家期待吧。