web容器

article/2025/11/4 4:12:51

目录

  • 前言
  • 1、 Web容器简介
    • 1.1 Web容器的定义
  • 2、 Web容器的作用
    • 2.1 概念区分
      • 2.1.1 架构 & 框架
      • 2.1.2 Web服务器(Web Server)
      • 2.1.3 中间件(Middleware)
    • 2.2 Web容器与Spring、Web应用等的关系
    • 2.3 Web容器在web开发中的作用
  • 3、Web容器的工作流程
    • 3.1 URL与servlet映射模式
    • 3.2 Web容器的工作流程

前言

        web容器是我们在开发中常用到的术语之一,了解术语背后的具体含义、工作机理,将对我们的开发实践工作将大有裨益。作为Java框架基础知识篇章之一,本篇将主要围绕web容器展开讨论:

1、什么是web容器?常见的web容器有哪些?主要作用是什么?
2、架构思想和框架结构是什么?
3、工作原理是什么?
4、易混淆的概念的区分。

1、 Web容器简介

1.1 Web容器的定义

        Sun公司提供了Servlet技术,但是,Servlet没有main()方法,其生命周期必须交由一个Servlet容器来管理。常见的Servlet容器即Tomcat和Jetty。而Servlet本身的作用就是根据HTTP请求来处理动态页面,所以为了方便使用,Tomcat和Jetty也具有HTTP服务器功能,所以,它们是HTTP服务器+Servlet容器=web容器

2、 Web容器的作用

        web容器在web开发中的具体作用&充当角色。

2.1 概念区分

2.1.1 架构 & 框架

        软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。在面向对象领域中,组件之间的连接通常用接口来实现。

        软件框架就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统.java框架就是一些类和接口的集合,通过这些类和接口协调来完成一系列的程序实现。框架又叫做开发中的半成品,它不能提供整个WEB应用程序的所有东西,但是有了框架,我们就可以集中精力进行业务逻辑的开发而不用去关心它的技术实现以及一些辅助的业务逻辑。我们熟知的Structs和Spring就是表示层和业务层框架的代表。

        简单地说,架构是一种思想,是软件的设计思路,而框架则是对该思想和思路的落实。前者软件设计的思想蓝图,后者则是具体的建设成果。以有限的认知进行总结,软件架构通常提出这样一些列问题:
    1、我们在业务上有怎样的愿景?
    2、我们要达成怎样的总体战略目标?
    3、这个总体的战略目标能够拆分成哪些小目标?
    4、小目标之间应该怎样协调配合?
    5、小目标之间是否有冲突?
    6、如何解决这样的冲突?
    7、组件对象之间应该怎样通讯?
    8、我们的系统成型以后,还可能有哪些更长远、深入、具体的发展?如何使我们的系统具有更强的扩展性、兼容性?如何使我们的应用程序更利于维护?
    9、根据上述问题,我们将作出哪些主、次要的技术选型?
    10、《孙子》云:“不能尽知兵之害者,不能尽得兵之利。”这种技术选型有哪些特点?我们的系统又有哪些特点?两者结合来看,其中的哪些特点可以为我们的系统服务?哪些特点又有可能阻碍我们的系统发展?我们应该如何扬长避短?
    11、我们所选取的技术,在架构落实成框架的时候,其切入的角度、方式、时机是什么?为什么这样做?我们需要考虑的因素有哪些?
    12、在同类别、同层级的技术类型中,我们取舍的根据是什么?我们的技术选型,是否会影响甚至损害我们长远的战略愿景?
    13、如果这种损害、影响已经发生,是否能够在发展中得以完善和解决?可用资源是什么?资源怎么用,方案是什么?面临问题的主次要矛盾分别是什么?
    14、从循序渐进,迭代发展的角度考虑,我们应该在什么时机解决什么样的问题?有哪些问题需要立即解决?哪些问题可以之后解决?有哪些小问题是肩头的土可以忽略?哪些细节问题是鞋里的沙,从宏观角度看会成为系统发展的阻碍?
    15、作为软件工作者,我们面临当前愿景,现实能力怎样?如果我们的能力仍然有欠缺,我们欠缺在哪里?我们应该怎样循序渐进,逐步提高?
    16、当我们看待自身优势,我们是否能够结合现实语境?我们能否清楚的知道,我们自身优势的适用范围是什么?
    17、当我们看待自身短板,我们是否能够清楚的知道,该特点实际上是在具体的语境中成为了短板,在另外一个场景中,实际上却会成为优势?
    18、我们的个人愿景是否和系统的现实愿景相契合?多大程度上契合,这种契合程度,会对我们自身和系统产生怎样影响?


        这些问题,考验的是我们对业务的理解、对技术掌握的深度和广度、对市场需求变化的前瞻性,还有我们如何用发展的眼光看待技术、业务、市场、“我”的综合作用。当我们观照世界的时候,也不能忘记观照自己,让自己和世界不断互相磨合、兼容,既是入世之王道,也是软件工作必不可少的硬功夫。

