Tomcat服务(部署、虚拟主机配置、优化)

一、Tomcat简介

Tomcat是一款免费、开放源代码的Web应用服务器,是Apache软件基金会的一个核心开源项目,属于轻量级应用服务器。

image-20220726204437677

1、什么是Tomcat?

  • Tomcat:JAVA代码运行的平台

  • Tomcat属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。

  • 一般来说,Tomcat虽然和Apache 或者Ningx 这些Web 服务器一样,具有处理HTML页面的功能,然而由于其处理静态HTML的能力远不及Apache 和Nginx 。

  • 所以 Tomcat通常作为一个servlet和JSP容器,单独运行在后端

  • Tomcat是目前比较流行的 Web应用服务。

web服务:就是网页服,比如nginx。

web应用服务:就是应用服务能够使用web的形式进行运行。

2、Tomcat 核心组件

通常意义上Web服务器接收请求后,只是单纯的响应静态资源,如HTML文件、图片文件等,不能再后端进行一定的处理操作。

Tomcat是Apache 下的一个子项目,它具备Web服务器的所有功能,不仅可以监听接收请求并响应静态资源,而且可以在后端运行特定规范的 JAVA 代码 ,同时将执行的结果以HTML代码的形式写回客户端。

tomcat主要的三个容器:web容器、jsp容器、servlet容器。
什么是容器?
容器就是封装一组资源/功能集合的个体。

Tomcat 由一系列的组件构成,其中核心的组件容器有三个:

  • Web 容器: 完成Web服务器的功能HTTP/HTTPS 请求的接收和响应。

描述: ①接收、响应请求,②展示动态页面

  • JSP 容器 : 用以将index.jsp文件中的java代码翻译成Servlet 代码。

描述: index.jsp文件里面有静态展示的html语言,还有一些java类代码,但是文件中java代码无法直接被tomcat执行,所以需要先翻译为可以执行的代码方式,也就是翻译成servlet代码格式。

  • Servlet 容器: 由名称为Catalina的脚本来处理Servlet 代码。

描述: 使用catalina进行处理JSP容器翻译过来的servlet代码。

总体描述:(各组件之间如何对接)

假如用户需要登录支付宝的查看个人信息,通过网页的nginx服务的80端口,请求访问动态请求,nginx将请求反向代理到tomcat服务的8080端口,那么tomcat就收到了用户的请求,

请求给到Web 容器中有index.jsp 文件,里面存在java代码,需要处理动态请求,tomcat就去读取该文件中的java代码,但是java代码无法被tomcat识别,

所以就需要使用JSP 容器将index.jsp文件中的java代码,翻译为servlet代码,翻译成servlet代码后,就需要使用servlet 容器进行处理servlet代码。

那么selvlet容器会通过catalina脚本执行servlet代码。执行完成之后,使用api接口调用对应的支付宝应用,

支付宝收到用户的请求后,会进行调用mysql数据库的3306端口进行确认数据,最后将数据返回到用户。

在这里插入图片描述

3、Tomcat处理请求过程

  • Tomcat的端口为8080,但是监听8080端口的不是tomcat主进程,而是connector的连接器(java写的)监听的。
  • 使用netstat -natp |grep tomcat 无法查看到tomcat端口需要使用:netstat -natp |grep 8080 查看

Tomcat功能组件

service:对外提供的web服务,主要包含connector和container两个核心组件,以及其他功能组件,Tomcat可以管理多个service,且各service之间相互独立。

  • Connector: 负责对外接收和响应请求,它是Tomcat与外界的交通枢纽,监听端口接收外界请求,并将请求处理后传递给容器做业务处理,最后将容器处理后的结果响应给外界。
  • Container: 负责对内处理业务逻辑。其内部有Engine、Host、context和wrapper四个容器组成,用于管理和调用servlet相关逻辑。

Container结构分析:

每个Service会包含一个container容器。一个container内部包含了4个子容器。

  • **Engine引擎: **用来管理多个虚拟主机,一个service最多只能有一个Engine。
  • **Host: **代表一个虚拟主机,也可以叫站点。通过配置Host就可以添加虚拟主机。
  • **Context: **代表一个web应用,包含多个servlet封装器,用于连接Host项目和servlet容器
  • wrapper: 封装器,容器的最底层,每一个wrapper封装着一个servlet,负责对象实例的创建、执行、和销毁功能。

Engine、Host、context和wrapper,这四个容器之间属于父子关系

