Java Web框架前景浅析
基于三(多)层架构模式,典型WEB系统的总体架构如下图所示:

在上述分层架构中,整个应用被划分为两大部分:
- 客户端:基于浏览器提供信息展现、用户交互等功能。所采用的技术主要有:HTML/HTML5、Javascript、CSS。另外,Flush由于其广泛的浏览器集成度,通常也可归纳为一种WEB技术,但Flush不在本文讨论范围。
- 服务端:实现业务逻辑处理。通常按三层架构模式划分为展现层、业务逻辑层和数据集成层。服务端的平台选择相比客户端来讲更加广泛,有PHP、Java、.Net、Ruby、Python等。每种平台下都有非常优秀的WEB框架可供选择。
尽管客户端的WEB技术平台主要还是基于HTML+Javascript+CSS,但是基于其上的类库、框架、开发模式、衍生技术等非常繁杂且变化多端,要在实际项目中做出最好的选择绝非易事。有鉴于此,本文不打算深入讨论客户端WEB技术。
服务端虽然平台选择非常多样化,但总体架构基本一致。本文主要讨论Java平台。在所有平台中,Java平台下的WEB框架是最多的,其它语言平台下新的框架总能在Java中找到对应的实现。这也是Java平台生命力强大的体现之一。下图列出了Java平台下的部分Web框架:

上图共列出了62个Java Web框架!一定还有很多Java Web框架没有收录其中。
不过不要担心,在Java世界,流行的或说主流的Web框架并不多,如:Struts、Spring MVC、Play! Framework、GWT、Apache Wicket、JSF等,国产的Java Web框架有EOS、Nuts等在一定范围使用也比较广泛。
- Struts:这是Java社区最老牌、知名度最高、使用也最广泛的WEB框架。Struts的特点是简单易用、文档丰富,通常与spring-hibernate/ibatis组合使用(SSH/SSI);
- Spring MVC:Spring当年凭借一句"J2EE Withou EJB"的怒吼拉开了开源社区全面对抗学院派(JCP)的序幕,这一战让Spring一举成名。凭借Spring的东风,其mvc框架也得到社区广泛关注。基于Spring的IOC、AOP等技术,其框架设计简洁优雅、扩展性非常强;
- Play! Framework:这是Ruby社区非常火爆的Ruby On Rails框架在Java平台的翻版。当年Ruby On Rails的约定优于继承、极简的ORM框架所带来的快速开发能力与当时Java社区经典的SSH中繁杂的XML配置、越来越臃肿复杂的ORM所导致的开发效率的低下形成了鲜明对比。Play!就是这种理念PK下的产物;
- EOS:国产的基于构件理念的Java开发平台,其图形化的业务逻辑编排能力让许多人眼前一亮,对SOA不遗余力的支持也体现了厂商的态度。EOS的页面流概念应该算是WEB框架领域的一个创举,此前或此后还没有哪个WEB框架考虑过多个请求之间的关联性问题。除此之外,EOS的WEB框架也算中规中距;
- JSF:2001学院派发起JSR,至2004年推出规范1.0、2006年推出1.2版参考实现、2009年发布2.0规范、2010以后JSF2得到了以JBoss为首的广泛支持。然而时至今日,JSF仍然不温不火,其成就远没有Struts或Spring MVC来得高。不过个人认为,相比前面所说的所有框架来讲,JSF的设计理念是非常先进的。JSF是Java世界中非常少见的以组件为中心的WEB框架!补充一点,金蝶2007年推出的OperaMasks当年高调宣称其基于JSF的框架是世界一流的,但时至今日其官方网站几乎停止更新,着实让人不甚唏嘘;
- GWT:Google出品的Java WEB框架,倡导使用传统桌面应用开发方式来开发WEB。开发人员不需要懂WEB技术,只需要熟悉Java和面向对象理论,就可以使用类似Swing或RCP的方式开发WEB应用。这一点与eclipse的RAP非常相似。GWT适用于从传统桌面开发转向WEB开发的人群,对于真正了解WEB技术的开发人员来讲,其开发模式很难让人接受;类似这样的框架还有apache wicket等;
每个框架都有各自的特点和使用人群,很难一概而论说哪个好哪个不好。不过从下图中我们可以大致了解开发人员的选择:

