Tomcat

【Tomcat】 tree -L 1├── bin # 包含了Tomcat服务器的可执行文件,如启动和关闭脚本、管理脚本等。├── BUILDING.txt # 包含了关于如何构建Tomcat服务器的说明文档。├── conf # 包含了Tomcat服务器的配置文件,如服务器配置、日志配置、Web应用程序配置等。├── CONTRIBUTING.md # 包含了关于如何向Tomcat项目贡献代码的说明文档。├── lib # 包含了Tomcat服务器运行所需的Java类库文件。 阅读详情

Tomcat

Tomcat运行在JVM之上,它和HTTP服务器一样,绑定IP地址并监听TCP端口,同时还包含以下指责:

  1. 管理Servlet程序的生命周期;
  2. 将URL映射到指定的Servlet进行处理;
  3. 与Servlet程序合作处理HTTP请求——根据HTTP请求生成HttpServletRequest/Response对象并传递给Servlet进行处理,将Servlet中的HttpServletResponse对象生成的内容返回给浏览器]

 

补充下Servlet容器工作模式

  

按照工作模式的不同,Servlet容器可以分为以下3类:

  1. 独立运行的Servlet容器

在这种模式下,Servlet容器作为构成Web服务器的一部分而存在。当使用基于Java的Web服务器时,就属于这种情况。这种方式是Tomcat的默认模式,然而大多数Web服务器并不是基于Java的,所以就产生了下面的两种其他类型。

  1. 内置的Servlet容器

Servlet容器由Web服务器插件和Java容器两部分组成。采用这种方式时,Web服务器插件需要在某个Web服务器内部地址空间中打开一个JVM(Java虚拟机),在此JVM上加载Java容器并运行Servlet。如果客户端调用Servlet,Web服务器插件首先获得此请求的控制并将它传递(使用JNI技术)给Java容器,然后Java容器把此请求交给Servlet来处理。这种方式运行速度较快,并且能够提供良好的性能,适用于单进程、多线程服务器,但是在伸缩性方面存在不足。

  1. 外置的Servlet容器

采用这种方式时,Servlet容器运行在Web服务器外部地址空间。先由Web服务器插件在某个Web服务器外部地址空间打开一个JVM(Java虚拟机),然后加载Java容器来运行Servlet。Web服务器插件和JVM之间使用IPC(进程间通信)机制(通常是TCP/IPSockets)。如果客户端调用Servlet,Web服务器插件首先获得此请求的控制并将它传递(使用IPC技术)给Java容器,然后Java容器把此请求交给Servlet来处理。这种方式对客户端请求的处理速度不如内置Servlet那样快,但是在其他方面(如可伸缩性、稳定性等)具有优势。

 

Tomcat属于Servlet容器,其工作模式也分为上述3种,所以Tomcat既可被用作独立运行的Servlet引擎(便于开发和调试),又可作为一个需要增强功能的Web服务器(如当前的Apache、IIS和Netscape服务器)插件。在配置Tomcat之前,就需要确定采用哪种工作模式,工作模式(1)比较简单,直接安装Tomcat即可,工作模式(2)和(3)有些复杂,除了安装Tomcat、Web服务器之外,还需要安装连接两者的中间连接件。

 

补充servlet:

 https://www.cnblogs.com/toov5/p/10639816.html

 

Tomcat工作原理

 

 

 

Tomcat的总体结构图

从上图可以看出Tomcat的核心是两个组件:连接器(Connector)和容器(Container)。Connector组件是负责生成请求对象和响应对象的,Tomcat默认的是HttpConnector,负责根据收到的Http请求报文生成Request对象和Response对象,并把这两个对象传递给Container,然后根据Response中的内容生成相应的HTTP报文。

Container是容器的父接口,所有子容器都必须实现这个接口,简单来说就是服务器部署的项目是运行在Container中的。Container里面的项目获取到Connector传递过来对应的的Request对象和Response对象进行相应的操作。

Connector可以根据不同的设计和应用场景进行替换。一个Container可以选择对应多个Connector。多个Connector和一个Container就形成了一个Service,有了Service就可以对外提供服务了。

