【web容器】:Tomcat

Tomcat基础

Web概念

软件架构

  • C/S:客户端/服务器端
  • B/S:浏览器/服务器端jiang’t

静态资源

  • 静态资源所有用户访问后,得到的结果都是一样的,称为静态资源,静态资源可以直接被浏览器解析。如果:html、css、JavaScript、jpg……
  • 动态资源:每个用户访问相同资源后,得到的结果可能不一样,称为动态资源动态资源转换为静态资源,再返回给浏览器,通过浏览器进行解析。如:servlet/jsp、php、asp……

网络通信三要素

  • IP:电子设备(计算机)在网络中的唯一标识。
  • 端口:应用程序在计算机中的唯一标识。
  • 传输协议:规定了数据传输的规则

常见的Web服务器

概念

  • 服务器:安装了服务器软件的计算机
  • 服务器软件:接受用户的请求,处理请求,做出响应
  • Web服务器软件:接受用户请求,处理请求,做出响应【在Web服务器软件中,可以部署Web项目,让用户通过浏览器来访问这些项目】

Tomcat安装

下载链接Tomcat下载链接

Tomcat目录结构

目录说明
bin存放Tomcat的启动、停止等批处理脚本文件
conf用于存放Tomcat的相关配置文件
libTomcat服务器的依赖包
logsTomcat默认的日志存放目录
webappsTomcat默认的Web应用部署目录
workWeb应用JSP代码生成和编译的临时文件

Tomcat启动停止

操作说明
启动双击 bin/startup.bat 文件
停止双击 bin/shutdown.bat文件
访问直接浏览器输入 http://localhost:8080

Tomcat源码

下载链接Tomcat源码下载链接
部署到Idea请看Tomacat部署到Idea
注意:配置过程中遇到了Maven配置的问题【Maven是Apache软件基金会组织维护的一款专门为Java项目提供构建依赖管理支持的工具】,Maven的部署以及具体学习请看尚硅谷的Maven学习

Tomcat架构

Http工作原理

HTTPHTTP协议是浏览器与服务器之间的数据传送协议。 作为应用层协议,HTTP是基于 TCP/IP协议来传递数据的(HTML文件、图片、查询结果等),HTTP协议不涉及数据包(Packet)传输,主要规定了客户端和服务器之间的通信格式

工作原理

  1. 用户通过浏览器进行了一个操作,比如输入网址并回车【比如返回一个HTML页面】,或者是点击链接返回一张图片】,接着浏览器获取了这个事件
  2. 浏览器向服务端发出TCP连接请求
  3. 服务程序接收浏览器的连接程序,并经过TCP三次握手建立连接
  4. 浏览器将请求数据包打包成一个HTTP协议格式的数据包
  5. 浏览器将该数据包推入网络,数据包经过网络传输,最终到达端服务程序
  6. 服务端程序拿到这个数据包后,同样以HTTP协议格式解包,获取到客户端的意图【用户想要从服务端得到什么资源】
  7. 得知客户端意图后进行处理,比如提供静态文件【比如图片】或者调用服务端程序获得动态结果【比如根据客户端提供的数据计算得到的结果】。
  8. 服务器将响应结果(可能是HTML或者图片等)按照HTTP协议格式打包
  9. 服务器将响应数据包推入网络,数据包经过网络传输最终达到浏览器。
  10. 浏览器拿到数据包后,以HTTP协议的格式解包,然后解析数据。
  11. 浏览器将HTML文件展示在页面上原理过程

Tomcat整体架构

【问题:如何处理浏览器发来的请求】Http服务器请求处理过程:(1)、浏览器发给服务端的是一个HTTP格式的请求,(2)、HTTP服务器收到这个请求后,需要调用服务端程序来处理,【服务端程序就是我们所写的Java类】,一般来说不同的请求需要由不同的Java类来处理。因此衍生了以下两种服务器处理请求的方式:

