开发大型项目必备 98%公司都在用的十佳 Java Web 应用框架
众所周知,工欲善其事,必先利其器。选择一个好的 Web 应用框架就像一把称手的兵器,可以助大家披荆斩棘。
今天就为大家整理了十佳 Java Web 应用框架,并简单讨论一下它们的优缺点。
第一,大名鼎鼎的Spring MVC框架。Spring MVC 框架堪称是一个教科书式的 MVC (模型Model、视图View和控制器Controller)框架,严格组照 MVC 模式要求进行分层设计。经过多年的发展,Spring MVC 已经发展成了一个 Web 应用程序的全能架构。
易用性方面, Spring MVC 为 Web 应用程序的开发和配置提供了有用的工具箱。扩展性方面, Spring MVC 也以插件多而出名,大量优秀插件可供选择,如SOAP 服务、REST API 和安全认证。
优点:
- 强大的模块化功能,代码可读性高;
- 可以通过 POJO (Plain Ordinary Java Object,简单的Java对象)对测试数据进行简单的注入;
- 可以灵活使用DI(DependencyInjection,依赖注入,或者叫控制反转);
- 不同模块间是低耦合的(上面四点优点归根结底还是耦合度低)。
缺点:
- 对于新手来说,实现的难度比较大;
- 学习曲线比较陡峭,即入门比较难。
第二,JSF。它可以说是所有 Java 框架中的与 Java 关系最近的,因为它和Java 都是 Oracle 的嫡系部队。JSF 也许并算不上最好的 Java 框架,但是由于 Oracle 的加持,JSF 的文档是最全也最容易找到的。
此外,由于 JSF 已通过 JCP 格式化为 JavaEE 的一部分,所以你只要安装了 J2EE,就可以无障碍使用 JSF 了。复杂的功能也能用JSF 提供的大量工具和库来实现。借助 JSP(Java Server Pages),JSF 还可以支持不同的 Facelets 和 XUL 技术。
优点:
- 由于 JSF 集成在 JavaEE 中,对于使用 IDE 的开发人员来说非常方便。
缺点:
- 入门门槛比较高,如果没有 Java Web 的开发经历很难完整理解 JSF。
第三,Struts。Struts 是 Apache 软件基金会(ASF)赞助的一个开源项目,也是基于 MVC 模式进行设计的,但是不像 Spring MVC 那么严格遵守 MVC 模式,经常被视作一种变种。
Struts是通过一系列接口和类来实现某些特定的功能,为 Java 应用提供了网络框架。与传统的互联网功能不同,它可以创建动态响应。众人拾柴火焰高,在各个开源社区的共同努力下,Struts 才有了今天的影响。当然,Struts 常常被诟病为“万年漏洞王”,去年国内还因为新漏洞闹的沸沸扬扬,但仍然不能否定其是一个强大易用的框架。
优点:
- 原生支持I-18-N(即国际化,其来源是英文单词 internationalization 的首末字符i和n,18为中间的字符数);
- 便捷的数据有效性验证和身份验证;
- 支持模块化开发和集成插件。
缺点:
- 灵活性不足;
- 安全性有待提高。
第四,Hibernate ORM 也是一个不能被忽略的优秀框架, 属于使用 GNU 通用公共许可证发行的自由开源软件。Hibernate 是一套对象关系映射解决方案,能够建立面向对象模型与关系数据模型的映射。Hibernate 对 JDBC 进行了非常轻量级的对象封装,使 Java 开发人员可以随心所欲的使用对象编程思维来操纵数据库。
优点:
- 移植性好,只需要修改极少量的代码修改实现与其他数据库通信;
- 数据库不敏感,通吃MySQL, DB2 和 Oracle等主流数据库;
- 优秀的缓存机制(session缓存,二级缓存,查询缓存),对于那些改动不大且经常使用的数据,可以将它们放到缓存中,不必在每次使用时都去查询数据库,缓存机制对提升性能大有裨益;
- 延迟加载(只有等系统需要使用集合属性时才从数据库装载关联的数据)。
缺点:
- 一旦断电,所有未存储就会丢失;
- 重启非常慢。
第五,GWT(Google Web Toolki) 是一个前端使用 JavaScript,后端使用 Java 的 AJAX 框架,以 Apache 许可证2.0版本开放源码。GWT 通过编译器将 Java 代码编译成JavaScript,可以让开发人员只使用 Java 就可以快速开发维护复杂但高性能的 JavaScript ,借此减轻开发人员负担。
除了一些本地库之外,都可以用集成的 GWT Ant 将 Java 源码构建成 JavaScript。 GWT已经实现了大量代码跨平台复用,包括跨浏览器移植性、国际化、UI抽象化、书签、历史管理、远程程序调用和异步的代码。
优点:
- 入门容易;
- 特别适合应用;在想要通过增加客户端负载从而减少服务器端负载,进而提升响应速度的web应用程序;
- 借助各种各样的JavaScript库,开发人员可以充分利用GWT的能力;
- 内置IDE能够直接重构Java密文/代码;
- 由Google负责开发,前景光明。
缺点:
- GWT是一个快速迭代的项目,版本太多,可能没法知道所有接口和方法;
- 编译器执行效率比较慢;
- 定义结构的时候必须使用专用的方法来执行。
第六,Play 框架是一种基于无状态(stateless)、Web 友好和轻量级的架构,支持 Scala 和Java两种语言。它构建在 Akka (一个用 Scala 编写的分布式应用框架)上并利用了 Akka 顶部设计的完全异步模型,为可高度伸缩的应用程序分配最小和可预测的资源(比如线程数、内存和CPU)。
Play比较友好,开发人员可以通过文本编辑器和浏览器直接进行修改。此外,尽管它是无状态的,但它的规模是可以预见的。可以说,Play 是为了因应现代移动和网络应用的需要而诞生的。
优点:
- 极大地提高了开发人员的生产率;
- 配置、模板和java代码的更改可以快速完成重载;
- Play是在Netty基础上设计的,支持异步I/O;
- 它是开源的;
- 由Zenexity公司和Lightbend公司提供商业支持;
- Play可以在运行时处理错误。
缺点:
- Play 2基本上是对Play 1的重写,比Python3.X和Python2.X的差距大多了,想想Python就知道了;
- 它是围绕异步I/O构建的,你可能会得到一个不知名的内部类;
- 无论是Play框架还是Akka的中文资料少之又少。
第七,Vaadin 是一个 Apache 许可的开源 Java web 应用程序项目,并拥有一个活跃的社区(https://vaadin.com/forum)。用 Vaadin 开发的浏览器应用界面可以达到和桌面应用类似的效果,但和 Flash 、Silverlight 不同的是,Vaddin 应用无需在浏览器上安装任何插件。它支持纯Java开发环境,开发人员无需深入了解 HTML,XML 或是JavaScipt。如果你曾经使用 Java 开发过 Swing,SWT 等应用,可以非常容易开始使用 Vaddin 开发 Web 应用。
优点:
- 只需要在服务器端编程;
- 支持布局、侦听器和组件类型;
- 支持各类插件;
- 可以很方便地和Spring框架集成。
缺点:
- 不支持多窗口;
- 自动创建的JS代码的不够精简。
第八,Grails基于 Groovy 编程语言,是一个坚持己见、提倡用约定的默认设置代替复杂配置的框架。它与 JVM 很好地融合,能够在提供强大功能的同时保持高效,包括异步编程、编译时元编程、运行时和领域专用语言(DSL,专注于某个应用程序领域的计算机语言)。Grails可以透明地、无缝地与 Java、Java EE 容器和 JVM 进行互操作和集成。
优点:
- 处理中小型项目的理想工具;
- 提供一个快速的开发周期;
- 提供丰富的插件;
- 文档简单易懂的;
- 安装过程很简单,新手也可以在短时间内构建应用程序;
- GORM(Grails ObjectRelational Mapping,Grails对象关系映射)的配置简单;
- 管理CSS简单;
- 动态配置特性,无需重新启动服务器即可更改配置。
缺点:
- 依赖JVM运行环境;
- 多线程时候有时可能会有问题。
第九,Wicket 又称 Apache Wicket,一看这个名字,又是一个 Apache 基金会旗下的开源框架了。Wicket 是一个基于组件的轻量级的 Java 应用程序框架。Wicket 使用遵循 XHTML 标准的命名空间来支持 HTML 模板。其特点在于对 Html 和 Java代码进行了有效的分离(有利于程序员和美工的合作),基于规则的配置(减少了 XML 等配置文件的使用)。
优点:
- 代码是用Java编写的;
- 没有XML配置文件;
- 没有返回键的问题;
- 是一种简单Java对象为中心的编程;
- 测试比较容易。
缺点:
- 发展前景比较不明确;
- 基于事件的设计可能增加代码混乱的几率。
第十,Vert.x框架是一个基于 JVM、轻量级、高性能的应用框架,基于事件驱动和异步,使用极少的核心线程里占用最小限度的硬件资源处理大量的高并发。Vert.x支持多种语言,例如Ceylon、Ruby、Groovy、JavaScript和Java,因此可以根据项目特性和团队技能灵活选择语言。
优点:
- 设置容易;
- Vert.x容器里强大的内核线程;
- 为异步提供简单的方法和对象。
缺点:
- 一些硬件可能无法执行;
- 支持语言太多,选择一门恰当的语言会让人头疼会。
本文简要介绍了当前 10 个最主流的 Java Web 框架的各自特性和优缺点。希望能对大家未来的学习和工作有所帮助。
来源:SEO
开发大型项目必备 98%公司都在用的十佳 Java Web 应用框架的更多相关文章
- PHP开发大型项目的一点经验
一.变量 最好是把所有的变量存储在一个数组中,这样在程序的开发中可以带来很多的方便,特别是当程序很大的时候.变量的命名就当适合自己的习惯,不管是用拼音还是英语,至少应当有一定的意义,以便适合记忆.变量 ...
- 读书笔记--<精益和敏捷开发大型项目应用指南>
[摘要] 3月份的时候,根据教练和其他多为项目经理的推荐,开始阅读这本书:本书共三大部分.12个章节,第一部分:思考工具,第二部分:组织工具:第三部分:杂记:全书相当于对精益思想和敏捷团队组织.Scr ...
- 大型项目必备IPC之Binder机制原理(一)
阿里P7Android高级架构进阶视频免费学习请点击:https://space.bilibili.com/474380680 摘要 Binder是Android系统进程间通信(IPC)方式之一.Li ...
- 大型项目必备IPC之其他IPC方式(二)
阿里P7Android高级架构进阶视频免费学习请点击:https://space.bilibili.com/474380680IPC的6种方式IPC是Inter-Process Communicati ...
- ABP大型项目实战(2) - 调试与排错 - 日志 - 查看审计日志
这是<ABP大型项目实战>系列文章的一篇. 项目发布到生产环境后难免会有错误. 那么如何进行调试和排错呢? 我看到俱乐部里有人是直接登陆生产服务器把数据库下载到开发机器进行调试排错 ...
- 大型Java Web项目的架构和部署问题
一位ID是jackson1225的网友在javaeye询问了一个大型Web系统的架构和部署选型问题,希望能提高现有的基于Java的Web应用的服务能力.由于架构模式和部署调优一直是Java社区的热门话 ...
- 【java项目实战】一步步教你使用MyEclipse搭建java Web项目开发环境(一)
首先.在開始搭建MyEclipse的开发环境之前.还有三步工具的安装须要完毕,仅仅要在安装配置成功之后才干够进入以下的java Web项目开发环境的搭建. 1.安装工具 第一步,下载并安装JDK,到官 ...
- java web 开发三剑客 -------电子书
Internet,人们通常称为因特网,是当今世界上覆盖面最大和应用最广泛的网络.根据英语构词法,Internet是Inter + net,Inter-作为前缀在英语中表示“在一起,交互”,由此可知In ...
- 阿里云服务器部署Java Web项目全过程
最近需要将一个Java Web项目部署到服务器上,方便多人共享访问.这也是我第一次接触服务器之类的东西,也花了一点时间,最终总算部署成功,写下一篇文章记录以便日后回顾. 购买服务器 第一步当然是需要购 ...
随机推荐
- 一个有意思的html验证码: namesilo验证码
买域名的时候看到的一个验证码,感觉蛮有意思的(https://www.namesilo.com/create_account.php),这个质感看上去就不一样: 查看页面源码,果然这个验证码是用htm ...
- Jinja2语法小记
jinja2模板语法小记 Jinja2模板中文文档 三种常见界定符 表达式 {{ ... }} 用于装载字符串.变量.函数调用等 语句 {% ... %} 用于装载控制语句,比如if判断.for循环等 ...
- Mysql升级、免安装版MYSQL安装与卸载
1. 备份好数据库:表结构和数据: 2. 备份my.ini文件和data文件夹: 3. 卸载旧版本mysql: 4. 安装新版本mysq ...
- Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3) E. Arson In Berland Forest
E. Arson In Berland Forest The Berland Forest can be represented as an infinite cell plane. Every ce ...
- 51node 4个数和0
https://www.51nod.com/Challenge/Problem.html#problemId=1267 第一种方法:两个for+二分:很好理解,不用考虑重复的问题.但是这个还不够快 # ...
- c++程序—字符型
#include<iostream> using namespace std; int main() { //字符型 char ch = 'a'; cout << ch < ...
- [NCTF2019]Fake XML cookbook
0x00 知识点 XXE攻击 附上链接: https://xz.aliyun.com/t/6887 XXE(XML External Entity Injection)全称为XML外部实体注入 XML ...
- MFC 实现CTreeCtrl单选
void CDepartmenManager::SetUncheck(HTREEITEM hTree) { if (!hTree){ return; } m_DePartmentView.SetChe ...
- 路由反射器(RR)配置
IBGP与EBGP的区别:是否使用指定源(update-source) 路由反射器(RR)配置: 零:关闭同步,关闭自动汇总. ①:启用BGP ②:在相同BGP-AS下建立邻居. ③:指定路由器及所在 ...
- struts2模型驱动传值问题
控制台错误提示: 2020-01-08 18:34:40,292 [http-nio-8080-exec-3] [org.apache.struts2.dispatcher.Dispatcher]-[ ...