本次研讨有以下两个题目:1.OSI七层模型及每层作用;2.tomcat配置 conf/server.xml里面的最大线程数(maxthreads),最大排队数(accepcount), 连接超时时间(connecttimeout)工作原理
--------------------------------------------------------------------------------------------------------------------
关于OSI模型计划从以下3个方面来学习:1.OSI模型的由来及简介;2.OSI模型每层及对应作用;3.OSI实际项目中如何被应用
关于tomcat计划从以下3个方面来学习:1.什么是tomcat;2.tomcat有哪些部分内容,注重配置文件server.xml详解;3.实际上怎样安装tomcat服务器和部署web应用的
--------------------------------------------------------------------------------------------------------------------
一 OSI模型的由来及简介
http://blog.youkuaiyun.com/sammy_chan/article/details/925508
70年代以来国外一些主要计算机生产厂家有推出各自的网络体系结构,但都是专用的,不同计算机厂家的计算机要想能够互相通信,在更大范围内建立计算机网络,就需要建立一个国际范围的网络体系结构标准。国际标准化组织ISO在1981年推出了七层参考模型-开放系统互连模型OSI(Open System Interconnection)。
OSI模型把整个网络通信功能划分为七个层次,由低到高为物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。物理层,数据链路层,网络层主要面向通过网络的端到端的数据流;传输层,会话层,表示层,应用层定义应用程序的功能。
把一个计算机网络划分若干个层次,处在高层次的系统仅利用较低层次系统提供的接口和功能,不需要了解低层实现该功能采用的算法和协议;较低层次也仅使用从高层系统传过来的参数,这是层次间的无关性。有了这种无关性,层次间每个模块可以用一个新的模块取代,只要新模块和旧模块有相同的功能和接口,即使使用的算法和协议不一样。
二 OSI模型每层及对应作用
1.物理层
1.1物理层的定义
物理层是OSI模型的最低层,是整个开放系统的基础。它为设备之间数据通信提供通信媒体和互连设备,给数据传输提供可靠的环境。
物理层的媒体包括架空明线,平衡电缆,光纤,无线信道等。
通信用的互连设备指的是将DTE(DTE是数据终端设备,如计算机、终端等)和DCE(DCE是数据通信设备或电路连接设备,如调制解调器等)连接起来的装置,如各种插头、插座。
LAN中各种粗细同轴电缆,T型接、插头,接收器,发送器,中继器等都属于物理层的媒体和连接器。
物理层数据传输单位是比特
1.2物理层的主要功能
物理层为数据端设备提供传送数据的通路。物理层要形成适合数据传输需要的实体,为数据传送服务,要保证数据能在物理层上正确通过;要提供足够的带宽,减少信道上的拥塞。传输数据的方式能满足点到点,一点到多点,串行或并行,半双工或全双工,同步或异步传输的需要。
可以理解为给数据提供了一片广阔的土地,数据可以在上面乱跑。
网卡是工作在物理层的。
2.数据链路层
2.1数据链路层定义
数据链路可以粗略的理解成数据通道。物理层给终端设备间数据通信提供传输媒体及其连接,媒体是长期的,连接是有生存周期的。在连接生存期内,收发两端可以进行不等的一次或多次数据通信,每次通信都要经过建立通信联络和拆除通信联络的过程,这种建立起来数据收发关系叫数据链路。在物理媒体上传输的数据会收到各种不可靠因素的影响而产生差错,为弥补物理层上不足,给网络层提供无差错的数据传输,要对数据能进行检错和纠错。
2.2数据链路层的主要功能
数据链路层功能包括链路连接的建立、拆除、分离;帧定界和帧同步;对帧的收发顺序进行控制;差错检测和恢复(差错检测多用方阵码校验和循环码校验来检测信道上数据的误码,帧丢失用序号检测,各种错误的恢复靠反馈重发技术来完成)。
独立的链路产品中最常见的是网桥。
数据链路层传输单位是帧
感觉数据链路层就像是在广阔的土地上开辟了一条不那么容易出错的路。
帧数据由两部分组成:帧头和帧数据,帧头包括接受方物理地址(就是网卡的地址)和其他的网络信息,帧数据就是要传输的数据体。数据帧的最长为1500字节,如果数据很长,就必须分割成多个帧进行发送。
3.网络层
3.1网络层的必要性
在联机系统和线路交换环境中,网络层的功能没有太大意义,但是当数据终端增多时,它们之间会有中继设备相连,如果一台终端要求不止与唯一的一台终端通信,而是可以和多台终端通信,需要把任意两台数据终端设备的数据链接起来,这就是路由或叫寻径。而且,当一条物理信道建立之后是被一对用户使用的,那会有许多空闲时间被浪费,会希望多对用户共用一条链路,逻辑信道技术和虚拟电路技术能够解决上述问题。
3.2网络层的主要功能
网络层为建立网络连接和为传输层提供服务要具备以下主要功能:路由选择和中继;激活、终止网络连接;在一条数据链路上复用多条网络连接,多采取时分复用技术;差错检测与恢复;排序、流量控制;服务选择;网络管理。
市场上销售的网络硬设备主要有网关和路由器。
网络层传输的单位是报文或包。
网络层像是一个个人用的导航系统,为数据传输选择一条合适的路径规划。
该层通过寻址(寻址地址)来建立两个节点之间的连接,大家都知道我们的电脑连接上网络后都一个IP地址,我们可以通过IP地址来确定不同的计算机是否在同一个子网路。如果我们的电脑连接上网络后就有两种地址:物理地址和网络地址(IP地址),网络上的计算机要通信,必须要知道通信的计算机“在哪里”, 首先通过网络地址来判断是否处于同一个子网络,然后再对物理地址(MAC)地址进行处理,从而准确确定要通信计算机的位置。
在网络层中有我们熟悉的IP协议(即规定网络地址的协议),目前广泛采用的是IP协议第四版(IPv4),这个版本规定,网络地址由32位二进制位组成。我们可以自己配置IP地址也可以自动获得的方式得到IP地址,Ip地址分成两部分,前24位代表网络,后8位代表主机号, 如192.168.254.1和192.168.254.2就处于同一个子网络里,因为这两个IP地址的前24位相同。
网络层中以IP数据包的形式来传递数据,IP数据包也包括两部分:头(Head)和数据(Data),IP数据包放进数据帧中的数据部分进行传输。
4.传输层(也称运输层)
两台计算机经过网络进行数据通信时,传输层是第一个端到端的层次,具有缓冲作用。当网络层服务质量不能满足要求时,它将服务加以提高,以满足高层的要求;当网络层服务质量较好时,它只用很少的工作。传输层还可进行复用,即在一个网络连接上创建多个逻辑连接。
有一个既存事实,即世界上各种通信子网在性能上存在着很大差异。例如电话交换网,分组交换网,公用数据交换网,局域网等通信子网都可互连,但它们提供的吞吐量、传输速率、数据延迟通信费用各不相同。对于会话层来说,却要求有一性能恒定的界面,传输层就承担了这一功能。它采用分流/合流,复用/介复用技术来调节上述通信子网的差异,使会话层感受不到。
此外传输层还要具备差错恢复、流量控制等功能,以此对会话层屏蔽通信子网在这些方面的细节与差异。传输层面对的数据对象已不是网络地址和主机地址,而是和会话层的界面端口。上述功能的最终目的是为会话提供可靠的、无误的数据传输。传输层的服务一般要经历传输连接建立阶段,数据传送阶段,传输连接释放阶段3个阶段才算完成一个完整的服务过程。而在数据传送阶段又分为一般数据传送和加速数据传送两种。
这层的功能包括是否选择差错恢复协议还是无差错恢复协议,及在同一主机上对不同应用的数据流的输入进行复用,还包括对收到的顺序不对的数据包的重新排序功能。
传输层对会话层等高三层提供可靠的传输服务,对网络层提供可靠的目的地站点信息。
传输层的传输单位是报文。
传输层就像是一个全局的导航系统,类似交通部门的红路灯控制+导航等。
通过MAC和IP地址,我们可以找到互联网上任意两台主机来建立通信。然而这里有一个问题,找到主机后,主机上有很多程序都需要用到网络,比如说你在一边听歌和用QQ聊天, 当网络上发送来一个数据包时, 是怎么知道它是表示聊天的内容还是歌曲的内容的, 这时候就需要一个参数来表示这个数据包是发送给那个程序(进程)来使用的,这个参数我们就叫做端口号,主机上用端口号来标识不同的程序(进程),端口是0到65535之间的一个整数,0到1023的端口被系统占用,用户只能选择大于1023的端口。
传输层的功能就是建立端口到端口的通信,网络层就是建立主机与主机的通信,这样如果我们确定了主机和端口,这样就可以实现程序之间的通信了。我们所说的Socket编程就是通过代码来实现传输层之间的通信。因为初始化Socket类对象要指定IP地址和端口号。
5.会话层
会话层允许不同机器上的用户建立会话关系。
会话层的主要功能是对话管理,数据流同步和重新同步。
会话层为会话实体间建立连接;在两个会话用户之间实现有组织,同步的数据传输;释放会话连接。
6.表示层
表示层可以保证一个系统应用层发送的信息可以被另一个系统的应用层读取。因为不同的计算机体系结构使用的数据表示法不同,在这种情况下,便需要会话层来完成这种转换。使得不同操作系统之间通信成为可能。
保证应用层传达下来的报文符合语法。
7.应用层
应用层向应用程序提供服务,这些服务按其向应用程序提供的特性分成组,并称为服务元素。有些可为多种应用程序共同使用,有些则为较少的一类应用程序使用。应用层是开放系统的最高层,是直接为应用进程提供服务的。其作用是在实现多个系统应用进程相互通信的同时,完成一系列业务处理所需的服务。其服务元素分为两类:公共应用服务元素CASE和特定应用服务元素SASE。CASE提供最基本的服务,它成为应用层中任何用户和任何服务元素的用户,主要为应用进程通信、分布系统实现提供基本的控制机制。特定服务SASE则要满足一些特定服务,如文卷传送,访问管理,作业传送,银行事务,订单输入等。
三 OSI实际项目中如何被应用
其实OSI是一种理论下的模型,而TCP/IP已经被广泛使用,成为互联网实际上的标准。OSI引入了服务、接口、协议、分层的概念,TCP/IP借鉴了OSI的这些概念建立TCP/IP模型。OSI先有模型,后有协议,先有标准,后进行实践;而TCP/IP则相反,先有协议和应用再提出了模型,且是参照的OSI模型。
OSI七层网络模型 | TCP/IP四层概念模型 | 对应网络协议 |
应用层(Application) | 应用层 | HTTP、TFTP, FTP, NFS, WAIS、SMTP |
表示层(Presentation) | Telnet, Rlogin, SNMP, Gopher |
会话层(Session) | SMTP, DNS |
传输层(Transport) | 传输层 | TCP, UDP |
网络层(Network) | 网络层 | IP, ICMP, ARP, RARP, AKP, UUCP |
数据链路层(Data Link) | 数据链路层 | FDDI, Ethernet, Arpanet, PDN, SLIP, PPP |
物理层(Physical) | IEEE 802.1A, IEEE 802.2到IEEE 802.11 |
https://www.cnblogs.com/Robin-YB/p/6668762.html
IP层传输单位是IP分组,属于点到点的传输;TCP层传输单位是TCP段,属于端到端的传输。