用户请求过程

用户访问网页内容,申请动态访问请求,通过nginx的80端口反向代理到tomcat的8080端口。

到了tomcat后,被connector(连接器中)的Coyote(java框架)监听到。

接收到请求之后,将请求交给container(容器)中的engine(引擎)进行处理,engine是作为容器运行的动力核心。

基于engine支撑,容器中会跑很多host虚拟主机(项目),这些虚拟主机中也会有很多的项目,然后通过context(当前程序所处的环境)连接到servlet容器。

servlet处理完成后返回给context。

context再返回给engine,engine再返回给端口,端口最后将页面展现先给用户

在这里插入图片描述

4、小结

Tomcat : 是一种Web应用服务

Tomcat所处的位置: 一般来说,是在Nginx之后,作为动态处理的服务。

Tomcat职能: 作为java 类语言开发的应用所执行和持续运行的平台。

Tomcat组成部分: Web容器、JSP容器、Servlet 容器

Tomcat工作流程: nginx的80端口接收—》tomcat8080端口由connector连接器监听—》给与容器的engine引擎—》Host项目(webapps中,对应项目的解压后的代码)—》通过context传递代码、连接—》应用的连接环境,最后执行servlet代码(动态的请求任务)—》最后,要么对接数据库,要么直接返回给nginx—》展示给用户查看。

二、部署Tomcat

1、环境部署—JDK

关闭防火墙
在这里插入图片描述

将所需安装包放置在/opt目录下
在这里插入图片描述

查看java的版本

java -version   #查看版本

在这里插入图片描述

安装jdk环境包

rpm -ivh jdk-8u201-linux-x64.rpm   #rpm安装

在这里插入图片描述

设置JDK的环境变量

vim /etc/profile    或  vim /etc/profile.d/java.sh     #修改配置文件

export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64           #设置路径
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar    #设置执行路径
export PATH=$JAVA_HOME/bin:$PATH                        #设置环境变量

source /etc/profile   或source /etc/profile.d/java.sh     #重新加载环境变量

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

再次查看java版本
在这里插入图片描述

2、安装启动Tomcat

解压tomcat包
在这里插入图片描述

将解压后的包剪切到/usr/local 目录中,并改名为tomcat
在这里插入图片描述

查看tomcat文件

我们如果要执行、持续运行一个java开发应用服务,在经过简单配置之后,可以直接将war包、jar包,放入到webapps中,来让tomcat运行。

主要目录说明
1、bin :存放启动和关闭Tomcat的脚本文件,比较常用的是:catalina.sh 、 startup.sh 、 shutdown.sh
2、conf: 存放Tomcat服务器的各种配置文件,比较常用的是server.xml、context.xml、tomcat-users.xml、web.xml
3、lib: 存放Tomcat服务器的jar包,一般不做任何改动,除非连接第三方服务,比如redis,那就需要添加对应的jar包。
4、logs:存放Tomcat日志
5、temp:存放Tomcat运行时产生的文件
****6、webapps:存放项目资源的目录
7、work: Tomcat工作目录,一般清除Tomcat缓存的时候会使用到

Tomcat配置文件详解
1、catalina.policy :权限控制配置文件
2、catalina.properties: Tomcat的属性配置文件
3、context.xml : 上下文配置文件
4、logging.properties:日志相关配置文件
***5、server.xml : 主配置文件,通过配置文件,可以修改tomcat的启动端口,网站目录,虚拟主机,开启https等功能
6、tomacat-user.xml/.xsd: 管理用户配置文件
7、web.xml: tomcal的servlet、servlet-mapping、filter、MIME等相关配置

在这里插入图片描述
在这里插入图片描述

将启动脚本放入环境中方便启动

后台启动
/usr/local/tomcat/bin/startup.sh
或
/usr/local/tomcat/bin/catalina.sh  start

前台启动(终端关闭,tomacat停止运行)
/usr/local/tomcat/bin/catalina.sh  run

关闭
/usr/local/tomcat/bin/shutdown.sh 

将启动关闭脚本放入到环境中
ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin
ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/bin

在这里插入图片描述

启动tomcat
在这里插入图片描述

页面访问:20.0.0.55:8080

这个页面也是在tomcat中作为一个项目在运行,路径为:/usr/local/tomcat/ROOT/ 下面的文件

image-20220727011130966

