web容器解析

article/2025/11/4 4:05:08

目录:

  • 简述web服务器功能
  • web服务器的限制
  • 辅助应用servlet
  • web容器的作用
  • web容器和web服务器的区别和联系

一、简述web服务器功能。

   web服务器主要作用是处理客户请求,并作出响应。当浏览器发送一个HTTP请求到web服务器,web服务器解析请求,在内部做处理,返回一个HTTP响应给浏览器,浏览器解析此响应,并作出相应动作(例如:显示HTML页面,展示图片等等。)
在这里插入图片描述
   浏览器和web服务器之间主要是通过http协议来进行交互。这里我们暂不讨论http协议,大家只需要知道它是一种网络通信的规范就可以了。但请求流(http请求)和响应流(http响应)的一些关键要素我们是必须要知道的,因为这涉及到了前后端交互。

http请求的关键要素:

  • 请求方法(get、post等)
  • 资源请求路径(URL)
  • 请求参数

http响应的关键要素:

  • 状态码(404、302等)
  • 响应内容类型(text、html等)
  • 响应内容(图片、文本等)

二、web服务器的限制

   web服务器擅长提供静态页面。静态页面只是原封不动的呆在目录中,服务器找到静态页面,并把它原封不动的传回给客户,每个客户看到的东西都一样。但如果想要提供动态页面和动态数据,例如,淘宝网站中实时更新的商品,不同用户中购物车中的商品,在结算后写入数据库的数据等等。web服务器就显得有些力不从心了,这时就需要一个辅助应用,能够生成动态页面,而且这个应用能与web服务器通信,并且能够和后端java语言进行交互,从而从数据库存取数据。这个辅助应用就是servlet。

三、辅助应用servlet

   servlet是sun公司提供的一门用于开发动态web资源的技术,我们一般把实现了servlet接口的java类也称之为servlet。在MVC设计模式中,servlet扮演着C(控制器)的角色,当客户请求到来,进入到servlet,servlet调用M(业务逻辑)从数据库中存取数据,并返回页面或参数给浏览器。
   但servlet也需要帮助。当请求到来时,必须有人加载、初始化和实例化Servlet,或者创建或分配一个新的线程处理这个请求,调用servlet的doGet()、doPost()方法。并需要有人创建servlet必须的参数HTTPServletRequest和HTTPServletResponse。当请求处理结束后,有人销毁servlet,管理着servlet的生命周期。这个人就是web容器。

四、web容器

   servlet没有main()方法,它们受控于另一个Java应用,这个Java应用称为容器。
   Tomcat就是这样一个容器,如果web服务器应用(如Apache)得到一个指向某servlet的请求(而不是其他请求,如请求一个普通的静态页面),此时服务器不是把这个请求交给servlet本身,而是交给部署该servlet的容器,要由容器向servlet提供HTTP请求和响应,而且要由容器调用servlet的方法,如doGet()和doPost()。

容器能提供什么?
(1) 通信支持
   利用容器提供的方法,你能轻松地让servlet与web服务器对话。无需自己建立ServerSocket、监听端口、创建流等等。容器知道自己与web服务器之间的协议,所以你的servlet不必担心web服务器(Apache)和你自己的web代码之间的API。你要考虑的只是如何在servlet中实现业务逻辑。
(2)生命周期管理
   容器控制着servlet的生与死。它会负责加载类、实例化和初始化servlet、调用servlet方法、并使servlet对象能够被垃圾回收。有了容器的控制,你就不必考虑太多的资源管理了。
(3)多线程支持
   容器会自动为它接受的每个servlet创建一个新的线程。针对客户的请求,如果servlet已经运行完相应的HTTP服务方法,这个线程就会结束(也就是会死掉)。这并不是说不用考虑线程安全性,还是会遇到同步问题的。不过,由服务器创建和管理多个线程来处理多个请求,这样确实能让你少做很多工作。
(4)声明方式实现安全
   利用容器,可以使用xml部署描述文件来配置(和修改)安全性,而不必将其硬编码写到servlet(或其他类代码中)。不用去修改你的java源文件,也不用重新编译,你就能管理和修改安全性配置。
(5)JSP支持
   JSP能提供动态页面,jsp会被翻译为java代码,写入到响应流中,web服务将响应对象转换为HTTP响应并返回给浏览器,浏览器解析HTTP响应,进而形成动态页面。而web容器负责将jsp翻译为java代码。

容器如何处理请求?
如下图所示:

在这里插入图片描述
图解分析:
(1)用户点击一个链接,其URL指向一个servlet而不是静态页面。
(2)请求到达web服务器,web服务器识别该请求为servlet请求,将请求送到web容器。
(3)容器识别出该请求要的是一个servlet,所以容器创建2个对象HTTPServletRequest和HTTPServletResponse。
(4)容器根据请求中的URL找到正确的servlet,为这个请求创建或分配一个线程,并把请求对象和响应对象传给这个线程。
(5)容器调用servlet的service()方法。根据请求的不同类型,service()会调用doGet()或doPost()方法。
(6)doGet()或doPost()方法生成动态页面或数据,并把动态页面或数据写入到响应对象。
(7)线程结束,容器将响应对象转换为一个HTTP响应,把它发回给浏览器,然后删除请求和响应对象。

五、web容器和web服务器的区别和联系

   我们常常将web容器和web服务器和概念和作用混合,对这2个应用总是很模糊。web容器(Tomcat)和web服务器(Apache)都可以作为一个独立的应用。web服务器擅长处理HTTP服务,但它不能处理动态页面并和数据库进行交互。这些功能web容器都可以做到,但web容器没有web服务器更擅长处理HTTP服务,所以常见的HTTPweb服务器应用经常会结合使用Apache和Tomcat,充分发挥2者的长处,Apache作为HTTPweb服务器,Tomcat作为web容器。这就是为什么我们下载的tomcat的全名为“ apache-tomcat-版本号 ”的原因所在。


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

相关文章

web容器

目录 前言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容器(一):Web容器简介

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

MyBatis分页及分页插件使用

7.分页 7.1 作用 减少数据处理量,一次数据量太大了对数据库和网络压力太大 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来进行分页,其实mybatisplus中也提供了一个分页插件PaginationInnerInterceptor,其实分页的本质就是内部封装了一个拦截器,对…

springboot使用分页插件

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

Mybatis-分页插件

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

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 参…