Tomcat要为一个Servlet的请求提供服务,需要做三件事:

  1. 创建一个request对象并填充那些有可能被所引用的Servlet使用的信息,如参数,头部、cookies、查询字符串等。一个request对象就是javax.servlet.ServletRequest或javax.servlet.http.ServletRequest接口的一个实例。
  2. 创建一个response对象,所引用的servlet使用它来给客户端发送响应。一个response对象是javax.servlet.ServletResponse或javax.servlet.http.ServletResponse接口的一个实例。
  3. 调用servlet的service方法,并传入request和response对象。这里servlet会从request对象取值,给response写值。
  4. 根据servlet返回的response生成相应的HTTP响应报文。

既然我们已经抓到Tomcat的“七寸”,两个核心组件:连接器(Connector)和容器(Container),那这样从连接器(Connector)入手,来看下Tomcat处理HTTP请求的流程。

很多开源应用服务器都是集成tomcat作为web container的,而且对于tomcat的servlet container这部分代码很少改动。这样,这些应用服务器的性能基本上就取决于Tomcat处理HTTP请求的connector模块的性能。

 

 

1 Connector种类##

Tomcat源码中与connector相关的类位于org.apache.coyote包中,Connector分为以下几类:

Http Connector,基于HTTP协议,负责建立HTTP连接。它又分为BIO Http Connector与NIO Http Connector两种,后者提供非阻塞IO与长连接Comet支持。

AJP Connector,基于AJP协议,AJP是专门设计用来为tomcat与http服务器之间通信专门定制的协议,能提供较高的通信速度和效率。如与Apache服务器集成时,采用这个协议。

APR HTTP Connector,用C实现,通过JNI调用的。主要提升对静态资源(如HTML、图片、CSS、JS等)的访问性能。现在这个库已独立出来可用在任何项目中。Tomcat在配置APR之后性能非常强劲。

2 Connector配置##

对Connector的配置位于conf/server.xml文件中。

 2.1 BIO HTTP/1.1 Connector配置###

<Connector port=”8080” protocol=”HTTP/1.1” maxThreads=”150” 
    connectionTimeout=”20000” redirectPort=”8443” />

其它一些重要属性如下:

acceptCount : 接受连接request的最大连接数目,默认值是10;

address : 绑定IP地址,如果不绑定,默认将绑定任何IP地址;

allowTrace : 如果是true,将允许TRACE HTTP方法;

compressibleMimeTypes : 各个mimeType, 以逗号分隔,如text/html,text/xml;

compression : 如果带宽有限的话,可以用GZIP压缩;

connectionTimeout : 超时时间,默认为60000ms (60s);

maxKeepAliveRequest : 默认值是100;

maxThreads : 处理请求的Connector的线程数目,默认值为200;

如果是SSL配置,如下:

<Connector port="8181" protocol="HTTP/1.1" SSLEnabled="true" 
    maxThreads="150" scheme="https" secure="true" 
    clientAuth="false" sslProtocol = "TLS" 
    address="0.0.0.0" 
    keystoreFile="E:/java/jonas-full-5.1.0-RC3/conf/keystore.jks" 
    keystorePass="changeit" />

其中,keystoreFile为证书位置,keystorePass为证书密码。

2.2 NIO HTTP/1.1 Connector配置###

<Connector port=”8080” protocol=”org.apache.coyote.http11.Http11NioProtocol” 
    maxThreads=”150” connectionTimeout=”20000” redirectPort=”8443” />

2.3 Native APR Connector配置###

  1. ARP是用C/C++写的,对静态资源(HTML,图片等)进行了优化。所以要下载本地库tcnative-1.dll与openssl.exe,将其放在%tomcat%\bin目录下。

下载地址是:http://tomcat.heanet.ie/native/1.1.10/binaries/win32/

  1. 在server.xml中要配置一个Listener,如下图。这个配置tomcat是默认配好的。
<!--APR library loader. Documentation at /docs/apr.html --> 
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  1. 配置使用APR connector
<Connector port=”8080” protocol=”org.apache.coyote.http11.Http11AprProtocol” 
    maxThreads=”150” connectionTimeout=”20000” redirectPort=”8443” />
  1. 如果配置成功,启动tomcat,会看到如下信息:

org.apache.coyote.http11.Http11AprProtocol init

 

 

Tomcat架构模块##

 

 

 

