目录
- 前言
- 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对象。












![[一起学习pytorch吧]之torch.sign函数](https://img-blog.csdnimg.cn/20200316211101489.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21pc3N5b3VkYWlzeQ==,size_16,color_FFFFFF,t_70)