【猜想:两种服务器处理的方式】
服务器处理请求的两种方式

  • 第一种【图一】HTTP服务器直接调用业务类,这样需要在HTTP服务器内判断请求的类型再根据请求的种类来调用不同业务类【自己写的Java类】来处理,这会导致要许多的判断语句导致紧耦合的,故不采用。
  • 第二种【图二】HTTP服务器不直接调用业务类,而是把请求交给容器来处理,容器通过Servlet接口调用业务类,因此Servlet接口和Servlet容器的出现,达到了HTTP服务器与业务类解耦的目的。而Servlet接口和Servlet容器这一整套规范叫做Servlet规范。Tomcat按照Servlet规范的要求实现了Servlet容器,同时它们也具有HTTP服务器的功能。好处: 作为Java程序员,如果我们要实现新的业务功能【添加一些方法或类】,只需要实现一个Servlet,并把它注册到Tomcat(Servlet容器)中,剩下的事情就由Tomcat帮我们处理了

【实现:Servlet容器的工作流程】Servlet容器

  • HTTP服务器会用一个ServletRequest对象把客户的请求信息封装起来
  • ServletRequest对象调用Servlet容器的service方法,使得Servlet容器拿到请求后,根据请求的URL和Servlet的映射关系,找到相应的Servlet
  • 如果Servlet还没有被加载,就用反射机制创建这个Servlet,并调用Servlet的init方法来完成初始化
  • 接着调用Servlet中的service方法来处理请求
  • 处理好的请求用ServletResponse对象返回给HTTP服务器,最终HTTP服务器把响应发送给客户端
    【最终成品:Tomcat整体架构】
    Tomcat整体架构
  • 连接器(Connector)处理Socket连接【网络编程】,负责网络字节流与Request和Response对象的转换【如把Socket请求转换为ServletRequest对象
  • 容器(Container):加载和管理Servlet,以及具体处理Request请求,即上面的Servlet容器

连接器-Coyote

架构介绍

【架构】连接器架构介绍

  • Coyote是Tomcat的连接器框架的名称,是Tomcat服务器提供的供客户端访问的外部接口。客户端通过Coyoto与服务器建立连接、发送请求并接受响应
  • Coyoto封装了底层的网络通信(Socket请求及响应处理)【用于网络连接和文件IO流】,为Catalina容器提供了统一的接口,使Catalina容器与具体的请求协议IO操作方式完全解耦。Coyote将Socket【相当于客户端发过来的请求】输入转换封装为Request对象,交由Catalina容器进行处理,处理请求完成后,Catalina通过Coyote提供的Response对象将结果写入输出流
  • Coyote作为独立的模块,只负责具体的协议和【TCP连接】IO【客户端Socket请求带来的输入输出流】的相关操作,与Servlet规范实现没有直接关系,因此即便是Request和Response对象也未实现Servlet规范对应的接口,而是再Catalina中将他们进一步封装为ServletRequest和ServletResponse

注意:一个Catalina容器可以连接多个Coyote连接器的,Tomcat处理外部请求的最小单位是service里面至少包括一个连接器和容器

Tomcat支持的IO模型与应用层协议

  1. IO模型NIO【最常用,非阻塞I/O,采用Java NIO类库实现】、NIO2、APR
  2. 引用层协议HTTP/1.1【大部分Web应用采用的访问协议】、AJP、HTTP/2
    协议分层

连接器组件【更细致的架构】

【连接器具体的组件】
连接器组件
【请求到响应的过程以及其中每个组件承担的作用】

  1. 客户端请求【Socket】传输到EndPoint(Coyote通信端点,监听请求的组件,用来处理传输层TCP/IP协议的),EndPiont再将请求解析后发送给Processor注意EndPoint只是一个组件,真正的实现类叫做AbstractEndpoint
  2. Processor用来处理HTTP协议接收到来自EndPoint的Socket请求,将读取到的字节流解析为Request和Response对象,并且传给Adapter那
  3. Adapter(适配器模式)将Request对象转换为ServletRequest对象(或将ServletResponse对象转换为Response对象)