Tomcat架构模块

  1. Server(服务器)是Tomcat构成的顶级构成元素,所有一切均包含在Server中,Server的实现类StandardServer可以包含一个到多个Services;
  2. 次顶级元素Service的实现类为StandardService调用了容器(Container)接口,其实是调用了Servlet Engine(引擎),而且StandardService类中也指明了该Service归属的Server;
  3. 接下来次级的构成元素就是容器(Container):主机(Host)、上下文(Context)和引擎(Engine)均继承自Container接口,所以它们都是容器。但是,它们是有父子关系的,在主机(Host)、上下文(Context)和引擎(Engine)这三类容器中,引擎是顶级容器,直接包含是主机容器,而主机容器又包含上下文容器,所以引擎、主机和上下文从大小上来说又构成父子关系,虽然它们都继承自Container接口。
  4. 连接器(Connector)将Service和Container连接起来,首先它需要注册到一个Service,它的作用就是把来自客户端的请求转发到Container(容器),这就是它为什么称作连接器的原因。

 

Tomcat运行流程

  

 

 

Tomcat运行流程

假设来自客户的请求为:http://localhost:8080/test/index.jsp

  1. 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得;
  2. Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的回应;
  3. Engine获得请求localhost:8080/test/index.jsp,匹配它所有虚拟主机Host;
  4. Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机);
  5. localhost Host获得请求/test/index.jsp,匹配它所拥有的所有Context;
  6. Host匹配到路径为/test的Context(如果匹配不到就把该请求交给路径名为""的Context去处理);
  7. path="/test"的Context获得请求/index.jsp,在它的mapping table中寻找对应的servlet;
  8. Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类;
  9. 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法;
  10. Context把执行完了之后的HttpServletResponse对象返回给Host;
  11. Host把HttpServletResponse对象返回给Engine;
  12. Engine把HttpServletResponse对象返回给Connector;
  13. Connector把HttpServletResponse对象返回给客户browser;

 

 转自:https://www.jianshu.com/p/571c474279af

 

posted @ 2019-04-01 22:36 toov5 阅读(...) 评论(...) 编辑 收藏

升级Tomcat解决Tomcat 安全漏洞【为了同一个tomcat版本安装多个服务】2026-7-16 如果是Java web应用,需要迁移webapps目录下的war文件。主要迁移conf目录下的文件,尤其是server.xml文件。访问日志路径配置,修改server.xml。为了同一个tomcat版本安装多个服务。访问 127.0.0.1:8080。 阅读详情

相关推荐

人大金仓的‘影子表’sys_user:搞懂Schema优先级,告别字段不存在的报错

本文深入解析人大金仓数据库中‘影子表’sys_user的Schema优先级问题,帮助开发者解决字段不存在的报错。通过分析Schema搜索路径机制,提供四种解决方案,包括连接时指定Schema、动态调整搜索路径、永久修改用户设置和使用完全限定表名,确保查询准确无误。

weixin_30329623的博客 596

创建maven项目时 groupid与artifactId

groupid和artifactId被统称为“坐标”是为了保证项目唯一性而提出的,如果你要把你项目弄到maven本地仓库去,你想要找到你的项目就必须根据这两个id去查找。  groupId一般分为多个段,这里我只说两段,第一段为域,第二段为公司名称。域又分为org、com、cn等等许多,其中org为非营利组织,com为商业组织。举个apache公司的tom...

weixin_34190136的博客 636

BLE蓝牙胎压监测

胎压监测系统新技术

qq_41851841的博客 1255

Tomcat 并发设置与优化

Tomcat 并发设置与优化 在Tomcat配置文件conf下面 server.xml 中的配置中和连接数相关的参数有: minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10 maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为75 acceptCount:允许的最大连接数,应大于等于maxProcessors,默认值为100 enableL...

ruan18801131005的博客 388

内部威胁论文阅读笔记(CMU-CERT专场)

在网上看了很多介绍该数据集的博客,一直有个疑问,这个数据集的标注在哪,本着先入为主的想法结合现有的资料对这个数据集的结构做了一下猜测(可能还是不严谨和正确)1.标注在哪2.什么是密集针模型3.场景文章连接内部人员由于可以绕过安全检测发起攻击,通常最有害的攻击被认为是内部人员发起。通过分析用户行为来检测内部威胁,主要分析一些类时间和活动进行特征选择。选择特征向量用于训练。采用cmu-certr4.2用于训练。提出的算法与。