http://blog.youkuaiyun.com/qq_14935437/article/details/71081546里举了一个很好的例子说明OSI七层模型如何传输数据。
在这里我将假设一个场景,那就是把要传输数据的一方视为某个公司的经理,网络传输被视为这个经理要把一件事情告诉另一个公司的经理。
网络的A端:
1、应用层:A公司经理把他想要告诉B公司经理的事情用嘴讲了出来。
用户的应用程序网络之间的接口 老板
2、表示层:秘书就把A公司经理说的事情翻译成为英文然后写在了纸上。
协商数据交换格式 相当公司中简报老板、替老板写信的助理
3、会话层:行政的职员把秘书写的这封信,装到了信封封装好了,写上了信封的信息。
允许用户使用简单易记的名称建立连接 相当于公司中收寄信、写信封与拆信封的秘书
4、传输层:A邮局的职工把这封信取走。
提供终端到终端的可靠连接 相当于公司中跑邮局的送信职员
5、网络层:A邮局的分派的职工,把这封信分派到指定送信区域。
使用权数据路由经过大型网络 相当于邮局中的排序工人
6、数据链路层:A邮局的装箱的职工,就把一同送往这个区域的信封装到一个木箱子里,然后送到A邮局物流站。
决定访问网络介质的方式 相当于邮局中的装拆箱工人
7、物理层:A邮局的物流职工把木箱运到铁路
将数据转换为可通过物理介质传送的电子信号 相当于邮局中的搬运工人
这里的铁路就是网络连接物理介质
网络的B端:
7、物理层:B邮局的物流职工把木箱从铁路运到邮局的物流站。
6、数据链路层:B邮局的拆箱的职工把物流站的木箱拆箱然后把所有的信件取出来。
5、网络层:B邮局的分派的职工,把这封信分派到指定送信区域。
4、传输层:B邮局的职工把这封信送到B公司。
3、会话层:B公司行政的职员把公司的信件整理并且拆封信件(假设这是公司允许的情况下)并送到各自部门的秘书手里。
2、表示层:B公司秘书把信上的英文翻译成为中文。
1、应用层:B公司经理听秘书转述给他这封信的内容。
到此为止一个完整的通过这7层的网络通讯顺利完成。
-----------------------------------------------------------------------------------------------------------------------------------------------------华丽分割线--------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------
重申:本次研讨关于tomcat的题目:tomcat配置 conf/server.xml里面的最大线程数(maxthreads),最大排队数(accepcount), 连接超时时间(connecttimeout)工作原理
关于tomcat计划从以下3个方面来学习:1.什么是tomcat;2.tomcat有哪些部分内容,注重配置文件server.xml详解;3.实际上怎样安装tomcat服务器和部署web应用的
一 什么是tomcat
了解tomcat之前先要了解一下web的含义及web系统是怎样通信的。
web表示网页的意思,是Internet主机上供外界访问的资源。可以分类静态web资源和动态web资源。静态web资源如HTML页面,是指web页面中供人们浏览的数据是始终不变的;动态web资源是指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同。
web系统通信流程如下:

web服务器是运行及发布web应用的容器,只有将项目放在容器中,才能使网络中的所有用户通过浏览器访问。
tomcat是一个免费开源的web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。
web应用程序是供浏览器访问的程序,通常也称为web应用。一个web应用由多个静态web资源和动态web资源组成,如html,js,css(静态web资源);JSP文件,JAVA程序,支持jar包(动态web资源),配置文件等,组成web应用的这些文件通常会使用一个目录组织,这个目录称为web应用所在目录(网站的根目录)。web应用开发好后,想要供外界访问,需要把web应用所在的目录交给web服务器管理,这个过程叫做虚拟目录映射。开发web应用时,注意不同类型的文件有严格的存放规则,否则不仅可能使web应用无法访问,还可能造成web服务报错。
web系统通信详解如下:

配置虚拟主机:1) 在一个tomcat服务器中可以放置多个网站<Host>,所谓配置虚拟主机,就是在tomcat服务器中配置一个网站;2)如需要在WEB服务器中配置一个网站,需要使用Host元素进行配置,例如:<Host name="site1" appBase="c:\app"></Host>;3)配置的主机(网站)要想被外部访问,必须在DNS服务器或windows系统中注册 C:\WINDOWS\system32drivers\etc\hosts;4)缺省虚拟主机DefaultHost
访问网站全过程如下:
1)在浏览器输入URL地址;
2)访问本机域名解析文件hosts(C:\Windows\System32\drivers\etc);
3)如果本机没有查到域名,查找网络上DNS服务器;
4)域名解析后,获得域名对应IP地址。根据IP和port访问网络上指定主机和服务。
对servlet/JSP的概念和工作机制理解一下,更加有助于理解web服务器是如何完成web系统通信的。
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。使用 Servlet,可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。
下图是servlet在web应用程序中的位置:

servlet执行的任务包括:1)读取客户端(浏览器)发送的显式的数据。这包括网页上的 HTML 表单,或者也可以是来自 applet 或自定义的 HTTP 客户端程序的表单。2)读取客户端(浏览器)发送的隐式的 HTTP 请求数据。这包括 cookies、媒体类型和浏览器能理解的压缩格式等等。3)处理数据并生成结果。这个过程可能需要访问数据库,执行 RMI 或 CORBA 调用,调用 Web 服务,或者直接计算得出对应的响应。4)发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTML 或 XML)、二进制文件(GIF 图像)、Excel 等。5)发送隐式的 HTTP 响应到客户端(浏览器)。这包括告诉浏览器或其他客户端被返回的文档类型(例如 HTML),设置 cookies 和缓存参数,以及其他类似的任务。
JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。
二 tomcat有哪些部分内容,注重配置文件server.xml详解
下图分别是tomcat的目录结构和web应用(网站目录)的组成结构


http://blog.51cto.com/xuding/1750550详细介绍了tomcat配置
Tomcat配置文件
配置文件种类
server.xml:主配置文件
context.xml:每个webapp有专用的配置文件,通常位于webapp应用程序目录下的WEB-INF目录中用于定义会话管理器、JDBC等;conf/context.xml是为各webapp提供默认配置;
web.xml:用于为所有的webapp提供默认部署相关的配置;
tomcat-users.xml:用户认证的账号和密码配置文件;
catalina.policy:当使用-security选项启动tomcat实例时会读取此配置文件来实现其安全运行策略;
catalina.properties:Java属性的定义文件,用于设定类加载器路径等,以及一些JVM性能相关的调优参数;
logging.properties:日志相关的配置信息;
https://www.cnblogs.com/kismetv/p/7228274.html
http://blog.youkuaiyun.com/a314368439/article/details/60132783
元素分类
server.xml文件中的元素可以分为以下4类:
(1)顶层元素:<Server>和<Service>
<Server>元素是整个配置文件的根元素,<Service>元素则代表一个Engine元素以及一组与之相连的Connector元素。
(2)连接器:<Connector>
<Connector>代表了外部客户端发送请求到特定Service的接口;同时也是外部客户端从特定Service接收响应的接口。
(3)容器:<Engine><Host><Context>
容器的功能是处理Connector接收进来的请求,并产生相应的响应。Engine、Host和Context都是容器,但它们不是平行的关系,而是父子关系:Engine包含Host,Host包含Context。一个Engine组件可以处理Service中的所有请求,一个Host组件可以处理发向一个特定虚拟主机的所有请求,一个Context组件可以处理一个特定Web应用的所有请求。
(4)内嵌组件:可以内嵌到容器中的组件。实际上,Server、Service、Connector、Engine、Host和Context是最重要的最核心的Tomcat组件,其他组件都可以归为内嵌组件。
核心组件
本部分将分别介绍各个核心组件的作用、特点以及配置方式等。
1、Server
Server元素在最顶层,代表整个Tomcat容器,因此它必须是server.xml中唯一一个最外层的元素。一个Server元素中可以有一个或多个Service元素。
- <Server port="8005" shutdown="SHUTDOWN">
- <!-- 属性说明
- port:指定一个端口,这个端口负责监听关闭Tomcat的请求
- shutdown:向以上端口发送的关闭服务器的命令字符串
- -->
Server的主要任务,就是提供一个接口让客户端能够访问到这个Service集合,同时维护它所包含的所有的Service的声明周期,包括如何初始化、如何结束服务、如何找到客户端要访问的Service。
2、Service
Service的作用,是在Connector和Engine外面包了一层,把它们组装在一起,对外提供服务。一个Service可以包含多个Connector,但是只能包含一个Engine;其中Connector的作用是从客户端接收请求,Engine的作用是处理接收进来的请求。
实际上,Tomcat可以提供多个Service,不同的Service监听不同的端口。
3、Connector
Connector的主要功能,是接收连接请求,创建Request和Response对象用于和请求端交换数据;然后分配线程让Engine来处理这个请求,并把产生的Request和Response对象传给Engine。
通过配置Connector,可以控制请求Service的协议及端口号。如下的例子中,Service包含两个Connector:
1 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
2 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
(1)通过配置第1个Connector,客户端可以通过8080端口号使用http协议访问Tomcat。其中,protocol属性规定了请求的协议,port规定了请求的端口号,redirectPort表示当强制要求https而请求是http时,重定向至端口号为8443的Connector,connectionTimeout表示连接的超时时间。
在这个例子中,Tomcat监听HTTP请求,使用的是8080端口,而不是正式的80端口;实际上,在正式的生产环境中,Tomcat也常常监听8080端口,而不是80端口。这是因为在生产环境中,很少将Tomcat直接对外开放接收请求,而是在Tomcat和客户端之间加一层代理服务器(如nginx),用于请求的转发、负载均衡、处理静态文件等;通过代理服务器访问Tomcat时,是在局域网中,因此一般仍使用8080端口。
(2)通过配置第2个Connector,客户端可以通过8009端口号使用AJP协议访问Tomcat。AJP协议负责和其他的HTTP服务器(如Apache)建立连接;在把Tomcat与其他HTTP服务器集成时,就需要用到这个连接器。之所以使用Tomcat和其他服务器集成,是因为Tomcat可以用作Servlet/JSP容器,但是对静态资源的处理速度较慢,不如Apache和IIS等HTTP服务器;因此常常将Tomcat与Apache等集成,前者作Servlet容器,后者处理静态资源,而AJP协议便负责Tomcat和Apache的连接。
- <!--
- Connector元素:
- 由Connector接口定义.<Connector>元素代表与客户程序实际交互的组件,它负责接收客户请求,以及向客户返回响应结果.
- -->
- <Connector port="80" maxHttpHeaderSize="8192"
- maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
- enableLookups="false" redirectPort="8443" acceptCount="100"
- connectionTimeout="20000" disableUploadTimeout="true" />
- <!-- 属性说明
- port:服务器连接器的端口号,该连接器将在指定端口侦听来自客户端的请求。
- enableLookups:如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名;
- 若为false则不进行DNS查询,而是返回其ip地址。
- redirectPort:服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号。
- acceptCount:当所有可以使用的处理请求的线程都被用光时,可以放到处理队列中的请求数,超过这个数的请求将不予处理,而返回Connection refused错误。
- connectionTimeout:等待超时的时间数(以毫秒为单位)。
- maxThreads:设定在监听端口的线程的最大数目,这个值也决定了服务器可以同时响应客户请求的最大数目.默认值为200。
- protocol:必须设定为AJP/1.3协议。
- address:如果服务器有两个以上IP地址,该属性可以设定端口监听的IP地址,默认情况下,端口会监听服务器上所有IP地址。
- minProcessors:服务器启动时创建的处理请求的线程数,每个请求由一个线程负责。
- maxProcessors:最多可以创建的处理请求的线程数。
- minSpareThreads:最小备用线程 。
- maxSpareThreads:最大备用线程。
- debug:日志等级。
- disableUploadTimeout:禁用上传超时,主要用于大数据上传时。
- -->
Engine
Engine组件在Service组件中有且只有一个;Engine是Service组件中的请求处理组件。Engine组件从一个或多个Connector中接收请求并处理,并将完成的响应返回给Connector,最终传递给客户端。
Engine、Host和Context都是容器,但它们不是平行的关系,而是父子关系:Engine包含Host,Host包含Context。
Engine的配置语句如下:
1 <Engine name="Catalina" defaultHost="localhost">
其中,name属性用于日志和错误信息,在整个Server中应该唯一。defaultHost属性指定了默认的host名称,当发往本机的请求指定的host名称不存在时,一律使用defaultHost指定的host进行处理;因此,defaultHost的值,必须与Engine中的一个Host组件的name属性值匹配。
- <Engine name="Catalina" defaultHost="localhost">
- <!-- 属性说明
- name:对应$CATALINA_HOME/config/Catalina中的Catalina
- defaultHost:对应Host元素中的name属性,也就是和$CATALINA_HOME/config/Catalina/localhost中的localhost
- 缺省的处理请求的虚拟主机名,它至少与其中的一个Host元素的name属性值是一样的
- debug:日志等级
- -->
Host
(1)Engine与Host
Host是Engine的子容器。Engine组件中可以内嵌1个或多个Host组件,每个Host组件代表Engine中的一个虚拟主机。Host组件至少有一个,且其中一个的name必须与Engine组件的defaultHost属性相匹配。
(2)Host的作用
Host虚拟主机的作用,是运行多个Web应用(一个Context代表一个Web应用),并负责安装、展开、启动和结束每个Web应用。
Host组件代表的虚拟主机,对应了服务器中一个网络名实体(如”www.test.com”,或IP地址”116.25.25.25”);为了使用户可以通过网络名连接Tomcat服务器,这个名字应该在DNS服务器上注册。
客户端通常使用主机名来标识它们希望连接的服务器;该主机名也会包含在HTTP请求头中。Tomcat从HTTP头中提取出主机名,寻找名称匹配的主机。如果没有匹配,请求将发送至默认主机。因此默认主机不需要是在DNS服务器中注册的网络名,因为任何与所有Host名称不匹配的请求,都会路由至默认主机。
(3)Host的配置
Host的配置如下:
1 <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
下面对其中配置的属性进行说明:
name属性指定虚拟主机的主机名,一个Engine中有且仅有一个Host组件的name属性与Engine组件的defaultHost属性相匹配;一般情况下,主机名需要是在DNS服务器中注册的网络名,但是Engine指定的defaultHost不需要。
unpackWARs指定了是否将代表Web应用的WAR文件解压;如果为true,通过解压后的文件结构运行该Web应用,如果为false,直接使用WAR文件运行Web应用。
Host的autoDeploy和appBase属性,与Host内Web应用的自动部署有关;此外,本例中没有出现的xmlBase和deployOnStartup属性,也与Web应用的自动部署有关。
- 由Host接口定义.一个Engine元素可以包含多个<Host>元素.
- 每个<Host>的元素定义了一个虚拟主机.它包含了一个或多个Web应用.
- -->
- <Host name="localhost" appBase="webapps"
- unpackWARs="true" autoDeploy="true"
- xmlValidation="false" xmlNamespaceAware="false">
-
- <!-- 属性说明
- name:在此例中一直被强调为$CATALINA_HOME/config/Catalina/localhost中的localhost虚拟主机名
- debug:是日志的调试等级
- appBase:默认的应用路径,也就是把应用放在一个目录下,并在autoDeploy为true的情况下,可自动部署应用此路径相对于$CATALINA_HOME/ (web applications的基本目录)
- unpackWARs:设置为true,在Web应用为*.war是,解压此WAR文件.
- 如果为true,则tomcat会自动将WAR文件解压;否则不解压,直接从WAR文件中运行应用程序.
- autoDeploy:默认为true,表示如果有新的WEB应用放入appBase 并且Tomcat在运行的情况下,自动载入应用
- -->
Context
(1)Context的作用
Context元素代表在特定虚拟主机上运行的一个Web应用。在后文中,提到Context、应用或Web应用,它们指代的都是Web应用。每个Web应用基于WAR文件,或WAR文件解压后对应的目录(这里称为应用目录)。
Context是Host的子容器,每个Host中可以定义任意多的Context元素。
server.xml配置文件中并没有出现Context元素的配置。这是因为,Tomcat开启了自动部署,Web应用没有在server.xml中配置静态部署,而是由Tomcat通过特定的规则自动部署。下面介绍一下Tomcat自动部署Web应用的机制。
(2)Web应用自动部署
Host的配置
要开启Web应用的自动部署,需要配置所在的虚拟主机;配置的方式就是前面提到的Host元素的deployOnStartup和autoDeploy属性。如果deployOnStartup和autoDeploy设置为true,则tomcat启动自动部署:当检测到新的Web应用或Web应用的更新时,会触发应用的部署(或重新部署)。二者的主要区别在于,deployOnStartup为true时,Tomcat在启动时检查Web应用,且检测到的所有Web应用视作新应用;autoDeploy为true时,Tomcat在运行时定期检查新的Web应用或Web应用的更新。除此之外,二者的处理相似。
通过配置deployOnStartup和autoDeploy可以开启虚拟主机自动部署Web应用;实际上,自动部署依赖于检查是否有新的或更改过的Web应用,而Host元素的appBase和xmlBase设置了检查Web应用更新的目录。
其中,appBase属性指定Web应用所在的目录,默认值是webapps,这是一个相对路径,代表Tomcat根目录下webapps文件夹。
xmlBase属性指定Web应用的XML配置文件所在的目录,默认值为conf/<engine_name>/<host_name>,例如第一部分的例子中,主机localhost的xmlBase的默认值是$TOMCAT_HOME/conf/Catalina/localhost。
检查Web应用更新
一个Web应用可能包括以下文件:XML配置文件,WAR包,以及一个应用目录(该目录包含Web应用的文件结构);其中XML配置文件位于xmlBase指定的目录,WAR包和应用目录位于appBase指定的目录。
Tomcat按照如下的顺序进行扫描,来检查应用更新:
A、扫描虚拟主机指定的xmlBase下的XML配置文件
B、扫描虚拟主机指定的appBase下的WAR文件
C、扫描虚拟主机指定的appBase下的应用目录
<Context>元素的配置
Context元素最重要的属性是docBase和path,此外reloadable属性也比较常用。
docBase指定了该Web应用使用的WAR包路径,或应用目录。需要注意的是,在自动部署场景下(配置文件位于xmlBase中),docBase不在appBase目录中,才需要指定;如果docBase指定的WAR包或应用目录就在docBase中,则不需要指定,因为Tomcat会自动扫描appBase中的WAR包和应用目录,指定了反而会造成问题。
path指定了访问该Web应用的上下文路径,当请求到来时,Tomcat根据Web应用的 path属性与URI的匹配程度来选择Web应用处理相应请求。例如,Web应用app1的path属性是”/app1”,Web应用app2的path属性是”/app2”,那么请求/app1/index.html会交由app1来处理;而请求/app2/index.html会交由app2来处理。如果一个Context元素的path属性为””,那么这个Context是虚拟主机的默认Web应用;当请求的uri与所有的path都不匹配时,使用该默认Web应用来处理。
但是,需要注意的是,在自动部署场景下(配置文件位于xmlBase中),不能指定path属性,path属性由配置文件的文件名、WAR文件的文件名或应用目录的名称自动推导出来。如扫描Web应用时,发现了xmlBase目录下的app1.xml,或appBase目录下的app1.WAR或app1应用目录,则该Web应用的path属性是”app1”。如果名称不是app1而是ROOT,则该Web应用是虚拟主机默认的Web应用,此时path属性推导为””。
reloadable属性指示tomcat是否在运行时监控在WEB-INF/classes和WEB-INF/lib目录下class文件的改动。如果值为true,那么当class文件改动时,会触发Web应用的重新加载。在开发环境下,reloadable设置为true便于调试;但是在生产环境中设置为true会给服务器带来性能压力,因此reloadable参数的默认值为false。
下面来看自动部署时,xmlBase下的XML配置文件app1.xml的例子:
1 <Context docBase="D:\Program Files\app1.war" reloadable="true"/>
在该例子中,docBase位于Host的appBase目录之外;path属性没有指定,而是根据app1.xml自动推导为”app1”;由于是在开发环境下,因此reloadable设置为true,便于开发调试。
自动部署举例
最典型的自动部署,就是当我们安装完Tomcat后,$TOMCAT_HOME/webapps目录下有如下文件夹:

当我们启动Tomcat后,可以使用http://localhost:8080/来访问Tomcat,其实访问的就是ROOT对应的Web应用;我们也可以通过http://localhost:8080/docs来访问docs应用,同理我们可以访问examples/host-manager/manager这几个Web应用。
- <Context path="/demm" docBase="E:\\projects\\demm\\WebRoot" debug="0" reloadable="true" >
- </Context>
- <!-- 属性说明
- path:访问的URI,如:http://localhost/是我的应用的根目录,访问此应用将用:http://localhost/demm进行操作,此元素必须,
- 表示此web application的URL的前缀,用来匹配一个Context。请求的URL形式为http://localhost:8080/path/*
- docBase:WEB应用的目录,此目录必须符合Java WEB应用的规范,web application的文件存放路径或者是WAR文件存放路径。
- debug:日志等级
- reloadable:是否在程序有改动时重新载入,设置成true会影响性能,但可自动载入修改后的文件,
- 如果为true,则Tomcat将支持热部署,会自动检测web application的/WEB-INF/lib和/WEB-INF/classes目录的变化,
- 自动装载新的JSP和Servlet,我们可以在不重起Tomcat的情况下改变web application
- -->
核心组件的关联
1、整体关系
核心组件之间的整体关系,总结一下:
Server元素在最顶层,代表整个Tomcat容器;一个Server元素中可以有一个或多个Service元素。
Service在Connector和Engine外面包了一层,把它们组装在一起,对外提供服务。一个Service可以包含多个Connector,但是只能包含一个Engine;Connector接收请求,Engine处理请求。
Engine、Host和Context都是容器,且 Engine包含Host,Host包含Context。每个Host组件代表Engine中的一个虚拟主机;每个Context组件代表在特定Host上运行的一个Web应用。
2、如何确定请求由谁处理?
当请求被发送到Tomcat所在的主机时,如何确定最终哪个Web应用来处理该请求呢?
(1)根据协议和端口号选定Service和Engine
Service中的Connector组件可以接收特定端口的请求,因此,当Tomcat启动时,Service组件就会监听特定的端口。在第一部分的例子中,Catalina这个Service监听了8080端口(基于HTTP协议)和8009端口(基于AJP协议)。当请求进来时,Tomcat便可以根据协议和端口号选定处理请求的Service;Service一旦选定,Engine也就确定。
通过在Server中配置多个Service,可以实现通过不同的端口号来访问同一台机器上部署的不同应用。
(2)根据域名或IP地址选定Host
Service确定后,Tomcat在Service中寻找名称与域名/IP地址匹配的Host处理该请求。如果没有找到,则使用Engine中指定的defaultHost来处理该请求。在第一部分的例子中,由于只有一个Host(name属性为localhost),因此该Service/Engine的所有请求都交给该Host处理。
(3)根据URI选定Context/Web应用
这一点在Context一节有详细的说明:Tomcat根据应用的 path属性与URI的匹配程度来选择Web应用处理相应请求,这里不再赘述。
(4)举例
以请求http://localhost:8080/app1/index.html为例,首先通过协议和端口号(http和8080)选定Service;然后通过主机名(localhost)选定Host;然后通过uri(/app1/index.html)选定Web应用。
三 实际上怎样安装tomcat服务器和部署web应用的
https://www.cnblogs.com/xdp-gacl/p/4097608.html
Linux下安装Tomcat服务器和部署Web应用
一、上传Tomcat服务器
二、安装Tomcat服务器
2.1、解压tomcat服务器压缩包
2.2、配置环境变量
tomcat服务器运行时是需要JDK支持的,所以必须配置好JDK用到的那些环境变量
编辑/etc下的profile文件,加上如下内容:
2.3、修改tomcat服务器的启动端口
修改将Tomcat服务器启动时使用的端口,例如改成9999
修改完server.xml文件之后,保存,退出。
三、Tomcat服务器启动和关闭
3.1、启动Tomcat服务器
进入tomcat服务器的bin目录,然后执行"./startup.sh"命令启动Tomcat服务器,如下图所示:
查看tomcat服务器的Log信息,看看tomcat服务器是否已经正常启动,进入tomcat服务器下的logs目录,打开catalina.out文件进行查看,如下图所示:
访问Tomcat服务器,如下图所示:
可以正常访问了,说明Tomcat服务器已经正常启动成功了。
如果tomcat启动不了,那么最有可能就是启动时使用的端口被其他应用程序占用了,那么可以通过如下的办法进行排查,例如查看9999端口被哪个应用程序占用了。
3.2、关闭Tomcat服务器
进入tomcat服务器的bin目录,然后执行"./shutdown.sh"命令启动Tomcat服务器,如下图所示:
查看tomcat服务器的Log信息,看看tomcat服务器是否已经正常关闭,进入tomcat服务器下的logs目录,打开catalina.out文件进行查看,如下图所示:
四、部署JavaWeb应用到Tomcat服务器
部署JavaWeb应用到Tomcat服务器就是将开放好的JavaWeb应用打包成war包,然后发布到tomcat服务器的webapps目录下
4.1、打包JavaWeb应用
项目打包成功,如下图所示:
4.2、将war包发布到tomcat服务器的webapps目录下
将JavaWeb应用打包成war包之后,要将这个war包放到tomcat服务器的webapps目录下,由于要部署的javaWeb应用使用的是JNDI数据源,所以首先要把数据库对应的驱动jar包放到tomcat服务器的lib目录下。
1、将Oracle数据库的驱动jar包上传到tomcat服务器的lib目录
如下图所示:
2、将打包好的war包上传到tomcat服务器的webapps目录
如下图所示:
上传war包到webapps目录
上传成功
Tomcat服务器自动解压缩war包
检查一下tomcat服务器是否自动在conf目录下创建了Catalina/localhost目录,在看看localhost目录下是否有tomcat服务器自动创建的oams.xml文件
五、Linux下安装Tomcat服务器使用到的命令
5.1、linux查看端口被哪个进程占用
例如:
5.2、查看Linux服务器的版本
例如:
5.3、查看当前iptables(防火墙)规则
可使用"iptables –L –n"查看当前iptables规则
例如:
5.4、添加指定端口到防火墙中
iptables -I INPUT -p 协议 --dport 端口号 -j ACCEPT
例如:
1 iptables -I INPUT -p udp --dport 161 -j ACCEPT
2 iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
--------------------------------------------------------------------------------------------------------------------------
2018.3.9更新用例子理解OSI7层模型的功能和tomcat中最大线程数、最大排队数、连接超时时间的工作原理。
物理层和数据链路层在性能测试时,如果发现有性能问题,通常可以通过更换硬件配置来解决问题。
在OSI7层模型工作,可以类比快递员给人送快递,想要收到快递,快递单上一定要有收件人的地址,所以网络层可以理解为快递员根据收货地址去送快递。
http请求的头head通常有refer user agent,系统信息,TCP的三次握手简单点说是浏览器发送请求,服务器接收到请求发回响应,并且发送校验信息,浏览器收到服务器的响应和校验信息后再发送给服务器确认信息,浏览器和服务器建立连接,这可以理解成是快递员在送货之前给顾客打电话确认,顾客同时确认快递员的身份,这是传输层TCP方式的工作原理,传输层UDP协议可以理解成快递员不打电话直接推开顾客的门送快递。TCP的有点就是安全,UDP的有点是高效,各有利弊。
会话层实际上是服务端对客户端提出的请求做出响应,可以理解为在登陆时,用户输入账号密码,服务器去数据库里查询输入的数据是否正确。
表示层是对数据进行加密,因为网络数据不安全,比如输入的账号密码要在表示层加密处理。
应用层就是展示结果成功或失败。
tomcat中当请求数已经达到最大线程数,会返回拒绝链接;如果在连接超时时间内没有返回结果,就是连接超时。老师举的例子是公司的前台接待访客,公司有2个前台,会客室有10个位置空余,每个访客从来访被前台接待到等待面试官面试最长半天,实际上2个前台就是最大线程数,10个空余位置是最大排队数,半天是连接超时时间,这样一举例子就非常好记忆。配置好tomcat之后要考虑服务器硬件是否能够支撑,最大线程数、最大排队数、超时时间要寻找一个配置最合理的点。