容器-Catalina【内部Container架构】

【Catalina的地位】CatalinaServlet容器的实现,在Tomcat中处于 核心的地位几乎所有的组件都围绕着Catalina,它的地位相当于等同Tomacat
Toncat模块分层
【Catalina的总体架构】
Catalina总体结构

总体说明Catalina【由于它是Tomcat的心脏,暂且当作等价于Tomcat】负责管理Server,而Server表示着整个服务器。Server下面有多个服务Service,每个服务都包含着多个连接器组件ConnectorCoyote 实现)和一个容器组件Container。在Tomcat 启动的时候, 会初始化一个Catalina的实例。
组件职责
Catalina负责解析Tomcat的配置文件 , 以此来创建服务器Server组件,并根据命令来对其进行管理
Server服务器表示整个Catalina Servlet容器以及其它组件,负责组装并启动Servlet引擎,Tomcat连接器。Server通过实现Lifecycle接口,提供了一种优雅的启动和关闭整个系统的方式
Service服务是Server内部的组件,一个Server包含多个Service。它将若干个Connector组件绑定到一个Container(Engine)上
Connector连接器,处理与客户端的通信,它负责接收客户请求,然后转给相关的容器处理,最后向客户返回响应结果
Container容器,负责处理用户的servlet请求,并返回对象给web用户的模块

Container】架构
Container架构

总体说明Container内部又包含了四种容器,分别是Engine、Host、Context和Wrapper。这4种容器不是平行关系,而是父子关系。, Tomcat通过一种分层的架构,使得Servlet容器具有很好的灵活性。
内部容器职责
Engine表示整个Catalina的Servlet引擎,用来管理多个虚拟站点,一个Service最多只能有一个Engine,但是一个引擎可包含多个Host
Host代表一个虚拟主机,或者说一个站点,可以给Tomcat配置多个虚拟主机地址【相当于一个服务器不一定只能使用一台电脑,可以通过在Tomcat的配置文件conf中的server.xml修改主机名或者添加Host标签来对访问的虚拟主机进行更新,这时我们要访问到Tomcat特定的虚拟主机,url中的IP地址是必须特定的主机域名】,而一个虚拟主机下可包含多个Context
Context表示一个Web应用程序, 一个Web应用可包含多个Wrapper
Wrapper表示一个Servlet【具体到多个实现类】,Wrapper 作为容器中的最底层,不能包含子容器

映射到Tomacat的配置文件server.xml:Tomcat 采用了组件化的设计,它的构成组件都是可配置的,其中最外层的是Server,其他组件 按照一定的格式要求配置在这个顶层容器中。

<?xml version="1.0" encoding="UTF-8"?>

<Server port="8005" shutdown="SHUTDOWN">
	<Service name="Catalina">
		<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
		<Engine name="Catalina" defaultHost="localhost">
			<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
				<Context></Context>
			</Host>
		</Engine>
	</Service>
</Server>

【Contanier的内部管理】
Tomcat是怎么管理这些容器的呢?你会发现这些容器具有父子关系,形成一个树形结构,你可能马上就想到了设计模式中的组合模式。没错,Tomcat就是用组合模式来管理这些容器的。

具体实现方法是,所有容器组件都实现了Container接口,因此组合模 式可以使得用户对单容器对象和组合容器对象的使用具有一致性。这里单容器对象指的是最底层的Wrapper,组合容器对象指的是上面的Context、Host或者Engine。

下图尤其重要,Tomcat中Engine,Context,Wrapper,Host接口有很多实现,默认执行标准实现逻辑,即下图中实现类
Container接口扩展了LifeCycle接口,LifeCycle接口用来统一管理各组件的生命周期
在这里插入图片描述

Tomcat启动流程

流程图
Tomcat启动流程图
【启动过程中重要的类】Lifecycle:由于所有组件均存在初始化、启动、停止等生命周期放法,拥有生命周期管理特性,所以Tomacat在设计时,基于生命周期管理抽象成了一个接口Lificycle,使每个组件都实现这个接口并具有以下生命周期中的核心方法:

  • init():初始化组件
  • start():启动组件
  • stop():停止组件
  • destory():销毁组件

