Java Web,是用 Java 技术来解决相关web互联网领域的技术栈。web 包括:web 服务端和 web 客户端两部分。Java 在客户端的应用有 Java Applet,不过使用得很少,Java 在服务器端的应用非常的丰富,比如 Servlet,JSP、第三方框架等等。Java 技术对 Web 领域的发展注入了强大的动力。
~
本篇内容包括:JavaWeb 简介、JavaWeb 技术架构演进的各个阶段,即 JavaWeb-Servlet 阶段,JavaWeb-MVC 阶段(SSM/SSH)以及 JavaWeb-SpringBoot 阶段 的相关内容!
Java Web,是用 Java 技术来解决相关web互联网领域的技术栈。web 包括:web 服务端和 web 客户端两部分。Java 在客户端的应用有 Java Applet,不过使用得很少,Java 在服务器端的应用非常的丰富,比如 Servlet,JSP、第三方框架等等。Java 技术对 Web 领域的发展注入了强大的动力。
在 Web 应用处于最初期时,主要用于浏览静态 Html 页面,浏览器通过请求向 Http 服务器端(比如 Apache、Nginx)获取并解析 Html 页面。
直到后来,随着互联网技术的发展,需要开始可以提供一些扩展机制能够让 HTTP 服务器调用服务端程序,以此来使用户通过一些交互操作,来获取动态结果。而 Sun 公司做出的改变,是推出了 Servlet 技术。
我们可以把 Java 中的 Servlet 理解为一个可以运行在服务器上的 Java 程序,但是这个 Java 程序,并不能独立运行(因为 Servlet 没有 main 方法),需要部署在相应的 Servlet 容器中,比如 Tomcat 和 Jetty。
Java Servlet 出现后,最主要的一个使用场景就是:「Servlet + JavaBean + JSP」 的方式.
在 Java Servlet 出现以前,Java 操控网页的方式如下:
标签中放入主要代码。那时候的 Web 开发基本都是在 JSP+JavaBean 上完成的。更有甚着直接把页面、逻辑、数据处理全都写在 JSP 上,但这种方式开发的项目代码不仅乱、而且耦合性相当高,造成项目难以维护。在 Java Servlet 出现以后,,Java 操控网页的方式如下:
Ps:在此时,JSP+JavaBean+Servlet 这种模式上已经开始有点 MVC 的影子了,但是这种模式还不能称之为一个比较完善的 MVC 设计模式。但这种模式相对于之前的两种模式(JSP、JSP+JavaBean)来说分工更明确,抽取出了 Servlet 层,体现了一个简单的分层思想。
MVC(Model–view–controller)模式,最早由 Trygve Reenskaug 在 1978 年提出,它是软件工程中的一种软件架构模式,其把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。MVC模式的目的是实现一种动态的程式设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式透过对复杂度的简化,使程序结构更加直观。软件系统透过对自身基本部分分离的同时也赋予了各个基本部分应有的功能。
MVC 模式各部分之间的通信方式:View 传送指令到 Controller ,Controller 完成业务逻辑后,要求 Model 改变状态,Model 将新的数据发送到 View,用户得到反馈,所有通信都是单向的。
Ps:接受用户指令时,MVC 可以分成两种方式。一种是通过 View 接受指令,传递给 Controlle、另一种是直接通过 Controlle 接受指令。一般在实际项目中往往采用更灵活的方式,通常会把这两种方式结合在一起。
MVP(Model View Presenter)是由 MVC 演变而来,它和 MVC 的相同之处在于:Controller / Presente 都是负责业务逻辑,Model 管理数据,View 负责显示。
不过在 MVP 中 View 并不直接与 Model 交互,它们之间的通信是通过 Presenter (MVC 中的 Controller)来进行的,即使用 Presenter 对视图和模型进行了解耦,让它们彼此都对对方一无所知,沟通都通过 Presenter 进行。
MVVM 全名为 Model View ViewModel ,早在 2004 年,Martin Fowler 发表了一篇名为 Presentation Model (以下简称为 PM 模式)的文章,PM 模式与 MVP 比较相似,它从视图层中分离了行为和状态;PM 模式中创建了一个视图的抽象,叫做 Presentation Model,而视图也成为了这个模型的『渲染』结果。MVVM 与 Martin Fowler 所说的 PM 模式其实是完全相同的,Fowler 提出的 PM 模式是一种与平台无关的创建视图抽象的方法,而 Gossman 的 MVVM 是专门用于 WPF 框架来简化用户界面的创建的模式;我们可以认为 MVVM 是在 WPF 平台上对于 PM 模式的实现。
Ps:可以看到,从 MVC->MVP->MVVM,就像一个打怪升级的过程,后者解决了前者遗留的问题,把前者的缺点优化成了优点。同样的 Demo 功能,代码从最开始的一堆文件,优化成了最后只需要 20 几行代码就完成
在 MVC(Model View Controller)思想开始成为主流是,JavaWeb 出现了两种最火爆的框架模式:SSH 框架/SSM 框架。
SSH是 struts+spring+hibernate 的一个集成框架,是 16 年之前较为流行的一种 Web 应用程序开源框架。
集成 SSH 框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层,以帮助开发人员在短期内搭建结构清晰、可复用性好、维护方便的 Web 应用程序。
应用程序被分割成这三大部分之后,各自处理自己的任务。视图层通过提取用户的输入信息,提交到控制器之后,控制器根据某种选择来决定这个请求交由给模型层来处理,模型层根据业务逻辑的代码处理用户请求并返回数据,并最终用视图层展示给用户。
SSM(Spring+SpringMVC+MyBatis)框架集由 Spring、MyBatis 两个开源框架整合而成,其中 SpringMVC 是 Spring 中的部分内容,常作为数据源较简单的 Web 项目的框架。
# Spring
Spring 就像是整个项目中装配 Bean 的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象。也可以称之为项目中的粘合剂。
Spring 的核心思想是 IoC(控制反转),即不再需要程序员去显式地 new 一个对象,而是让 Spring 框架帮你来完成这一切。
# SpringMVC
SpringMVC 在项目中拦截用户请求,它的核心 Servlet 即 DispatcherServlet 承担中介或是前台这样的职责,将用户请求通过 HandlerMapping 去匹配 Controller,Controller 就是具体对应请求所执行的操作。SpringMVC 相当于 SSH 框架中 struts。
# Mybatis
Mybatis 是对 jdbc 的封装,它让数据库底层操作变的透明。Mybatis 的操作都是围绕一个 sqlSessionFactory 实例展开的。mybatis通 过配置文件关联到各实体类的 Mapper 文件,Mapper 文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过 sqlSessionFactory 拿到一个 sqlSession,再执行 Sql 命令。
页面发送请求给控制器,控制器调用业务层处理逻辑,逻辑层向持久层发送请求,持久层与数据库交互,后将结果返回给业务层,业务层将处理逻辑发送给控制器,控制器再调用视图展现数据。
SpringBoot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,SpringBoot 致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
SpringBoot 特点:
Ps:SpringBoot 虽然目的是为了简化 Spring,似乎看起来无需去学习 Spring 的繁琐配置,但是如果没有忍受过Spring的繁琐配置,没有经历过架构模式的演进以及 JavaWeb 基础的话,在使用SpringBoot 的过程中就容易出现没有遇到过的错误,也不知道如何去解决。