Jerry的博客 2803

最新版 Akamai 逆向 风控破解

经过测试,捷星 jetstar.com,德州仪器 ti.com,w6 wizzair.com,还有一些航空公司的都是可以实现一个并发的有需要的可以。

m0_72605044的博客 6623

Tomcat调优策略

Tomcat调优策略 Jmeter压力测试工具 JMeter是一款在国外非常流行和受欢迎的开源性能测试工具,像LoadRunner 一样,它也提供了一个利用本地Proxy Server(代理服务器)来录制生成测试脚本的功能,但是这个功能并不好用。所以在本文中介绍一个更为常用的方法——使用Badboy录制生成 JMeter 脚本。 简单的介绍一下Badboy。Badboy是一款不错的Web自动...

art_code的博客 182

Cobalt Strike4.0安装包(内附中文版)

1.什么是 Cobalt Strike Cobalt Strike 是一个为对手模拟和红队行动而设计的平台,主要用于执行有目标的攻击和模拟高级威胁 者的后渗透行动。 Cobalt Strike已经不再使用MSF而是作为单独的平台使用,它分为客户端与服务端,服务端是一个,客户端可以有多个,可被团队进行分布式协团操作。集成了端口转发、扫描多模式端口Listener、Windows exe程序生成、W...

梦之序章的博客 2万+

TOMCAT优化

http://286.iteye.com/blog/2298505 TOMCAT优化 Tomcat是我们经常使用的 servlet容器之一,甚至很多线上产品都使用 Tomcat充当服务器。而且优化后的Tomcat性能提升显著,本文从以下几方面进行分析优化。 一、内存优化 默认情况下Tomcat的相关内存配置较低,这对...

weixin_33979745的博客 333

图神经网络实战——利用节点回归预测网络流量

在机器学习中,回归指的是对连续值的预测。通常与分类形成鲜明对比,分类的目标是找到正确的类别(即离散值,而非连续值)。在图数据中,分类和回归分别对应于节点分类和节点回归。在本节中,我们将尝试预测每个节点的连续值,而非分类变量。

盼小辉丶的博客 1万+

ArcGIS笔记13_利用ArcGIS制作岸线与水深地形数据?建立水动力模型之前的数据收集与处理?

在利用MIKE建立水动力模型之前,需要收集、处理和制作诸多数据和资料,主要有岸线数据、水深地形数据、开边界潮位驱动数据、风场数据、潮位和海流观测资料和站点潮汐调和常数资料等。本篇主要介绍这些资料的获取与处理。

晏长街的博客 5948

tomcat优化

        Tomcat是我们经常使用的 servlet容器之一,甚至很多线上产品都使用 Tomcat充当服务器。而且优化后的Tomcat性能提升显著,本文从以下几方面进行分析优化。           一、内存优化         默认情况下Tomcat的相关内存配置较低,这对于一些大型项目显然是不够用的,这些项目运行就已经耗费了大部分内存空间,何况大规模访问的情况。即使是本文中的...

286 1370

华为OD新系统机试真题 - 失灵的键盘(C/C++/Py/Java/Js/Go)

华为OD新系统机试真题 【失灵的键盘】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD4月15号机试真题【失灵的键盘】

qq_45776114的博客 1069

tomcat-Dockerfile 可配置tomcat的访问日志_dockerfile java -jar 指定tomcat日志

libapr1。

2401_87378735的博客 1704

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

TOMCAT

TOMCAT tomcat是什么: tomcat是一个中间件,在B/S架构中,浏览器发出的http请求经过tomcat中间件,转发到最终目的服务器上,响应消息再通过tomcat返回给浏览器 tomcat做的主要事情: 开启监听端口监听用户的请求,解析用户发来的http请求,然后访问你指定的应用系统,然后你返回的页面经过tomcat返回给用户 Apache、Nginx和tomcat的区别: Apa...

qq_45300162的博客 2158

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

tomcat优化总结

系统发生了比较严重的性能问题,因为事情紧急只能取消自己的休假计划,赶到现场调试系统。 到了之后,首先检查了Tomcat的配置文件server.xml,原来一直以为肯定是配置服务器的同学没有把Tomcat中默认的允许访问的最大数75给改掉,后来发现不是这个问题,在配置文件中设置Context的地方有一段非常的诡异:有一个Context的路径是在%Tomcat%/webapps/ROOT中的一个目录A

