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

Web容器(一):Web容器简介本文参照 极客时间 深入拆解 Tomcat amp Jetty 开篇词 Java 程序员如何快速成长 01 Web 容器学习路径 Web 容器 Web 技术的发展史早期的 Web 应用主要用于浏览新闻等静态页面 HTTP 服务器 比如 Apache Nginx 向浏览器返回静态 HTML 浏览器负责解析 HTML 将结果呈现给用户 随着互联网的发展 我们已经不满足于仅仅浏览静态页面 还希望通过一些

本文参照:极客时间-《深入拆解 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开发中 web 容器的作用(如tomcat)

Web容器处理流程

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/219686.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午10:07
下一篇 2026年3月17日 下午10:08


相关推荐

  • 幺妹--攒钱篇

    幺妹--攒钱篇

    2021年7月22日
    56
  • node+express操作cookie「建议收藏」

    node+express操作cookie「建议收藏」Cookie:有时也用其复数形式Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。用node操作cookie我们需要cookie-parser模块npmicookie-parser-s接下来在我们的文件中引入此模块//引入express模块constexpress=require(‘express’)//实例化expressconstapp=

    2022年7月11日
    17
  • 【数据结构】红黑树与平衡二叉树的区别以及原理详解(附图解)

    【数据结构】红黑树与平衡二叉树的区别以及原理详解(附图解)文章目录前言一 什么是红黑树 1 1 平衡二叉树 1 2 红黑树二 红黑树的构建过程 2 1 红黑树保持平衡操作 1 变色 2 2 红黑树保持平衡操作 2 旋转三 红黑树插入之详解总结前言最近在学习 HashMap 相关内容时碰到了红黑树 在 hashMap 中 链表超过一定长度将会转化为红黑树 趁这个机会学习并记录一下红黑树的内容 提示 以下是本篇文章正文内容一 什么是红黑树红黑树是一种自平衡二叉排序树 它属于平衡树 但是却没有平衡二叉树那么 平衡 那么我们首先来看一下平衡二叉树 1 1 平衡二叉树二叉平

    2026年3月26日
    2
  • 计算机系统(一)——冯诺依曼体系

    计算机系统(一)——冯诺依曼体系现代计算机的基本结构是由冯诺依曼提出的 冯诺依曼的体系结构体系如下图所示 计算机由运算器 控制器 存储器 也就是内存 输入设备 输出设备五大部件组成 其中运算器和控制器组成 cpu 在冯诺依曼体系中 数据先从输入设备输入到内存中 运算时数据从内存中读出 在运输到运算器中 运算的结果在存入到内存中 在运送给输出设备进行输出 程序也是以数据的形式从内存中运送给控制器 经过译码码在形成各种各样的控制信号 使得控制信号可以按一定的节奏 一步一步的控制输入

    2026年3月18日
    2
  • linux4月11日课笔记[通俗易懂]

    linux4月11日课笔记

    2022年4月2日
    48
  • activiti7入门_react demo

    activiti7入门_react demo项目框架描述项目基于springboot2.1.1<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.1.RELE…

    2022年8月30日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号