【 <一> 炼丹初探:JavaWeb 的起源与基础】之 JavaWeb的诞生:从 CGI 到 Servlet 的技术演进
一、CGI:老黄历里的“笨办法”
话说当年,互联网刚起步那会儿,网站开发还是个“摸着石头过河”的活儿。那时候,大家伙儿都用 CGI[1] 来处理动态内容。CGI 这玩意儿,说白了就是个“传话筒”,浏览器发个请求,服务器就找个脚本跑一跑,再把结果扔回去。听着挺简单,但用起来可真是“笨驴拉磨——费劲”。
CGI 的问题在于,每次请求都得开个新进程,服务器资源就跟“撒芝麻盐”似的,哗哗往外撒。那时候的服务器性能,跟现在的比,简直就是“小巫见大巫”。所以,CGI 虽然能干活,但效率低得让人直挠头。
二、Servlet:Java 的“弯道超车”
时间一晃到了 1997 年,Java 这匹“黑马”已经在编程界闯出了名堂。Sun 公司(后来被 Oracle 收购了)瞅准机会,推出了 Servlet[2] 技术。Servlet 这玩意儿,说白了就是 Java 版的 CGI,但它可比 CGI 聪明多了。
Servlet 跑在 Java 虚拟机(JVM)上,不用每次请求都开新进程,而是用线程来处理。这就好比“一锅炖”,省时省力还省资源。Servlet 一出来,CGI 的日子就不好过了,简直就是“老黄瓜刷绿漆——装嫩”也救不了。
三、JSP:Servlet 的“马甲”
Servlet 虽然好用,但写起来有点“费劲”。Java 代码和 HTML 混在一起,看得人眼花缭乱。于是,Sun 公司又整出了 JSP[3],全称 JavaServer Pages。JSP 这玩意儿,说白了就是给 Servlet 穿了个“马甲”,让开发人员能像写 HTML 一样写 Java 代码。
JSP 一出来,大家伙儿都乐了,毕竟“懒人推动科技进步”嘛。JSP 把 Java 代码嵌在 HTML 里,用起来就跟“吃饭喝水”一样简单。不过,JSP 本质上还是 Servlet,运行时会被编译成 Servlet 代码。所以,JSP 和 Servlet 的关系,就像“一个萝卜一个坑”,谁也离不开谁。
四、Servlet 容器:Servlet 的“靠山”
Servlet 虽然厉害,但它得有个“靠山”才能干活。这个“靠山”就是 Servlet 容器[4],比如 Tomcat、Jetty 这些。Servlet 容器负责管理 Servlet 的生命周期,处理请求和响应,还得管线程池、连接池这些杂七杂八的事儿。
Servlet 容器就像个“管家”,Servlet 只管干活,其他的事儿都交给容器处理。这样一来,开发人员就能专心写业务逻辑,不用操心那些“鸡毛蒜皮”的事儿。Servlet 容器的出现,让 JavaWeb 开发变得“顺风顺水”,效率也蹭蹭往上涨。
五、MVC 框架:Servlet 的“升级版”
Servlet 和 JSP 虽然好用,但随着业务越来越复杂,代码也变得越来越“臃肿”。这时候,MVC 框架[5] 就应运而生了。MVC 全称 Model-View-Controller,是一种设计模式,把业务逻辑、数据和界面分开处理。
MVC 框架一出来,大家伙儿都“拍手叫好”。Spring MVC、Struts 这些框架,把 Servlet 和 JSP 的活儿分得明明白白,代码结构清晰得跟“剥洋葱”似的。MVC 框架的出现,让 JavaWeb 开发进入了“新时代”,开发效率和质量都上了一个台阶。
六、RESTful:Servlet 的“新潮流”
时间到了 21 世纪,互联网进入了“移动时代”,RESTful[6] 风格成了新潮流。RESTful 是一种架构风格,强调资源的表述和状态转移。Servlet 虽然老了点,但也能支持 RESTful,毕竟“姜还是老的辣”。
RESTful 一出来,大家伙儿都“跟风”用上了。Spring Boot 这些框架,把 RESTful 和 Servlet 结合得天衣无缝,开发起来就跟“搭积木”似的。RESTful 的出现,让 JavaWeb 开发更加灵活,适应了新时代的需求。
七、WebSocket:Servlet 的“新挑战”
随着 Web 应用越来越复杂,传统的 HTTP 请求-响应模式有点“力不从心”了。这时候,WebSocket[7] 技术就冒出来了。WebSocket 是一种全双工通信协议,能让浏览器和服务器实时交互。
WebSocket 一出来,大家伙儿都“眼前一亮”。Servlet 虽然也能支持 WebSocket,但毕竟“年纪大了”,处理起来有点“吃力”。不过,Servlet 4.0 引入了对 WebSocket 的支持,算是“老树发新芽”,勉强跟上了时代的步伐。
八、Servlet 的未来:还能“撑多久”?
Servlet 从 1997 年诞生到现在,已经走过了 20 多个年头。虽然它依然是 JavaWeb 开发的“中流砥柱”,但面对新技术、新框架的冲击,Servlet 的未来有点“悬”。
现在,微服务、云原生这些新概念层出不穷,Servlet 的“老本”还能吃多久,谁也说不准。不过,Servlet 毕竟“底子厚”,短时间内还不会被淘汰。至于未来咋样,那就得“骑驴看唱本——走着瞧”了。
九、写在最后
Servlet虽然已经很多年了,很多人在学习Java的时候,直接就开始学框架,以代替学习JavaWeb,然而,Tomcat与Servlet的诸多功能,API,都依然运行在你的程序中,你使用的javax的包,tomcat的配置,servlet的映射,过滤器和拦截器,在springboot的项目中,依然在用,很多情况下,在使用它们的时候,人们并不区分这些内容是否属于servlet,还是属于当前使用的其他框架。因为其未做严格区分,所以会导致代码的风格混淆,或者有些内容没有办法托管给spring管理(servlet有些时候更底层),要说重点学习虽说不必,了解一下还是必须的。
=========================================================================
专有名词解释
- CGI:Common Gateway Interface,通用网关接口,是一种让 Web 服务器与外部程序交互的标准协议。
- Servlet:Java 编写的服务器端程序,用于处理客户端请求并生成动态 Web 内容。
- JSP:JavaServer Pages,一种基于 Java 的技术,用于创建动态 Web 页面。
- Servlet 容器:负责管理 Servlet 生命周期的软件组件,如 Tomcat、Jetty 等。
- MVC 框架:Model-View-Controller,一种设计模式,用于将应用程序分为模型、视图和控制器三层。
- RESTful:一种基于 HTTP 协议的架构风格,强调资源的表述和状态转移。
- WebSocket:一种全双工通信协议,允许浏览器和服务器进行实时交互。