连接器Coyote针对来自客户端请求的通信协议以及IO操作也有具体的抽象类,在这不做阐述。

Tomcat请求处理流程

【请求处理演示流程】
请求处理流程即是:

  1. 客户端请求发送到Tomcat的连接器中
  2. Tomcat的容器组件根据URL地址定位到具体的Servlet
  3. Servlet的实现类完成请求并返回值的过程

演示过程

  1. 在Idea下创建一个演示Web项目(servlet_demo01),并写一个简单的实现类(BbsServlet)继承于HttpServlet(或者继承Servlet接口)让这个实现类可以作为Servlet存在于容器Container中。演示1
  2. web.xml下编写配置文件写好url与具体Servlet的映射关系,使得Container能够根据请求找到具体的实现类完成请求中的处理要求。【根据URL中的bbs/findAll找到BbsServlet实现类演示2
  3. 将web项目(servlet_demo01)部署到Tomcat服务器中。【可直接将文件放入本地的Tomcat中的webapps文件夹中,或者根据操作部署到idea中的Tomcat中,具体见视频Web项目部署到Tomcat中
  4. 可以在网页上输入URL【localhost:8080/servlet_demo01/bbs/findAll】完成请求
    【如何完成URL到具体的Servlet实现类】Mapper组件Mapper组件里保存了Web应用的配置信息,即是容器组件与访问路径的映射关系,比如Host容器里配置的域名Context容器里的Web应用路径、以及Wrapper容器里的Servlet映射的路径,当一个请求到来时,Mapper组件通过解析请求URL里的域名与路径,在到自己保存的Map里去查找,就能定位到一个Servlet

演示3
在这里插入图片描述

Jasper【JSP引擎】

