WordPress仿站培训,软件工程最吃香的三个专业,wordpress帖子打赏观看,wordpress网站设计作业文章目录 JSP 和 ServletMVC 的演进1. JSP Model 12. JSP Model 23. MVC 的一般化4. MVC 的变体 总结 JSP 和 Servlet
如果你有使用 Java 作为主要语言开发网站的经历#xff0c;那么你一定听过别人谈论 JSP 和 Servlet。其中#xff0c;Servlet 指的是服务端的一种 Java 写… 文章目录 JSP 和 ServletMVC 的演进1. JSP Model 12. JSP Model 23. MVC 的一般化4. MVC 的变体 总结 JSP 和 Servlet
如果你有使用 Java 作为主要语言开发网站的经历那么你一定听过别人谈论 JSP 和 Servlet。其中Servlet 指的是服务端的一种 Java 写的组件它可以接收和处理来自浏览器的请求并生成结果数据通常它会是 HTML、JSON 等常见格式写入 HTTP 响应返回给用户。至于 JSP它的全称叫做 Java Server Pages它允许静态的 HTML 页面插入一些类似于“% %”这样的标记scriptlet而在这样的标记中还能以表达式或代码片段的方式嵌入一些 Java 代码在 Web 容器响应 HTTP 请求时这些标记里的 Java 代码会得到执行这些标记也会被替换成代码实际执行的结果嵌入页面中一并返回。这样一来原本静态的页面就能动态执行代码并将执行结果写入页面了。第一次运行时系统会执行编译过程并且这个过程只会执行一次JSP 会处理而生成 Servlet 的 Java 代码接着代码会被编译成字节码class 文件在 Java 虚拟机上运行。之后每次就只需要执行运行过程了Servlet 能够接受 HTTP 请求并返回 HTML 文本最终以 HTTP 响应的方式返回浏览器。 这个过程大致可以这样描述
编译过程JSP 页面 → Java 文件Servlet→ class 文件Servlet
运行过程HTTP 请求 class 文件Servlet→ HTML 文本MVC 的演进
MVC 这种经典的架构模式它早在 20 世纪 70 年代就被发明出来了直到现在互联网上的大多数网站都是遵从 MVC 实现的这足以见其旺盛的生命力。MVC 模式包含这样三层 控制器Controller恰如其名主要负责请求的处理、校验和转发。视图View将内容数据以界面的方式呈现给用户也捕获和响应用户的操作。模型Model数据和业务逻辑真正的集散地。 你可能会想这不够全面啊这三层之间的交互和数据流动在哪里别急MVC 在历史上经历了多次演进这三层再加上用户它们之间的交互模型是逐渐变化的。哪怕在今天不同的 MVC 框架的实现在这一点上也是有区别的。
1. JSP Model 1
JSP Model 1 是整个演化过程中最古老的一种请求处理的整个过程包括参数验证、数据访问、业务处理到页面渲染或者响应构造全部都放在 JSP 页面里面完成。JSP 页面既当爹又当妈静态页面和嵌入动态表达式的特性使得它可以很好地容纳声明式代码而 JSP 的 scriptlet又完全支持多行 Java 代码的写入因此它又可以很好地容纳命令式代码。
2. JSP Model 2
在 Model 1 中你可以对 JSP 页面上的内容进行模块和职责的划分但是由于它们都在一个页面上物理层面上可以说是完全耦合在一起因此模块化和单一职责无从谈起。和 Model 1 相比Model 2 做了明显的改进。 JSP 只用来做一件事那就是页面渲染换言之JSP 从全能先生转变成了单一职责的页面模板引入 JavaBean 的概念它将数据库访问等获取数据对象的行为封装了起来成为业务数据的唯一来源请求处理和派发的活交到纯 Servlet 手里它成为了 MVC 的“大脑”它知道创建哪个 JavaBean 准备好业务数据也知道将请求引导到哪个 JSP 页面去做渲染。
3. MVC 的一般化
JSP Model 2 已经具备了 MVC 的基本形态但是它却对技术栈有着明确限制——Servlet、JSP 和 JavaBean。今天我们见到的 MVC已经和实现技术无关了并且在 MVC 三层大体职责确定的基础上其中的交互和数据流动却是有许多不同的实现方式的。不同的 MVC 框架下实现的 MVC 架构不同有时即便是同一个框架不同的版本之间其 MVC 架构都有差异比如 ASP.NET MVC在这里我只介绍最典型的两种情况如果你在学习的过程中见到其它类型请不要惊讶重要的是理解其中的原理。
第一种
上图是第一种典型情况这种情况下用户请求发送给 Controller而 Controller 是大总管需要主动调用 Model 层的接口去取得实际需要的数据对象之后将数据对象发送给需要渲染的 ViewView 渲染之后返回页面给用户。在这种情况下Controller 往往会比较大因为它要知道需要调用哪个 Model 的接口获取数据对象还需要知道要把数据对象发送给哪个 View 去渲染View 和 Model 都比较简单纯粹它们都只需要被动地根据 Controller 的要求完成它们自己的任务就好了。
第二种
上图是第二种典型情况请和第一种比较注意到了区别没有这种情况在更新操作中比较常见Controller 调用 Model 的接口发起数据更新操作接着就直接转向最终的 View 去了View 会调用 Model 去取得经过 Controller 更新操作以后的最新对象渲染并返回给用户。在这种情况下Controller 相对就会比较简单而这里写操作是由 Controller 发起的读操作是由 View 发起的二者的业务对象模型可以不相同非常适合需要 CQRSCommand Query Responsibility Segregation命令查询职责分离的场景我在 [第 08 讲] 中会进一步介绍 CQRS。
4. MVC 的变体
MVC 的故事还没完当它的核心三层和它们的基本职责发生变化这样的架构模式就不再是严格意义上的 MVC 了。这里我介绍两种 MVC 的变体MVP 和 MVVM。MVP 包含的三层为 Model、View 和 Presenter它往往被用在用户的界面设计当中和 MVC 比起来Controller 被 Presenter 替代了。 Model 的职责没有太大的变化依然是业务数据的唯一来源。View 变成了纯粹的被动视图它被动地响应用户的操作来触发事件并将其转交给 Presenter反过来它的视图界面被动地由 Presenter 来发起更新。Presenter 变成了 View 和 Model 之间的协调者Middle-man它是真正调度逻辑的持有者会根据事件对 Model 进行状态更新又在 Model 层发生改变时相应地更新 View。 MVVM 是在 MVP 的基础上将职责最多的 Presenter 替换成了 ViewModel它实际是一个数据对象的转换器将从 Model 中取得的数据简化转换为 View 可以识别的形式返回给 View。View 和 ViewModel 实行双向绑定成为命运共同体即 View 的变化会自动反馈到 ViewModel 中反之亦然。
总结
MVC 的几种形式和变体。 JSP Model 1请求处理的整个过程全部都耦合在 JSP 页面里面完成JSP Model 2MVC 分别通过 JavaBean、JSP 和 Servlet 解耦成三层MVC 的常见形式一数据由 Controller 调用 Model 来准备并传递给 View 层MVC 的常见形式二Controller 发起对数据的修改在 View 中查询修改后的数据并展示二者分别调用 ModelMVPPresenter 扮演协调者对 Model 和 View 实施状态的更新MVVMView 和 ViewModel 实行数据的双向绑定以自动同步状态。
你知道的越多你不知道的越多。