浅聊前后端分离开发和前后端不分离开发模式

1.先聊聊Web开发的开发框架Spring MVC

首先要知道,Spring MVC是Web开发领域的一个知名框架,可以开发基于请求-响应模式的Web应用。而Web开发的本质是遵循HTTP(Hyper Text Transfer Protocol: 超文本传输协议)协议【发请求,给响应】。所以作为服务端,只要能运行一个服务,此服务监听某个端口上由客户端发送过来的请求,然后获取请求数据,进行业务处理后,最后给客户端发送一个响应,就可以实现Web开发。所以理论上不使用Web开发框架(如Spring MVC)甚至不使用Servlet API,也可以实现Web开发。

比如经典的网络框架:Netty 就脱离了Servlet API。Netty开发的程序启动后,就监听某个端口上发送过来的数据,然后自己解析这些数据,进行业务处理,处理完成后,给客户端进行响应(按照客户端可以理解的数据格式向其响应数据)。【补充:Netty框架基于TCP协议。同时,Netty也支持UDP协议、HTTP协议、WebSockets协议、SSL/TLS协议等多种协议。所以,虽然Netty主要基于TCP协议,但它也具有广泛的协议支持能力,适用于各种不同类型的网络通信需求。

通过以上分析可知,想要实现Web开发中的请求-响应。需要客户端和服务端事先约定好数据格式。众所周知的数据格式就是HTTP协议。当客户端根据HTTP协议给服务端传输数据,服务端就可以方便的进行解析;当服务端根据HTTP协议给客户端传输数据,客户端也可以方便的进行解析。

2. 从人的角度理解前后端分离开发

前端页面由前端开发人员编程实现,后端业务逻辑由后端开发人员编程实现。这就是我一开始理解的前后端分离。

3. 从业务逻辑的角度理解前后端分离开发

3.1 前后不分离开发

前端页面的跳转逻辑也是由开发人员自己编写控制的。比如在登录页面上输入用户名和密码登录成功后,需要跳转到系统首页,这个过程需要通过后端的业务逻辑控制进行跳转【这个就叫做前后不分离!】。此时,这个开发人员不仅要编写后端的业务逻辑,还要控制页面的数据渲染和页面跳转逻辑。如下图:

通常在前后端不分离的开发模式中,需要在后端使用 转发 或 重定向 跳转到指定页面。并且服务端返回的页面是完整的页面(暂不考虑Ajax),即服务端返回的是页面结构 + 数据。【这种前后端不分离的开发模式,也成为**服务端渲染,**渲染就是把数据填充到页面上】

3.2 前后分离开发

服务端不再控制页面的跳转逻辑,以及页面数据的如何填充。如下图:

所以可以看出,前后端分离,本质上是数据和页面分离。即数据由后端(服务端)负责,页面由前端负责。在前后端分离开发模式下,服务端给客户端响应的数据通常是 JSON格式的数据。

前后端分离开发模式下,如果使用Spring MVC框架,使用 @RestController 和 @ResponseBody注解。

4. 前后端分离开发模式举例

Spring MVC的经典例子。客户端发送一个请求给服务端,服务端只响应数据给客户端。如下图:

5. 前后端不分离开发模式举例

在前后端不分离开发模式中,需要使用到模板引擎,常见的模板引擎有:Velocity, JSP,Freemarker,Thymeleaf等。SpringBoot官方推荐的模板引擎是Thymeleaf,其开发的步骤如下(具体开发案例可以查询网络,有很多案例):

(1)引入 spring-boot-starter-thymeleaf 依赖;

(2)编写页面模板文件(就是 html文件);

(3)接收客户端请求,进行业务处理,然后跳转到指定页面;

(4)使用Thymeleaf语法,给页面填充数据;

(5)把整个页面响应给客户端。

相关推荐
一切顺势而行几秒前
python 文件目录操作
java·前端·python
014-code5 分钟前
Vue3 性能优化实战
前端·vue.js·性能优化
css趣多多1 小时前
vue2项目改造为vue3遇到的问题以及解决办法
前端·vue.js·elementui
哆啦A梦15881 小时前
Vue3魔法手册 作者 张天禹 09_props的使用
前端·vue.js·typescript
哆啦A梦15882 小时前
Vue3魔法手册 作者 张天禹 11_自定义hooks
前端·vue.js·typescript
广州华水科技2 小时前
单北斗变形监测在大坝安全和地质灾害预警中的应用与优势
前端
阿珊和她的猫2 小时前
深入理解 Vue 3 的 `setup` 函数
前端·vue.js·状态模式
weixin199701080162 小时前
微店商品详情页前端性能优化实战
前端·性能优化
星火开发设计2 小时前
STL 容器:vector 动态数组的全面解析
java·开发语言·前端·c++·知识
天開神秀2 小时前
解决 n8n 在 Windows 上安装社区节点时 `spawn npm ENOENT/EINVAL` 错误
前端·windows·npm