3、tomcat启动优化

  • 优化tomcat启动速度

  • 直接启动tomcat的速度很快,但是tomcat中跑了项目后,启动就很慢(40G可能启动10分钟)。

  • 当java中的jar包、war包放在/webapps中,需要重新启动tomcat服务,(shutdown.sh 和startup.sh), 重启tomcat的目的: 是为了让tomcat的环,能够重新加载、识别/webapps目录下的这些java代码。

vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security   #修改jdk的配置参数

在这里插入图片描述

  • urandom:表示随机池更大

三、Tomcat虚拟主机配置

虚拟主机的概念: 是模拟多个渠道(功能)

  • 优点: 充分使用资源、管理便捷、降低架构的复杂度,方便自定义“扩容”(创建多个虚拟主机)

  • 缺点: 需要其它资源的支持、消耗相同的网络资源、单点故障

nginx中的虚拟主机: 基于不同的IP、基于不同的域名、基于不同的端口。(配置文件中,每一个server就是一个虚拟主机)

Tomcat中的虚拟主机: 使用一台tomcat服务运行多台虚拟主机,通过不同的虚拟主机访问不同的项目。(配置文件中,每一个host就是一个虚拟主机)

1、创建项目目录文件

首先创建两个Host虚拟主机,一个ydq项目,一个benet项目
在这里插入图片描述

创建项目的页面文件
在这里插入图片描述

2、修改Tomcat主配置文件:server.xml

找到主配置文件
在这里插入图片描述

配置文件主要内容介绍(connector)
在这里插入图片描述

添加ydq项目和benet项目的内容

<Host name="www.ydq.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/ydq" path="" reloalable="true" />
</Host>

<Host name="www.benet.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/benet" path="" reloalable="true" />
</Host>

配置文件介绍
Host name:主机名
appBase:Tomcat程序工作目录,即存放web应用程序的目录,相对路径:webapps,绝对路径:/usr/local/tomcat/webapps
unpackWARs:在启用此webapps时是对WAR格式的归档文件先进行展开
autoDeploy:在Tomcat处于运行状态时放置于appBase目录中的应用城西是否进行更新
xmlValidation:是否验证xml执行有效检验的标志
xmlNamespaceAware:是否启用命令空间,设置该值于xmlValidation为true,表示web.xml文件执行有效性验证
docBase:相应的web应用程序的存放位置,也可以使用相对路径,起始路径为此context所属Host中appBase定义的路径
path:相对web服务器跟路径而言的URI,如果为空,则表示为webapps的根路径/
reloadable:是否允许重新加载此context相关的web应用程序的类。

在这里插入图片描述

关闭和开启tomcat服务
在这里插入图片描述

3、客户端浏览器访问

访问网址时为什么需要加上8080端口?
因为网页默认端口为80,所以需要加上端口进行访问到tomcat。

客户机上配置DNS
在这里插入图片描述

浏览器搜索:www.ydq.com:8080
在这里插入图片描述

浏览器搜索:www.benet.com:8080
在这里插入图片描述

Tomcat服务器内部数据流向图

在这里插入图片描述

4、小结

配置文件中的Host项目格式
<host name>  为开头
<Contet......../> 配置如何连接OST的运行环境位置(指向web)
</host> 表示该项目的结尾

四、Tomcat优化

  • 默认安装下的缺省配置并不适合生产环境,它可能会频繁出现假死现象需要重启,只有通过不断压测优化才能让他最高效率稳定的运行,优化主要包括三方面,分别为操作系统优化(内核优化),Tomcat配置文件参数优化,Java虚拟机调优。

  • 优化的配置文件为:/usr/local/tomcat/conf/server.conf ,优化的方向为Connector容器。

1、常用的优化相关参数如下Tomcat配置文件参数

【maxThreads】:Tomcat使用线程来处理接收的每个请求,这个值表示Tomcat可以创建的最大的线程数,默认值为200。

【minSpareThreads】:最小空闲线程数。启动时的初始化的线程数,表示即使没有人使用也开这么多空线程等待,默认值是10.

【maxSpareThreads】:最大备用线程数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。默认值是-1(无限制),一般不需要指定。

【URIEncoding】:指定Tomcat容器的URL编码格式,语言编码格式这块倒不如其它Web服务器软件配置方便,需要分别指定。

【connectionTimeout】:网络连接超时,单位:毫秒,设置为0表示用不超时,这样设置有隐患的,通常默认20000毫秒就可以。

