当前位置: 首页 > news >正文

【 <一> 炼丹初探: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有些时候更底层),要说重点学习虽说不必,了解一下还是必须的。

=========================================================================

专有名词解释

  1. CGI:Common Gateway Interface,通用网关接口,是一种让 Web 服务器与外部程序交互的标准协议。
  2. Servlet:Java 编写的服务器端程序,用于处理客户端请求并生成动态 Web 内容。
  3. JSP:JavaServer Pages,一种基于 Java 的技术,用于创建动态 Web 页面。
  4. Servlet 容器:负责管理 Servlet 生命周期的软件组件,如 Tomcat、Jetty 等。
  5. MVC 框架:Model-View-Controller,一种设计模式,用于将应用程序分为模型、视图和控制器三层。
  6. RESTful:一种基于 HTTP 协议的架构风格,强调资源的表述和状态转移。
  7. WebSocket:一种全双工通信协议,允许浏览器和服务器进行实时交互。

相关文章:

  • VulnHub-DarkHole_2靶机搭建保姆级教程2025
  • C++杂记——RAII (Resource Acquisition Is Initialization)
  • 【Java项目】基于SpringBoot的会员制医疗预约服务管理信息系统
  • 算法 BFS搜爆路径问题
  • 深搜专题6:迷宫问题
  • Python爬虫:一文掌握PyQuery模块
  • 【漫话机器学习系列】109.线性无关(Linearly Independent)
  • Rust~String、str、str、String、Box<str> 或 Box<str>
  • 从零开始构建高效Spring Boot应用:实战案例与最佳实践
  • 【Linux】I/O操作
  • k8s学习记录:环境搭建二(基于Kubeadmin)
  • C语言(3)—循环、数组、函数的详解
  • CTF-web: 查看python代码抽象语法树
  • 基于SpringBoot的“青少年心理健康教育网站”的设计与实现(源码+数据库+文档+PPT)
  • 【Python · PyTorch】循环神经网络 RNN(基础应用)
  • HTTP四次挥手是什么?
  • 本地搭建Ollama运行各种平台的大模型(deepseek),配合AnythingLLM-UI界面使用
  • Python--面向对象进阶(下)
  • LeetCode-154. 寻找旋转排序数组中的最小值 II
  • HarmonyOS 中 Navigation 组件的应用困境与应对策略
  • 中国至越南河内国际道路运输线路正式开通
  • 著名连环画家庞邦本逝世
  • 日本广岛大学一处拆迁工地发现疑似未爆弹
  • 英国首相斯塔默住所起火,警方紧急调查情况
  • 江西吉水通报一男子拒服兵役:不得考公,两年内经商、升学等受限
  • 云南一男子持刀致邻居3死1重伤案二审开庭,未当庭宣判