2.1.2 Web服务器(Web Server)

        一般地,指提供web服务的软件或主机。就即web服务软件或者装有web服务软件的计算机。web服务器可以:

        1、主要用于处理HTTP协议,响应针对静态页面或者图片的请求,进行页面跳转;

        2、把动态请求委托给其他程序,包括:

                (1)、web服务器的扩展;
                (2)、某种语言的解释引擎;
                (3)、Web容器。

2.1.3 中间件(Middleware)

        一切产品的产生,都是源于对问题的解决。我们的应用程序是基于操作系统的更高一级软件系统,在应用程序的开发过程中,需要考虑操作系统的问题,这就大大加强了开发的难度和维护的成本。那么,是不是能提供一个独立于操作系统的环境,使我们只关心应用程序的功能?基于这样的发问,中间件就应运而生。它们提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通。将应用程序运行环境与操作系统隔离,从而实现应用程序开发者直接关注该应用程序在解决问题上的能力 。于是关于中间件,我们可以理解为:是一类能够为一种或多种应用程序合作互通、资源共享,同时还能够为该应用程序提供相关的服务的软件。中间件通过提供简单、一致、集成的开发和运行环境,简化分布式系统的设计、编程和管理。(注意:中间件是一类软件的总称,不是单独的一个软件)web容器就是中间件的一种。


        J2EE规范:J2EE就是基于JAVA技术的一系列标准。对于这种规范的遵守,使得各种组件具有了更大范围的通用性,让组件的使用者,只要进行较少的改动,甚至不加该动,就能将组件运用于自己的系统和程序当中,为自己的组件服务。Java中间件的开发,正是基于这种规范。

        中间件所包括的范围十分广泛,针对不同的应用需求涌现出多种各具特色的中间件产品。从功能性外延来看,中间件包括交易中间件、消息中间件、集成中间件等各种功能性的中间件技术和产品:

1、应用服务类中间件:
        为应用系统提供一个综合的计算环境和支撑平台,包括对象请求代理(ORB)中间件、事务监控交易中间件、JAVA应用服务器中间件等。

2、应用集成类中间件:
        应用集成类中间件是提供各种不同网络应用系统之间的消息通信、服务集成和数据集成的功能,包括常见的消息中间件、企业集成EAI、企业服务总线以及相配套的适配器等。

3、业务架构类中间件:
        作为共性的凝练,中间件不仅要从底层的技术入手,将共性技术的特征抽象进中间层,还要更多地把目光投向到业务层面上来,根据业务的需要,驱动自身能力的不断演进,即,不断出现的新的业务需要驱动了应用模式和信息系统能力的不断演进,进而要求中间件不断地凝练更多的业务共性,提供针对性支撑机制。

web服务器:IIS、Apache、Nginx、Tomcat、Jboss、Jetty、Weblogic、Webshere、Glasshfish、Lighttpd等
web中间件:Tomcat、Jboss、Jetty、Weblogic、Webshere、Glasshfish等
web容器:IIS(asp容器)、Tomcat(servlet容器)、Jboss(EJB容器)

总的来说:web服务器>web中间件>web容器

2.2 Web容器与Spring、Web应用等的关系

        Servlet技术是Web开发的原点,几乎所有的Java Web框架(比如Spring)都是基于Servlet的封装,Spring应用本身就是一个Servlet,而Tomcat和Jetty这样的Web容器,负责加载和运行Servlet。
在这里插入图片描述

2.3 Web容器在web开发中的作用

需要由web容器来管理,那么采取这种机制有什么好处呢?

通信支持
        servlet利用容器提供的方法,你可以简单的实现servlet与web服务器的对话。否则你就要自己建立server搜创可贴,监听端口,创建新的流等等一系列复杂的操作。而容器的存在就帮我们封装这一系列复杂的操作。使我们能够专注于servlet中的业务逻辑的实现。

生命周期管理
        servlet容器负责servlet的整个生命周期。如何加载类,实例化和初始化servlet,调用servlet方法,并使servlet实例能够被垃圾回收。有了容器,我们就不用花精力去考虑这些资源管理垃圾回收之类的事情。

多线程支持
        servlet容器会自动为接收的每个servlet请求创建一个新的java线程,servlet运行完之后,容器会自动结束这个线程。