怪手大分的专栏 1万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

深入Tomcat:JNDI在TOMCAT中的应用

 说句实话,在J2EE应用中很少用Tomcat得,一般都用Weblogic,Jboss,不过在网上发现了这篇文章,对于想对Tomcat做深入研究的朋友的确不错!JNDI在TOMCAT中的应用 在J2EE应用中,JNDI可以简化开发者的工作。而TOMCAT则使用户可以很方便的使用JNDI来开发自己的应用。 一.JNDI的配置 用户只需要配置TOMCAT的$CATALINA_HOME/CONF/S

上海夜未眠 2631

如何配置Tomcat,以及Tomcat和IIS的配置(1)

如何配置Tomcat,以及Tomcat和IIS的配置(1)1、首先要先下载JDK和Tomcat,我使用的版本是JDK_1_4_2_08和Tomcat5.0.16.下载网址请自己网上搜。下面先安装JDK,然后再安装Tomcat。安装完成以后就要添加环境变量了。右击我的电脑->属性->高级->环境变量,在系统变量中新建或编辑环境变量需要添加的环境变量如下:(1)、JAVA_HOME(JDK运行使用

1469

TOMCAT服务

1.用户通过浏览器进行了一个操作,比如输入网址并回车,或者是点击链接,接着浏览器获取了这个事件。2.浏览器向服务端发出TCP连接请求。3.服务程序接受浏览器的连接请求并经过TCP三次握手建立连接。4.浏览器将请求数据打包成一个HTTP协议格式的数据包。5.浏览器将该数据包推入网络,数据包经过网络传输,最终达到端服务程序6.服务端程序拿到这个数据包后,同样以HTTP协议格式解包,获取到客户端的意图。7.得知客户端意图后进行处理,比如提供静态文件或者调用服务端程序获得动态结果。

CZZDg的博客 1151

shell脚本部署tomcat

#!/bin/bash #AUTHOR:AN #DATE:2019-08-29 #FUNCTION: #DESCRIBE:快速部署Tomcat ######################定义变量###################### Nfs_Dir=/cloud_nsd #NFS共享目录 Script_Path=$Nfs_Dir/shell #脚本路径 Soft_Path...

运维@小兵的博客 609

TOMCAT实验

配置Java环境Java环境被存放在 /etc/alternatives/目录下解压tomcat安装包到/usr/local/目录下,并制作软连接tomcat启动tomcat,查看端口浏览器访问。

weixin_65846252的博客 1001

Tomcat 中的JVM问题

1.TOMCAT初始JVM大小为64M,在将应用正式部署后,可以通过调整catalina.bat中的内容调整tomcat的初始JVM大小,以获得更好的性能。范例如下(catalina.bat):%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Xms128m -Xmx256m -Djava.endorsed.dirs="%JAVA_ENDO

技术无疆 3599

tomcat和apache

1. tomcat是什么?做什么用的? 2. tomcat和apache是什么关系?整合是怎么回事? 3. jsp和它们什么关系? 4. apache,tomcat,jsp,php,mysql能一起用吗? 1.TOMCAT是个支持JSP和Servlet的东东,当然也可以做为小型的WEB服务器来用。 2.APACHE是个大型的WEB服务器

ios_xumin的专栏 1446

tomcat下查看并发流量

http://wangxuliangboy.javaeye.com/blog/235081 如何在WINDOW下配置TOMCAT APR:   APR是什么呢,(Tomcat can use the Apache Portable Runtime to provide

yinshuiy的专栏 2262

tomcat 集群

集成 集成……老听人说具体它是个啥东东咧,下面这个关于tomcat集成就解释的蛮清楚的 借鉴一下下 目录 TOMCAT集群 1 1 集群 1 1.1 什么是集群 1 1.2 集群的特性 1 1.3 集群的分类 1 1.4 TOMCAT集群配置的优缺点 2 1.5 APACHE+TOMCAT 2 1.6 环境说明 2 2 软件安装 3 2.1 安装说明

牵手*-*白首 966
上一篇: Spring mvc和Servlet
下一篇: Servlet
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值