尽管Java Web框架各类繁多,不同的框架有不同的特点,但不同的框架之间还是有许多共性的。例如,按照页面和处理逻辑的关系我们可以将Java WEB框架划分为:
- 传统MVC模式的WEB框架:如Struts、Spring、Play!等。这一类框架的特点是页面和处理逻辑按照传统MVC模式进行组织,页面通常使用JSP或某种模板语言(如Freemarker、Velocity等)来实现,服务端处理逻辑通常采用Action或Command模式;
- 以组件为中心的WEB框架:如JSF。传统MVC框架的请求处理流程通常是“请求-处理-页面”的循环,而在JSF中请求的处理是基于事件的,这种开发模式类似于桌面程序的开发模式,只是页面还是使用JSP加JSF标签组件而已;
- 模拟桌面开发方式的WEB框架:如GWT、Wicket等。这类框架纯粹使用桌面方式进行WEB开发,开发人员基本不需要知道HTTP及HTML/JS/CSS等知识。这类框架相比JSF更加激进,不仅请求处理模式基于事件,连页面展现也是按照传统桌面方式去开发;
上述三类框架中,第一类是最靠近WEB的开发方式,第三类是最靠近桌面的开发方式,第二类界于两者之间。桌面开发方式的好处是组件化能力非常强,借助发展多年的桌面控件设计经验,可以很容易地设计出复用度非常高的组件。相对的,第一类开发模式下由于界面变化非常大,在展现层就很难做出组件化的设计(这其实也体现了WEB应用展现及交互方式变化多端的内在本质)。
另一方面,第一类框架非常强调客户端与服务端的分离,而第三类框架则试图弱化客户端与服务端的界限,其理想模式是客户端事件直接传递到服务端,中间没有任何转换(这就是桌面程序的模式了)。
考虑现实世界的复杂性以及WEB千变万化的特点,第一类框架只是做好自己的份内事,将客户端的处理交由专门的客户端框架去实现(这样才能充分利用当前欣欣向荣的客户端WEB技术);而第三类框架则试图通吃客户端与服务端,完全无视客户端的特点,这将导致第三类框架只能局限于某些特定领域的应用范围之内,而且随着客户端WEB技术的发展,其应用范围必定越来越狭窄。至于第二类框架,界于前两类框架之间,地位非常尴尬,尽管其有官方正统的血统背景,但其违背WEB大的发展趋势,其前景不被看好。
Java Web框架前景浅析的更多相关文章
- 浅析Java Web框架技术
一.Java Web框架技术的概念 所谓的Java框架,简单理解是一个可复用的设计构件,它规定了应用的体系结构,阐明了整个设计.协作构件之间的依赖关系.责任分配和控制流程,表现为一组抽象类以及其实例之 ...
- 读《架构探险——从零开始写Java Web框架》
内容提要 <架构探险--从零开始写Java Web框架>首先从一个简单的 Web 应用开始,让读者学会如何使用 IDEA.Maven.Git 等开发工具搭建 Java Web 应用:接着通 ...
- [转]轻量级 Java Web 框架架构设计
工作闲暇之余,我想设计并开发一款轻量级 Java Web 框架,看看能否取代目前最为流行的而又越来越重的 Spring.Hibernate 等框架.请原谅在下的大胆行为与不自量力,本人不是为了重造轮子 ...
- 【EatBook】-NO.3.EatBook.3.JavaArchitecture.2.001-《架构探险:从零开始写Java Web框架》-
1.0.0 Summary Tittle:[EatBook]-NO.3.EatBook.3.JavaArchitecture.2.001-<架构探险:从零开始写Java Web框架>- S ...
- 架构探险笔记3-搭建轻量级Java web框架
MVC(Model-View-Controller,模型-视图-控制器)是一种常见的设计模式,可以使用这个模式将应用程序进行解耦. 上一章我们使用Servlet来充当MVC模式中的Controller ...
- java web框架发展的新趋势--跨界轻型App
“跨界(cross over)在汽车界已然成风,将轿车.SUV.跑车和MPV等多种不同元素融为一体的混搭跨界车型,正在成为汽车设计领域的新趋势.从个人而言,当包容.多元的审美要求和物质要求越来越强烈时 ...
- Smart Framework:轻量级 Java Web 框架
Smart Framework:轻量级 Java Web 框架 收藏 黄勇 工作闲暇之余,我开发了一款轻量级 Java Web 框架 —— Smart Framework. 开发该框架是为了: 加 ...
- JAVA web 框架集合
“框架”犹如滔滔江水连绵不绝, 知道有它就好,先掌握自己工作和主流的框架: 在研究好用和新框架. 主流框架教程分享在Java帮帮-免费资源网 其他教程需要时间制作,会陆续分享!!! 152款框架,你还 ...
- 五大 JAVA Web 框架的优缺点对比,Spring MVC 领先
毫无疑问,Java 是当今世界上最重要的编程语言之一.js 框架给程序员提供了 一个可以构建程序的坚实基础.它包括定义的类和功能,用于硬件设备管理,与系统软件交互并处理输入,让开发人员变得更轻松.Ja ...
随机推荐
- SGU - 321 - The Spy Network
先上题目: 321. The Spy Network Time limit per test: 0.5 second(s)Memory limit: 65536 kilobytes input: st ...
- 夜话JAVA设计模式之单例模式(单件模式Singleton)
单例模式也叫单件模式,就是确保一个类只有一个实例,并提供一个全局访问点. 设计成单例即把某个类设计成我们自己管理的单独实例,避免实例对象的重复创建,我们只有通过单例类的全局访问点获取实例. 下面来看金 ...
- 分享一个灰常好的 dapper 扩展插件: Rainbow
dapper 是一个效率非常高的orm 框架 ,效率要远远大于 我们大微软的EF . 它只有一个类文件,非常之小.(在 EF 5.0 后 微软已经做了 改进) ps; 由于之前我也没测试过,只 ...
- 洛谷—— P1122 最大子树和
https://www.luogu.org/problem/show?pid=1122 题目描述 小明对数学饱有兴趣,并且是个勤奋好学的学生,总是在课后留在教室向老师请教一些问题.一天他早晨骑车去上课 ...
- springboot跨域请求设置
当它请求的一个资源是从一个与它本身提供的第一个资源的不同的域名时,一个资源会发起一个跨域HTTP请求(Cross-site HTTP request).比如说,域名A ( http://domaina ...
- mybatis中jdbcType的作用和是否必须
1. mybatis中 jdbcType 时间类型 当jdbcType = DATE 时, 只传入了 年月日 jdbcType = TIMESTAMP , 年月日+ 时分秒 2. jdbcType ...
- shell中的四种模式匹配
POSIX为shell为进行模式匹配提供了四种参数替换结构(老版本的shell可能不支持),每种结构有两个参数:变量名(或变量号)及模式. 第一种模式: ${variable%pattern}, ...
- XCode 7 高速切换代码窗体和文档窗体
XCode 7 高速切换代码窗体和文档窗体 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 ...
- InnoDB: Error: log file .\ib_logfile0 is of different size 0 10485760 bytes
启动WAMP Server的时候报例如以下的错误: 140618 23:12:32 [Note] Plugin 'FEDERATED' is disabled. 140618 23:12:32 Inn ...
- svn 运行clear up 失败的解决的方法
SVN 的clear up命令失败的解决方法 1. 下载 sqlite3.exe 文件,放到d盘根文件夹. (能够到这里下载 http://download.csdn.net/detail ...