声明式实现安全
        servlet利用容器,可以使用xml部署描述文件来配置安全性,而不必将其硬编码到servlet中。

jsp支持
        servlet容器将jsp翻译成java!

3、Web容器的工作流程

3.1 URL与servlet映射模式

<servlet><servlet-name>Ch1Servlet</servlet-name><servlet-class>ch1Servlet.Ch1Servlet</servlet-class></servlet><servlet-mapping><servlet-name>Ch1Servlet</servlet-name><url-pattern>/Ch1Servlet</url-pattern></servlet-mapping>

客户知道的URL名

 <url-pattern>/Ch1Servlet</url-pattern>

部署人员知道的秘密的内部名

<servlet-name>Ch1Servlet</servlet-name>

实际文件名

<servlet-class>ch1Servlet.Ch1Servlet</servlet-class>

3.2 Web容器的工作流程

1、用户点击一个URL,该URL指向一个Servlet。

2、容器创建两个对象:httpservletrequest、httpservletresponse。

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

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

5、doGet()方法生成动态页面,然后把这个页面填入到response对象中,此时,容器仍然拥有response对象的引用。

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


http://chatgpt.dhexx.cn/article/ssqIKiyi.shtml

相关文章

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

本文参照&#xff1a;极客时间-《深入拆解 Tomcat & Jetty》-开篇词 | Java程序员如何快速成长 01_Web容器学习路径 Web容器 Web技术的发展史 早期的Web应用主要用于浏览新闻等静态页面&#xff0c;HTTP服务器&#xff08;比如Apache、Nginx&#xff09;向浏览器返回静…

MyBatis分页及分页插件使用

7.分页 7.1 作用 减少数据处理量&#xff0c;一次数据量太大了对数据库和网络压力太大 SELECT * FROM school.user LIMIT startIndex,pageSize SELECT * FROM school.user LIMIT 2 -- 0,2 SELECT * FROM school.user LIMIT 2,2 -- startIndex从0开始使用mybatis实现分页步骤…

mybatis-plus 分页插件

目录 1 前言 2 配置分页插件 2.1 selectPage()测试 2.2 自定义分页功能 1 前言 大家之前肯定都用过PageHelper来进行分页&#xff0c;其实mybatisplus中也提供了一个分页插件PaginationInnerInterceptor&#xff0c;其实分页的本质就是内部封装了一个拦截器&#xff0c;对…

springboot使用分页插件

业务逻辑&#xff1a;我想要实现对必备材料信息列表的分页展示&#xff0c;包括查询后的信息也要分页展示 效果图 解决思路&#xff1a; 首先实体类用来接收数据&#xff0c;有一个Dao类用来进行sql查询&#xff0c;有一个servcie(需要传pageNum,PageSiz)&#xff0c;serviceIm…

Mybatis-分页插件

目录 引入介绍 回顾MySQL的limit实现简易分页 问题的产生与解决 分页插件实现步骤 实例演示 分页插件相关参数 实例演示 引入介绍 分页可以将很多条结果进行分页显示如果当前在第一页&#xff0c;则没有上一页如果当前在最后一页&#xff0c;则没有下一页需要明确当前是第几页…

BootStrap分页插件

BootStrap分页插件 官网 官方网址&#xff1a;https://labs.pontikis.net/bs_pagination/docs/ 怎么使用 引入插件所需要的资源文件 <link href"jquery/bootstrap_3.3.0/css/bootstrap.min.css" type"text/css" rel"stylesheet" /> &l…

MyBatis分页插件

目录 分页插件 Mybatis插件典型适用场景 实现思考 第一个问题 第二个问题 自定义分页插件 分页插件使用 添加pom依赖 插件注册 调用 代理和拦截是怎么实现的 PageHelper 原理 分页插件 MyBatis 通过提供插件机制&#xff0c;让我们可以根据自己的需要去增强MyBati…

分页利器——pageHelper分页插件

pageHelper插件在分页上有哪些优势&#xff1f; 分页插件给我们封装了很多参数&#xff0c;不用我们再去硬性编码获取各种参数。 pageHelper封装参数如下&#xff0c;这个参数封装在com.github.pagehelper.page中&#xff1a; count&#xff1a;是否进行count查询&#xff0c;…

分页插件--PageHelper

mybatis的分页查询可以通过PageHelper插件实现 在数据库中我们使用分页查询的sql语句为&#xff1a; select * from 表名 [where 条件] limit (page-1)*pageSize, pageSize; page: 当前页码 pageSize: 每页显示的条数。但是当我们使用PageHelper插件后页码什么的都不用我们计算…

