Java Web の Server 架构(ver. 0.1.1)

说起 Java Web 后端,吾辈偏向于用 Spring Boot, 可为 SSM 框架提供开箱即用的设置,再加上 Freemarker 自动生成 CRUD,轻松,简单,愉快的享受后端开发。

嗯,简单说下 MVC(Model View Controller) 框架,先上图。

1. Model

Model 层是实现业务逻辑的部分,负责数据和改变数据的操作。

将现实中的事物抽象为模型,比如酒店,可以用名称,位置,房型,价格等属性的集合来表示;在 Java 中这种集合被称为 Entity(实体类),作用一般是做数据表映射,一个 Entity 对应一个表,其中的属性分别对应表中的字段,方便程序操作数据库中的表。

Java 调用 Python 算法可通过 Jython(Java 编写的 Python 解释器)简单实现,不过速度过慢;也可通过 I/O 交互,Java 输出数据,调用 Python 读取并处理。Python 将处理结果输出到文件,Java 读取并进行后续工作。

2. Controller

配合 View 层,提供 API,接收和处理全部请求,可将接收到的数据封装为 Entity 分发给 Model 层,要求其改变内存,数据库(或其他数据持久层)状态,也可将从 Model 层获取的 Entity 转化成 JSON 格式返回 View 层或交给给前端模板处理。此功能由 Spring MVC 实现。

3. View

发送指令到 Controller 层提供的 API,并接收返回的数据(如果有)。

1.1. 后端模板方案(适合全栈)

使用 Freemarker 在 Server 把模板与数据进行合成,生成 HTML,通过 Spring MVC 的 Controller 发送给 Client(浏览器)。

1.2. 前后端分离方案(小项目不推荐)

推荐 FED 的文章:传送门

吾辈一般用 SPA(Single Page Application) 方案,后端只负责计算和提供数据,完全不处理展现。而前端则负责获取,处理数据并在 Client 生成 HTML 的工作。两者通过 JSON 格式的 RESTFul 接口交互。

1.2.1. 后端

Spring MVC 的 Controller 只提供 JSON 格式的 RESTFul API。

1.2.1. 前端

使用 vue.js 或 React, 在 Client 调用 AJAX 接收 JSON 数据,生成 HTML 展示给用户。

考虑到项目有 SEO 的需求,可使用基于 vue.js 的服务端框架 Nuxt.js。或参考淘宝的做法,在 Server 端引入 Node.js,在这一层把模板与数据进行合成,生成 HTML 传递给 Client(或爬虫)。

附录 1

技术栈(后端模板方案)

P.S. 虽说看起来不是很 fashion,但结构简单,成熟稳定,易于维护,且有天然的 SEO 优势,适合快速搭建以展示为主的小项目。随着项目扩大也能轻松的改用 vue.js 重构。

附录 2

后端语言的比较和选择

  1. 性能
    Go > Java > Node.js > PHP

  2. 安全
    Java 有统一的 SSM/SSH 框架,安全性无须担心。即便服务器被攻破,黑客也只能拿到 war/jar 等编译后的 class 文件,而不是源代码。
    PHP 的安全与稳定更依赖开发者的水平。

  3. 迭代
    PHP 只需将源代码上传至服务器即可完成热更新,超方便;而 Java 需要编译后在上传(也可编写脚本自动部署)。

发现已经有不少人写过啦,那我就偷下懒,附上链接:

Java和PHP在Web开发方面的比较
Web开发技术选型之Java与PHP
Most Popular Technologies