前言
作为一个java小白,学web方向十分痛苦,知识点很多,很杂,比如前端有html、css、JavaScript、JQuery,前端框架bootstrap等,后端的Servlet、jsp、EL、JSTL,数据库方向有JDBC、MySQL,框架有MyBatis、spring、springmvc、springboot...光是这些五花八门的名称就搞得我心态爆炸,如果不写篇文章来梳理梳理就被这东西搞疯了。
我们可以按照web开发的历史进程,来回顾和web大哥一起发展的帮派小弟JavaWeb。
古代时期--静态页面时代
互联网刚刚发展的时候,就像人类文明诞生前夕一样,刀耕火种
那时的网站都相当简陋,功能简单。网站都是静态的。即事先编辑好,只能浏览页面,没有人机交互,不能动态上传删除,只能程序员手动添加。
近代时期--CGI时代
新的技术CGI诞生,结束了只有静态网页的时代。
问题产生:怎么把静态网页变成动态网页?
我们都知道,动画其实就是25幅页面,连续播放,利用人眼的视觉暂留效应,将一幅幅图片组合成动画。
同理,动态页面也是如此,如果服务器能对浏览器发来的请求在服务器端一一处理,并返回给浏览器,那么网页就动起来了!
什么是CGI?
CGI全称是通用网关接口(Common Gateway Interface),是一个可执行的程序或者可运行的脚本,几乎所有的语言都能写CGI,像Python、C。
CGI工作原理:
浏览器发送一个CGI请求后,服务器会启动一个进程运行CGI程序或脚本,由CGI来处理数据,并将结果返回给服务器,服务器再将结果返回给浏览器
CGI的特点
1.由Http Server唤起。常见的Http Server如Apache,Lighttpd,nginx都支持CGI
2.CGI单独启动进程,并且每次调用都会重新启动进程
3.可以用任何语言编写,只要该语言支持标准输入、输出和环境变量
CGI的缺点
1.消耗资源多:每个请求都会启动一个CGI进行,进程消耗资源15M内存的话,同时到达100个请求的话,就会占用1.5G内存。如果请求更多,资源消耗是不可想象的。
2.慢:启动进程本身就慢。每次启动进程都需要重新初始化数据结构等,会变得更慢。
现代时期-Servlet时代
在CGI繁荣发展的时代,Java还没有发展起来。当Java开始参与历史,引领潮流的时候,也必然会借鉴和改进之前的技术和思想。
鉴于CGI的一些缺点,Java Web在开始设计的时候就想出了一种解决方案 -- Servlet
什么是Servlet?
本质上是一段无法独立运行的Java程序,必须运行在服务器中,由服务器调用执行。作用是对服务器接收过来的请求进行处理,并对浏览器返回结果。
Servlet的工作原理:
Servlet的特点
- CGI每个请求启动一个进程,而Servlet是更轻量的线程。
- CGI每个进程都需要初始化,Servlet只初始化一次实例就行。
- Servlet依托于Java语言,具有很好的跨平台型。CGI根据语言的不同,跨平台型不同。
- CGI与数据库连接需要重连,Servlet可以使用数据库连接池。
- Java有丰富的、各种各样的库函数。
Servlet的缺点
不难发现,html代码是写在Java代码中,对于前端人员,难以开发和修改,此时,JSP粉墨登场
Servlet的好兄弟JSP
Servlet其实是在java代码中写HTML代码,换个思路,我们也可以在HTML代码中写Java代码,这就是JSP的特性。
什么是JSP?
JSP,全称Java Server Pages,功能就是能在Html中写Java代码,其本质上是一个Servlet程序。
JSP的工作原理
- 您的浏览器发送一个HTTP请求给服务器。
- Web服务器识别出这是一个对JSP网页的请求,并且将该请求传递给JSP引擎。通过使用URL或者.jsp文件来完成。
- JSP引擎从磁盘中载入JSP文件,然后将它们转化为servlet。这种转化只是简单地将所有模板文本改用println()语句,并且将所有的JSP元素转化成Java代码。
- JSP引擎将servlet编译成可执行类,并且将原始请求传递给servlet引擎。
- Web服务器的某组件将会调用servlet引擎,然后载入并执行servlet类。在执行过程中,servlet产生HTML格式的输出并将其内嵌于HTTP response中上交给Web服务器。
- Web服务器以静态HTML网页的形式将HTTP response返回到您的浏览器中。
- 最终,Web浏览器接收HTTP response中动态产生的静态HTML网页,由静到动最终实现。
用一句话来讲:每个JSP都最终会变成对应的Servlet执行
JSP的缺点
在HTML代码中写Java代码,方便了前端人员,但是苦了后端人员。因此,单纯使用JSP,开发效率依旧不高。
我们结合Servlet和JS的功能来看,发现无论是JSP还是Servlet,其中都能书写Html和Java代码。这样功能岂不是重复了吗?
从功能的角度看,两者的功能是重复了,但是从两者的特性看,Servlet非常适合逻辑处理(因为它是Java代码),而JSP非常适合页面展示,(因为主要是html代码)
结合两者的优缺点,诞生了Web开发中最重要的架构设计模式:MVC
当代时期-MVC模式
MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller):
- Controller——负责转发请求,对请求进行处理
- View——负责界面显示
- Model——业务功能编写(例如算法实现)、数据库设计以及数据存取操作实现
工作原理:
- 请求发来后,会首先经过Controller层处理
- 根据请求进行处理,返回的结果封装成对象Model
- 将Model传递给JSP,然后JSP负责取出数据展示就够了
因此,后端开发人员只负责编写Servlet,前端人员负责JSP,极大提升了开发效率。
。