【Jasper的作用】:通常用于用户想访问JSP文件时(JSP文件是一个存在于服务器端的动态资源,由于浏览器只能访问静态文件HTML,故这时候Jasper发挥作用,将JSP动态资源转换成HTML呈现在浏览器)下图的红框就是Jaser的作用
Jasper
【解释】Jasper模块是Tomcat的JSP核心引擎JSP本质上就是一个Servlet(通过实现类动态的返回资源,比如红框中JspServlet返回了一个index.jsp,然后根据index.jsp再生成一个Servlet(index_servlet.java) 具体的实现可以见JSP编程Servlet源码。Tomcat使用Jasper对JSP语法进行解析,生成Servlet并生成Class字节码,用户在进行访问jsp时,会访问Servlet,最终将访问的结果直接响应子啊浏览器端,另外,在运行的时候,Jasper还会检测JSP文件是否修改,如果修改,则会重新编译JSP文件。
【上图红框中的执行源码过程见视频】Tomcat服务器将JSP动态资源准换成静态资源HTML返回源码过程

Tomcat服务器配置

Tomcat配置文件都在 “conf” 文件夹里,较为重要的有server.xml根据上面Catalina的架构,可以知道server.xml大概包括哪些配置标签】文件:

  • Service标签
    ——Executor标签(配置 共享线程池)
    ——Connector标签(创建连接器实例)可以指定传输协议和IO流
    ——Engine标签(Servlety引擎)
    ————(Engine内)Host标签(服务器管理的一系列虚拟主机,Host配置信息见Host配置信息
    ——————(Host内)Context标签(配置一个Web应用,具体看Context配置信息

  • tomcat-users.xml:配置进入所有虚拟主机的管理台的用户角色、密码、用户名,使得我们能够通过Tomcat提供的web界面进入虚拟主机管理台,即下面的host_manager

Web应用配置

web.xml通常存在于两个位置

  • Tomcat的配置目录"conf"下:配置Web应用的默认信息
  • 我们开发的Web应用程序下:配置当前Web应用的一些配置信息

web.xml配置标签

  • ServletContext初始化参数:通过时context-param配置ServletContext初始化时的一些参数信息【在Servlet实现类可以调用这些参数并在xml展现出来】
<context-param>
	<param-name></param-name>
	<param-value></param-value>
</context-param>
  • 会话配置(session-Cookie)
    【问题】:如下图,由于http协议是无状态的【没有携带标签表示这是否是一次重复的操作】,故第二次登录【或者 查询】时服务器并不知道你登录过了。
    登陆问题
    【解决】:通过SessionCookie来解决;当第一次登录请求发送给服务器,服务器会通过Session记录登录信息,并返回JSESSIONID(也就是Cookie),而第二次 查询时http就会携带Cookie生成的JSEESIONID到服务器找到Session记录的登录信息判断用户是否登录过了
    在这里插入图片描述
    【会话配置】:通过session-config标签配置
<session-config>
	<session-timout>30</session-timeout>//sesson的有效期
	<cookie-config>
		<name>JESSIONID</name>//Cookie的名字
		<domain>www.itcast.cn</domain>
		<path>/</path>
		<comment>Session Cookie</comment>
		<http-only>true</http-only>//Cookie只能通过HTTP方式进行访问,JS无法读取或修改,此项可以增加网站访问的安全性
		<secure>false<secure>//表示HTTPS能使用吗
		<max-age>3600<max-age>//cookie的有效期
	<cookie-config>
	<tracking-mode>COOKIE</tracking-mode>//使用COOKIE的跟踪模式
</seesion-config>
  • Servlet配置:主要配置ServletServlet-mapping
<servlet>
	<servlet-name>myServlet</servlet-name>//servlet的名字
	<servlet-class>cn.itcast.web.MyServlet</servlet-class>//servlet的实现类
	<init-param>//Servlet初始化信息
		<param-name>fileName</param-name>
		<param-value>innit.conf</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>//用于控制在Web应用启动时,Servlet的加载程序,值小于0,Web应用启动时,不加载servlet,而是第一次访问时加载
	<enabled>true</enabled>
</servlet>

<servlet-mapping>//配置url于servlet地址的映射关系
	<servlet-name>myServlet</servlet-name>
	<url-pattern>*.do</url-pattern>
	<url-pattern>/myservlet</url-pattern>
</servlet-mapping>
  • Listener配置Listener用于监听servlet中的事件,例如context、request、seesion对象的创建、修改、删除,并触发响应事件。Listener是观察者模式的实现,在servlet中主要用于对context、request、session对象的生命周期进行监控。使用listener标签

  • Filter配置:用于配置web应用过滤器,用来过滤资源请求响应。经常用于认证、日志、加密、数据转换等操作,使用filter标签

<filter>
	<filter-name>myFilter</filter-name>
	<filter-class>cn.itcast.web.MyFilter</filter-class>
	<async-supported>true</async-supported>
	<init-param>
		<param-name></param-name>
		<param-vlaue></param-value>
	<?init-param>
</filter>
<filter-mapping>
	<filter-name>myFilter</filter-naem>
	<url-pattern>/*<url-pattren>
</filter-mapping>
  • 欢迎页面配置:使用welcome-file-list配置,可以在tomcat配置也可以在自己的web项目下配置,使浏览器见到的第一个界面
<welcome-file-list>
	<welcome-fiel>index.html</welcome-file>
	<welcome-fiel>index.htm</welcome-file>
	<welcome-fiel>index.jsp</welcome-file>
</welcome-file-list>
  • 错误页面配置:用户访问错误浏览器显示的页面,使用error-page配置

Tomcat管理配置【host-manager和manager】

概述Tomcat提供了Web版的管理控制台,它们是两个独立的应用,位于webapps目录下。Tomcat提供的管理应用有用于管理Host【虚拟主机】的host-manager和用于管理Web应用的manager

  • host-manager虚拟主机管理台(需要在tomcat-users.xml:配置进入所有虚拟主机的管理台的用户角色、密码、用户名,使得我们能够通过Tomcat提供的web界面进入虚拟主机管理台(host_manager)。)
  • manager管理部署在当前tomcat服务器上的Web应用(需要在tomcat-users.xml:配置进入Manager的用户信息)

JVM配置

【概述】:最常见的JVM配置当属内存分配,因为在绝大多数情况下,JVM默认分配的内存可能不能够满足我们的需求,特别是生产环境,此时需要手动修改Tomcat启动时的内存参数分配。
JVM内存分配
【JVM配置文件位置】

  • windows:“Catalina.bat”
  • Linux:“catalina.sh”

【配置标签及其参数】
配置标签
参数信息

Tomcat集群

【简介】:由于单台Tomcat的承载能力是有限的,当我们的业务系统用户量比较大,请求压力比较大时,单台Tomcat是扛不住的,这个时候,就需要搭建Tomcat集群,【服务器集群就是指将很多服务器集中起来一起进行同一种服务,在客户端看来就象是只有一个服务器】而目前比较流行的做法就是通过Nginx来实现Tomcat集群的负载均衡【相当于我们平常输入的ip地址都是中转站Nginx的,然后再由Nginx帮我们分到具体的服务器ip,服务器集群中的ip可以相同也可以不同】。Tomcat集群【配置集群的步骤】

  1. 在磁盘下创建集群文件夹 "apache-tomacat-8.5.42-cluster ":
    步骤1
  2. 将两台tomcat分别重命名为 “tomcat-8888”“tomcat-9999” 放入集群文件夹中
    步骤2
  3. 在每个tomcat的配置文件夹conf中的server.xml里修改两台tomcat的端口号
    步骤3
  4. 安装Nginx放到集群文件夹中,并在 “conf” 文件夹中的 “nginx.conf” 在修改Nginx的配置文件【相当于将两个tomcat放入Nginx中
    步骤4
    【注意】:后面可以在浏览器的url里输入不同的端口号找到两个服务器(端口号8888和9999)与服务器集群(端口号99)

【负载均衡策略】:即是如何均衡地访问集群中的每台Tomcat服务器。

  • 轮询:最基本的配置方法,他是upstream模块默认的负载均衡默认策略,每个请求会按照时间的顺序逐一分配到不同的后端服务器。下图一样是在Nginx下配置的。 配置信息
  • 【weight权重】:权重方式,在轮询策略的基础上指定轮询的几率。
    配置信息
  • ip_hash:指定负载均衡器按照基于客户端IP的分配方式(Nginx会对客户端的ip进行Hash运算然后找到对应的服务器),这个方法确保了 相同的客户端的请求一直发送到相同的服务器, 以保证session会话。这样每个访客都固定访问一个后端服务器,可以解决session不能跨服务器的问题。配置信息

【Session共享方案】
问题:如下图,当用户第一次登录时,访问的是端口号为8888的服务器,并在此服务器创建了Session记录了用户信息,但第二次查询时由于负载均衡策略访问的是端口号为9999的服务器,由于该服务器没有创建用户的Session,故不会知道该用户已经登录过了问题
【方案】

  • ip_hash策略:(即是上面的ip_hash负载均衡策略)一个用户发起的请求,只会请求到tomcat1上进行操作,另一个用户发起的请求只在tomcat2上进行操作,那么这个时候,同一个用户发起的请求,都会通过nginx的ip_hash策略,将请求转发到其中一台tomcat上。
    方案1
  • Session复制策略:将Session在tomcat之间相互复制【服务器的广播机制,具体的演示可以看Session复制演示】,性能较差,目前都是通过Redis来管理Session 方案·2
  • sso-单点登录
    方案3

Tomcat安全

Tomcat安全包括配置安全、应用安全、传输安全

  • 配置安全
    1)、删除webapps目录下的所有文件,禁用tomcat管理界面(例如上面的host-manager和manager)
    2)、注释或删除tomcat-users.xml文件内的所有用户权限
    3)、更改关闭tomcat指令或禁用
    具体一些配置方法见tomcat安全配置
  • 应用安全:在大部分的Web应用中,特别是一些后台应用系统,都会实现自己的安全管理模块(权限模块),用于控制应用系统的安全访问,基本包含两部分:认证(登录/单点登录)和授权(功能权限、数据权限)两个部分。对于当前的业务系统,可以自己做一套适用于自己业务系统的权限模块,也有很多应用系统直接使用一些功能完善的安全框架,将其集成到我们的web应用中,如SpringSecurity、Apache Shiro等
  • 传输安全【HTTPS协议】HTTPS(超文本传输安全协议),是一种网络安全传输协议,在HTTPS的基础上加入SSL/TLS来进行数据加密,保护交换数据不被泄露、窃取。
    ——SSL/TLS:SSL和TLS是用于网络通信安全的加密协议,它允许客户端和服务器之间通过安全链接通信。SSL协议的三个特性:
    1)、保密:通过SSL链接传输的数据是加密的。
    2)、鉴别:通信双方的身份鉴别,通常是可选的,但至少有一方需要验证。
    3)、完整性:传输数据的完整性检查
    从性能角度考虑,加解密是一项昂贵的操作,因此尽量不要将整个Web应用采用SSL链接。
    ——HTTPS和HTTP的区别
    1)、HTTPS协议需要到证书颁发机构CA申请SSL证书,然后与域名进行绑定HTTP不用申请证书
    2)、HTTP是超文本传输协议,属于应用层信息传输HTTPS则是具有SSL加密传输协议,对数据的传输进行加密,相当于HTTP的升级版
    3)、HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是8080,后者是8443.
    4)、HTTP的连接很简单,是无状态的HTTP协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议更安全。
    ——Tomcat配置HTTPS协议:见tomcat配置HTTPS协议

Tomcat性能调优

【Tomcat性能测试】

  • 响应时间:执行某个操作的耗时。大多数情况下,我们需要针对同一个操作测试多少次,以获取操作的平均响应时间。
  • 吞吐量:即在给定的时间内,系统支持的事物数量,计算单位为TPS。

【Tomcat性能优化】
Tomcat是一款Java应用,那么JVM的配置便与其运行性能密切相关,而JVM优化的重点则集中在 内存分配GC策略 的调整上,因为内存直接影响服务的运行效率和吞吐量JVM垃圾回收机制则会不同程度地导致程序运行中断。可以根据应用程序的特点,选择不同的垃圾回收策略,调整JVM垃圾回收策略,可以极大减少垃圾回收次数,提升垃圾回收效率,改善程序运行性能。

  • JVM内存配置调优:可以见上面的JVM配置
  • JVM垃圾(GC)回收策略指标可以通过JDK自带的jconsole工具,查看远程的tomcat的概要信息
    1)、吞吐量工作时间(排除GC时间)占总时间的占比,工作时间并不仅是程序运行时间,还包括内存分配时间
    2)、暂停时间:测试时间段内,由垃圾回收导致的应用程序停止响应次数/时间垃圾收集器
    3)、配置垃圾回收器:在tomcat/bin/catalina.sh的配置中,可加入如下配置:
    在这里插入图片描述
    在这里插入图片描述
  • Tomcat配置调优:调整tomcat/conf/server.xml中关于链接器的配置可以提升应用服务器的性能。在这里插入图片描述

Tomcat附加功能(WebSocket)

【概述】WebSocket是HTML5新增的协议,他的目标是在浏览器和服务器之间建立一个不受限的双向通信的通道,比如说:服务器可以在任意时刻发送消息给浏览器。
在这里插入图片描述
WebSocket协议工作流程:下图黄色部分说明了WebSocket建立长连接的过程,长连接建立后浏览器和服务器之间就能互相建立通信。
在这里插入图片描述
【Tomcat的WebSocket】
在这里插入图片描述
在这里插入图片描述
具体案例可以看基于web Socket协议的会话聊天室

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值