【enableLookups】:是否反查域名,以返回远程主机的主机名,取值为true或false,如果设置为false,则直接返回IP地址,为了提高处理能力,应设置false。

【disabkeUploadTimeout】:上传是否使用超时机制,应设置为true

【connectionUploadTimeout】:上传超时时间,毕竟文件上传可能需要消耗更多的时间,这个格局你自己的业务需要自己挑,以使servlet有较长的时间来完成它的执行,需要与上一个参数一起配置使用才会生效。

【accpetCount】:指定所有可用使用的处理请求的线程数都被使用时,可传入连接请求的最大列长度,超过这个数的请求将不予处理,你默认为100个。

【compression】:是否对相应的数据进行GZIP压缩,off:表示进制压缩,on:表示允许压缩(文本将被压缩),force:表示所有情况下都进行压缩,默认值为0ff,压缩数据可以有效的减少压面的大小,一般可以减小1/3左右,节省带宽。

【compressionMinSize】:表示压缩相应最小值,只有当相应报文大小大于这个值的时候,才会对报文进行压缩,如果开启压缩功能,默认值就是2048.

【compressableMimeType】:压缩类型,指定堆哪些类型的文件进行数据压缩

【noCompressionUserAgents=“gozilla,traviata”】:对于以下浏览器,不启用压缩。

2、优化配置

vim /usr/local/tomcat/conf/server.xml

#71行添加
minSpareThreads="50" 
enableLookups="false" 
disableUploadTimeout="true" 
acceptCount="300" 
maxThreads="500" 
processorCache="500"
URIEncoding="UTF-8" 
compression="on" 
compressionMinSize="2048" 
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image /jpg,image/png"/>

在这里插入图片描述

重启tomcat服务。即可正常完成配置。
在这里插入图片描述
在这里插入图片描述

五、总结

Tomcat可做为运行JAVA代码的环境,只要把java源码(.class可执行的类文件)或者war包或jar包放在/webapps中,那么Tomcat启动时,就可以解压,并运行放在/webapps中的这些应用(只需要修改配置文件:server.xml)

engine引擎---》Host---》context---》servlet(调用应用程序的java代码执行动态操作的环境)

1、tomcat 组件有哪些,从进入到处理

  • server: server元素在最顶层,代表整个Tomca容器,因此它必须是server.xml中唯一一个最外层的元素。一个server元素中可以有一个或多个service元素。server的主要任务,就是提供一个接口让客户端能够访问到这个service集合。同时维护它所有的service的声明周期,包括如何初始化,如何结束服务,如何找到客户端要访问的service。

  • service: service的作用,是在connector和engine外面报了一层,把他们组装在一起,对外提供服务,一个service可以包含多个connector,但是只能包含一个engine,其中connector的作用是从客户端接收请求,engine的作用是处理接收进行的请求,TTomcat可以提供多个service,不同的service监听不同的端口。

  • connector : 连接器,coyo http/1.1 8080 端口

  • engine: 容器引擎,容器引擎是管理运行容器的一个核心组件(container:web容器、jsp容器、servlet容器)

  • Host: 需要和java运行环境进行对接—》通过context连接java运行环境

  • context: Context元素代表在特定虚拟主机上运行的一个Web应用。每个Web应用基于WAR文件,或WAR文件解压后对应的目录(这里称为应用目录)。Context是Host的子容器,每个Host中可以定义任意多的Context元素。

  • servlet: 管理调用以及运行java代码的核心组件

2、Tomcat虚拟主机

在service.xml 中进行配置,只需要对应配置 <Context …/> 这段就可以了,此配置用于定于Tomcat 如何管理JAVA应用+如何对接、连接java应用。

3、Tomcat优化

①配置文件中的优化:我们会在connector 连接配置端中进行优化,而优化的内容包括:如何更好的等待请求,如何分配线程资源、内存资源、队列、连接数、超时时间。启动时间优化(启动时间优化是优化jdk优化。进入/var/java/jdk-xxxxx/securty/java.securty 启动线程/dev/random ->/dev/urandom 的优化)

②JVM优化:-Xms -Xmx 的优化—》表示的意思是最小/最大的内存优化-----》简单理解为-Xms -Xmx 就是对应用使用的内存资源最小、最大值的优化。

③GC垃圾回收优化—》是因为java应用在Tomcat时,当应用运行的线程、进程资源退出时,会遗留一些资源碎片,GC就是对于这些资源碎片进行指定回收用的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值