01 | Web 容器学习路径

1.Web容器简介

早期 Web 应用用于浏览新闻等静态页面,HTTP 服务器(如 Apache、Nginx)向浏览器返回静态 HTML,浏览器负责解析 HTML,将结果呈现给用户。

随着互联网的发展,我们已经不满足于仅仅浏览静态页面,还希望通过一些交互操作,来获取动态结果,因此也就需要一些扩展机制能够让 HTTP 服务器调用服务端程序

Sun 公司推出 Servlet 技术。可把 Servlet 简单理解为运行在服务端的 Java 小程序,但 Servlet 没有 main 方法,不能独立运行,必须把它部署到 Servlet 容器中,由容器实例化并调用 Servlet。

Tomcat 和 Jetty 就是一个 Servlet 容器。为了方便使用,它们也具有 HTTP 服务器的功能,因此 Tomcat 或者 Jetty 就是一个“HTTP 服务器 + Servlet 容器”,我们也叫它们 Web 容器

其他应用服务器如 JBoss 和 WebLogic,它们不仅仅有 Servlet 容器的功能,也包含 EJB 容器,是完整的 Java EE 应用服务器。从这个角度看,Tomcat 和 Jetty 算是一个轻量级的应用服务器

微服务架构日渐流行,开发人员更喜欢稳定、轻量级的应用服务器,并且应用程序用内嵌的方式来运行 Servlet 容器。选择轻量级是因为在微服务架构下,我们把一个大而全的单体应用,拆分成一个个功能单一的微服务,在这个过程中,服务数量必然增加,但为了减少资源消耗,且降低部署成本,我们希望运行服务的 Web 容器也是轻量级的,Web 容器本身应该消耗较少的内存和 CPU 资源,并且由应用本身来启动一个嵌入式的 Web 容器,而不是通过 Web 容器来部署和启动应用,这样可以降低应用部署的复杂度。

因此轻量级的 Tomcat 和 Jetty 就是一个很好的选择,并且 Tomcat 它本身也是 Spring Boot 默认的嵌入式 Servlet 容器。最新版本 Tomcat 和 Jetty 都支持 Servlet 4.0 规范。

2.补充知识

操作系统基础

Java 语言是对操作系统 API 的封装,上层应用包括 Web 容器都是通过操作系统来工作的。操作系统方面应该掌握它的工作原理,如什么是进程、内核、内核空间、用户空间、进程间通信的方式、进程和线程的区别、线程同步的方式、什么是虚拟内存、内存分配的过程、什么是 I/O、I/O 模型、阻塞与非阻塞区别、同步与异步区别、网络通信的原理、OSI 七层网络模型以及 TCP/IP、UDP 和 HTTP 协议。操作系统的学习,推荐《UNIX 环境高级编程》这本经典书籍。
在这里插入图片描述

Java语言基础

Java 的基础知识包括 Java 基本语法、面向对象设计的概念(封装、继承、多态、接口、抽象类等)、Java 集合的使用、Java I/O 体系、异常处理、基本的多线程并发编程(包括线程同步、原子类、线程池、并发容器的使用和原理)、Java 网络编程(I/O 模型 BIO、NIO、AIO 的原理和相应的 Java API)、Java 注解以及 Java 反射的原理等。此外还需要了解一些 JVM 的基本知识,如 JVM 的类加载机制、JVM 内存模型、JVM 内存空间分布、JVM 内存和本地内存的区别以及 JVM GC 的原理等。推荐的经典书籍有《Java 核心技术》、《Java 编程思想》、《Java 并发编程实战》和《深入理解 Java 虚拟机:JVM 高级特性与最佳实践》等。

Java Web开发基础

具备了一定的操作系统和 Java 基础就可以开始学习 Java Web 开发,学习一些通用的设计原则和设计模式。这个阶段的核心任务是了解 Web 的工作原理,同时提高设计能力,注重代码质量。可以从学习 Servlet 和 Servlet 容器开始。不少同学跳过这个阶段直接学 Web 框架,结果事倍功半。为什么这么说呢?Web 框架的本质是,开发者在使用某种语言编写 Web 应用时,总结出的一些经验和设计思路。很多 Web 框架都是从实际的 Web 项目抽取出来的,其目的是用于简化 Web 应用程序开发。

我以 Spring 框架为例,给你讲讲 Web 框架是怎么产生的。Web 应用程序的开发主要是完成两方面的工作。设计并实现类,包括定义类与类之间的关系,以及实现类的方法,方法对数据的操作就是具体的业务逻辑。类设计好之后,需要创建这些类的实例并根据类与类的关系把它们组装在一起,这样类的实例才能一起协作完成业务功能。就好比制造一辆汽车,汽车是由零件组装而成的。第一步是画出各种零件的图纸,以及定义零件之间的接口。第二步把把图纸交给工厂去生产零件并组装在一起。因此对于 Web 应用开发来说,第一步工作是具体业务逻辑的实现,每个应用都不一样。而第二步工作,相对来说比较通用和标准化,工厂拿到零件的图纸,就知道怎么生产零件并按照零件之间的接口把它们组装起来,因此这个工作就被抽取出来交给 Spring 框架来做。Spring 又是用容器来完成这个工作的的,容器负责创建、组装和销毁这些类的实例,而应用只需要通过配置文件或者注解来告诉 Spring 类与类之间的关系。但是容器的概念不是 Spring 发明的,最开始来源于 Servlet 容器,并且 Servlet 容器也是通过配置文件来加载 Servlet 的。你会发现它们的“元神”是相似的,在 Web 应用的开发中,有一些本质的东西是不变的,而很多“元神”就藏在“老祖宗”那里,藏在 Servlet 容器的设计里。Spring 框架就是对 Servlet 的封装,Spring 应用本身就是一个 Servlet,而 Servlet 容器是管理和运行 Servlet 的,因此我们需要先理解 Servlet 和 Servlet 容器是怎样工作的,才能更好地理解 Spring。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值