分页插件

10-分页插件-分页插件的介绍 分页可以将很多条结果进行分页显示。如果当前在第一页&#xff0c;则没有上一页。如果当前在最后一页&#xff0c;则没有下一页。需要明确当前是第几页&#xff0c;这一页中显示多少条结果。MyBatis分页插件总结 在企业级开发中&#xff0c;分页也是…

MyBatis-Plus 插件篇 >分页插件

目标&#xff1a; 懂得使用 Mybatis-Plus 进行分页查询 实现步骤&#xff1a; 1、编写分页插件 2、测试分页功能 一、分页插件PaginationInnerInterceptor MyBatis-Plus 的分页实现还是使用的动态拼接Limit分页 二、测试用例 1、编写分页插件 /*分页插件*/Beanpublic Pagi…

分页插件 - PageHelper的介绍和使用

PageHelper介绍 PageHelper是国内非常优秀的一款开源的mybatis分页插件&#xff0c;它支持基本主流与常用的数据库&#xff0c;例如mysql、 oracle、mariaDB、DB2、SQLite、Hsqldb等。 PageHelper使用 引入分页插件有下面两种方式&#xff1a; ① 引入jar包&#xff0c;以下…

[一起学习pytorch吧]之torch.sign函数

Hello&#xff0c;大家好&#xff01;今天为大家讲解以下pytorch的sign函数。 torch.sign(input, outNone) → Tensor 该函数的作用就是输出input通过sign函数后的张量&#xff0c;其中sign函数就是符号函数&#xff0c;如下图所示。 例子&#xff1a; >>> a torch…

Python】Numpy库之符号函数sign()的介绍及用法

1、sign()函数功能介绍 sign()是Python的Numpy中的取数字符号&#xff08;数字前的正负号&#xff09;的函数。 2、sign()函数用法代码演示 import numpy as np dataArr [-0.2, -1.1, 0, 2.3, 4.5, 0.0] print(“输入数据为&#xff1a;”) print(dataArr) signResult np.sig…

Oracle Decode 函数用法 Count函数条件统计 Sign 函数用法 Case When 函数

Oracle Decode 函数用法 Count函数条件统计 Sign 函数用法 Case When 函数 一、概述 1、本文系统的整理了&#xff0c;Oracle中常见的几个函数用法&#xff0c;都是涉及到条件判断分支类的相关函数&#xff0c;分别是 CASE ..WHEN ; DECODE , SIGN 。 2、假设有一张表Student &…

matlab中sign函数的使用(提取符号)

仅用于记录自己学习过程中遇到的函数 matlab中sign函数的使用&#xff0c;提取符号 一、语法 Y sign(x) 返回与 x 大小相同的数组 Y&#xff0c;其中 Y 的每个元素是&#xff1a; 1&#xff0c;前提是 x 的对应元素大于 0。 0&#xff0c;前提是 x 的对应元素等于 0。 -1&am…

R语言使用符号函数计算数据的正负特性、sign函数计算数据的正负符号返回0、1、-1

R语言使用符号函数计算数据的正负特性、sign函数计算数据的正负符号返回0、1、-1 目录 R语言使用符号函数计算数据的正负特性、sign函数计算数据的正负符号返回0、1、-1 R 语言特点 R语言使用符号函数计算数据的正负特性、sign函数计算数据的正负符号返回0、1、-1 R可以在CR…

c语言中sign的用法,Excel教程中sign函数用法和实例详解

第一&#xff0c;sign函数用法说明 excel教程中sign函数用于返回数字的符号。正数为1&#xff0c;零为0&#xff0c;负数为-1。 sign函数语法&#xff1a;SIGN(number) SIGN符号函数(一般用sign(x)表示)是很有用的一类函数&#xff0c;其功能是取某个数的符号(正负零)&#xff…

R语言sign函数判断数值为正数或者负数实战

R语言sign函数判断数值为正数或者负数实战 目录 R语言sign函数判断数值为正数或者负数实战 #基本语法 #正负数判断 #基本语法 sign(5) # Basic R syntax of sign function #正负数判断 sign(-2:5) # Apply sign function # -1 -1 0 1 1 1 1 1 参…

matlab2c使用c++实现matlab函数系列教程-sign函数

全栈工程师开发手册 &#xff08;作者&#xff1a;栾鹏&#xff09; matlab2c动态链接库下载 matlab库函数大全 matlab2c基础教程 matlab2c开发全解教程 matlab2c调用方法&#xff1a; 1、下载动态链接库 2、将Matlab2c.dll拷贝到exe同目录下 3、将Matlab2c.h、Matlab2c.lib放…