Java Web 技术更新代

本贴最后更新于 2346 天前,其中的信息可能已经事过景迁

1、传统 JSP 模式

也称为 web 1.0 时代。基于传统的网页 HTML 文件,可以作为页面来浏览。同时,又兼容 java 代码,可以用来处理业务逻辑。对于功能单一、需求稳定的项目,可以把页面展示逻辑和业务逻辑都放到 JSP 中。

  • 优点:编程简单,易上手,容易控制
  • 缺点:前后端职责不清晰,可维护性差

2、Model1 模式

可看做是对传统 JSP 模式的增强。加入了 JavaBean 或 Servlet,将页面展示逻辑和业务逻辑做了分离。JSP 只负责显示页面,JavaBean 或者 Servlet 负责收集数据,以及返回处理结果。

  • 优点:架构简单,适合中小型项目
  • 缺点:虽然分离出业务逻辑,但是 JSP 中仍然包含页面展示逻辑和流程控制逻辑,不利于维护

3、Model2 模式

该模式也可以看做是传统 MVC 模式。为了更好地进行职责划分,将流程控制逻辑也分离了出来。JSP 负责页面展示,以及与用户的交互,展示逻辑;Servlet 负责控制数据显示和状态更新,控制逻辑;JavaBeans 负责操作和处理数据,业务逻辑。

  • 优点:分工明确,层次清晰,能够更好地适应需求的变化,适合大型项目
  • 缺点:相对复杂,严重依赖 Servlet API,JavaBean 组件类过于庞大

4、后端 MVC 模式

该模式是在 Model2 的基础上,对传统 MVC 模式的一种变化。涌现出很多基于 MVC 模式的开发框架,如 Struts、SpringMVC 等。再加上 Spring 开源框架强大的兼容特性,进而形成了可以适应绝大多数业务需求的经典框架组合,如 SSH、SSM 等。

  • 前端开发重度依赖后端开发环境
  • 前后端职责依旧纠缠不清,Controller 成为灰色地带

5、前端 MVC 模式(SPA)

随着 Ajax 的推出,标志着进入了 web 2.0 时代。前后端分工明确,通过 Ajax 接口关联,浏览器端变得复杂。

  • 前后端可以在约定接口后实现高效并行开发
  • 前端开发的复杂度控制比较困难

6、前端为主的 MV*模式

为了降低前端开发复杂度,涌现了大量的前端框架,如 EmberJS、KnockoutJS、AngularJS 等。原则是先按照类型分层,如 Templates、Controllers、Models 等,然后在层内按照业务功能切分。

好处:

  • 前后端职责清晰,在各自的工作环境开发,测试容易
  • 前端开发的复杂度可控,通过组件化组织结构
  • 部署相对独立

不足:

  • 前后端代码不能复用
  • 全异步不利于 SEO
  • 性能并非最佳,尤其是移动互联网的环境下
  • SPA 不能满足所有需求

7、全栈模式

随着 Node.js 的兴起,标志着全栈时代的到来,如 MEAN 框架组合、React+Redux 等。前端 UI 层,处理浏览器层的展现逻辑,HTML+CSS+JavaScript。后端 UI 层,处理路由、模板、数据获取等,前端可以自由调控。后端可以专注于业务逻辑层的开发。

好处:

  • 前后端的部分代码可以复用
  • 需要 SEO 可以在服务端同步渲染
  • 请求太多导致性能问题可以通过服务端缓解

挑战:

  • 需要前端对服务端编程有进一步的了解
  • Node 层与 Java 层能否高效通信尚需要验证
  • 需要更多经验才能对部署、运维层面熟悉了解
  • 还有许多历史遗留问题
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3197 引用 • 8215 回帖
  • Web
    119 引用 • 433 回帖 • 8 关注
  • MVC
    7 引用 • 119 回帖
  • 架构

    我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。

    143 引用 • 442 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖 • 1 关注
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    93 引用 • 113 回帖
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 758 关注
  • Visio
    1 引用 • 2 回帖 • 2 关注
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 441 关注
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    172 引用 • 516 回帖 • 1 关注
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 668 关注
  • OneDrive
    2 引用 • 4 关注
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    524 引用 • 4601 回帖 • 701 关注
  • PWA

    PWA(Progressive Web App)是 Google 在 2015 年提出、2016 年 6 月开始推广的项目。它结合了一系列现代 Web 技术,在网页应用中实现和原生应用相近的用户体验。

    14 引用 • 69 回帖 • 176 关注
  • Outlook
    1 引用 • 5 回帖
  • RYMCU

    RYMCU 致力于打造一个即严谨又活泼、专业又不失有趣,为数百万人服务的开源嵌入式知识学习交流平台。

    4 引用 • 6 回帖 • 55 关注
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1441 引用 • 10068 回帖 • 494 关注
  • CongSec

    本标签主要用于分享网络空间安全专业的学习笔记

    1 引用 • 1 回帖 • 29 关注
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 679 关注
  • Google

    Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。

    49 引用 • 192 回帖
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 132 关注
  • 工具

    子曰:“工欲善其事,必先利其器。”

    298 引用 • 763 回帖 • 1 关注
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    181 引用 • 821 回帖
  • 一些有用的避坑指南。

    69 引用 • 93 回帖
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • Firefox

    Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。

    7 引用 • 30 回帖 • 391 关注
  • JWT

    JWT(JSON Web Token)是一种用于双方之间传递信息的简洁的、安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 的形式安全的传递信息。

    20 引用 • 15 回帖 • 25 关注
  • OpenCV
    15 引用 • 36 回帖 • 2 关注
  • 百度

    百度(Nasdaq:BIDU)是全球最大的中文搜索引擎、最大的中文网站。2000 年 1 月由李彦宏创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。

    63 引用 • 785 回帖 • 100 关注
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 160 关注