Web容器(一):Web容器简介

本文参照:极客时间-《深入拆解 Tomcat & Jetty》-开篇词 | Java程序员如何快速成长 + 01_Web容器学习路径

Web容器

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容器与Spring、Web应用等的关系

Servlet技术是Web开发的原点,几乎所有的Java Web框架(比如Spring)都是基于Servlet的封装,Spring应用本身就是一个Servlet,而Tomcat和Jetty这样的Web容器,负责加载和运行Servlet。你可以通过下面这张图来理解Tomcat和Jetty在Web开发中的位置。
Web容器(一):Web容器简介_第1张图片

Web容器作用

web开发中 web 容器的作用(如tomcat)

Web容器处理流程

1.client点击一个URL,其URL指向一个servlet

Web容器(一):Web容器简介_第2张图片

2.容器识别出这个请求索要的是一个servlet,所以创建两个对象:httpservletrequest、httpservletresponse

Web容器(一):Web容器简介_第3张图片

3.容器根据请求中的URL找到对应的servlet,为这个请求创建或分配一个线程,并把两个对象request和response传递到servlet线程中

Web容器(一):Web容器简介_第4张图片

4.容器调用servlet的service()方法。根据请求的不同类型,service()方法会调用doGet()或者doPost()方法

Web容器(一):Web容器简介_第5张图片

5.doGet()方法生成动态页面,然后把这个页面填入到response对象中

Web容器(一):Web容器简介_第6张图片

6.线程结束,容器把response对象转换成http响应,传回client,并销毁response和request对象

Web容器(一):Web容器简介_第7张图片

Web容器涉及的知识点

Tomcat和Jetty作为工业级的中间件,它们的设计非常优秀,比如面向接口编程组件化骨架抽象类一键式启停对象池技术以及各种设计模式,比如模板方法观察者模式责任链模式等。

Web容器如何学习?

操作系统基础

Java语言其实是对操作系统API的封装,上层应用包括Web容器都是通过操作系统来工作的,因此掌握相关的操作系统原理是我们深刻理解Web容器的基础。

对于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应用程序开发。

以Spring框架为例,给你讲讲Web框架是怎么产生的。Web应用程序的开发主要是完成两方面的工作。

•设计并实现类,包括定义类与类之间的关系,以及实现类的方法,方法对数据的操作就是具体的业务逻辑。

•类设计好之后,需要创建这些类的实例并根据类与类的关系把它们组装在一起,这样类的实例才能一起协作完成业务功能。

Spring框架就是对Servlet的封装,Spring应用本身就是一个Servlet,而Servlet容器是管理和运行Servlet的,因此我们需要先理解Servlet和Servlet容器是怎样工作的,才能更好地理解Spring。

你可能感兴趣的:(web容器)