Tomcat部署及优化

【前言】

Tomcat是常见的免费web服务器:
Tomcat这个名字的来历:Tomcat是一种野外的猫科动物,不依赖人类,独立生活。Tomcat的作者,取这个名字的初衷是希望,这一款服务器可以自力更生,自给自足,像这种野生动物一样,不依赖任何插件,而可以独立达到web服务的效果:

一、Tomcat概述

在这里插入图片描述

  • Tomcat是Java语言开发的,Tomcat服务器是一个免费的开放源代码的Web应用服务器,是Apache软件基金会的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。
  • Tomcat属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。
  • 一般来说,Tomcat虽然和Apache或者Nginx这些Web服务器一样,具有处理HTML页面的功能,然而由于其处理静态HTML的能力远不及Apache或者Nginx,所以Tomcat通常是作为一个Servlet和JSP容器,单独运行在后端

1.1 Tomcat介绍

  • 免费的、开放源代码的Web应用服务器
  • Apache软件基金会(Apache Software Foundation)Jakarta项目中的一个核心项目
  • 由Apache、Sun和一些公司及个人共同开发而成
  • 深受Java爱好者的喜爱,并得到部分软件开发商的认可
  • 目前比较流行的Web应用服务器

1.2 Tomcat三个核心组件

在这里插入图片描述

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

名称功能
Web 容器完成 Web 服务器的功能
Servlet 容器名字为 catalina,用于处理 Servlet 代码
JSP 容器用于将 JSP 动态网页翻译成 Servlet 代码

1、Web容器 :①接受、响应请求
② 展示动态页面
入口 出口 2、JSP容器:翻译java–> servlet index.html --》 nginx可以直接展示index.php

index.jsp --> java环境—》和数据库怎么进行交互,怎么连接到后端???

index.jsp—》java类代码—》就是执行对接后端的执行代码,所以我们需要在进行与用户交互时,将用户发出的请求、数据、传输到后端
但是index.jsp中的一些java代码无法直接执行对接或者调用,需要先翻译魏可以可直接执行的代码方式—》格式serverlst
代码格式

3、serverlet容器:serverlet代码格式就是用JSP容器来处理

1.3 Tomcat两个功能组件

  • connector(连接器):负责接收和反馈外部请求
  • container(容器):负责处理请求,处理内部业务数据
  • 两者构成了基本的web服务service,每个tomcat服务器可以管理多个service

Container容器

Container用于封装和管理Servlet,以及具体处理Request请求,Connector内部把喊了4个子容器
4个子容器的作用分别是:

子容器名称作用
Engine引擎,用来管理多个站点,一个Service最多只能由一个Engine
Host代表一个站点,也可以叫虚拟主机,通过配置Host就可以添加站点
Context代表一个应用程序,对应着平时开发的一套程序, 或者一个WEB-INE目录以及下面的web. xml文件
Wrapper每一Wrapper封装着一 个Servlet

1.4 Java Servlet

运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP
服务器上的数据库或应用程序之间的中间层。使用Servlet,可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。与CGI(公共网关接口)功能相类似。

1.5 JSP

JSP全称Java Server Pages,一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。
JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。
JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

二、Tomcat顶层架构

1、Tomcat中最顶层的容器是Server, 代表着整个服务器,一 个Server可以包含至少一 个Service,用于具体提供服务。
2、Service主要包含两个部分:Connector和Container。Tomcat的心脏就是这两个组件,这两个组件的作用: Connector用于处理连接相关的事情,并提供Socket与Request和Response相关的转化;Container用于封装和管理Servlet, 以及具体处理Request请求。
3、一个Tomcat中只有一-个Server, 一个Server可以包含多个Service, 一个Service只有一个Container, 但是可以有多个Connectors, 因为一个服务可以有多个连接,如同时提供Http和Https链接, 也可以提供向相同协议不同端口的连接。
4、多个Connector 和一个Container 就形成了一个Service, 有了Service 就可以对外提供服务了,但是Service还要一个生存的环境,必须要有人能够给她生命、掌握其生死大权,那就非Server 莫属了!所以整个Tomcat的生命周期由Server控制。另外,上述的包含关系或者说是父子关系,都可以在tomcat的conf目录下的server.xml配置文件(主配置文件)中看出。
5、server . xml中定义
这会让Tomcat6启动一 个server实例(即一 个JVM),它监听在8005端口以接收“SHUTDOWN"命令,如果接收到了就会关闭Tomcat。各Server的定义不能使用同一个端口,这意味着如果在同一个物理机上启动了多个Server实例,必须配置它们使用不同的端口。

三、Tomcat 处理请求过程

Tomcat响应一次请求的流程:

在这里插入图片描述

假设来自客户的请求为:
http://localhost:8080/wsota/wsota_index.jsp
1) 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得 
2) Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应 
3) Engine获得请求localhost/wsota/wsota_index.jsp,匹配它所拥有的所有虚拟主机Host 
4) Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机) 
5) localhost Host获得请求/wsota/wsota_index.jsp,匹配它所拥有的所有Context 
6) Host匹配到路径为/wsota的Context(如果匹配不到就把该请求交给路径名为""的Context去处理) 
7) path="/wsota"的Context获得请求/wsota_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

四、配置文件介绍及核心组件

4.1 配置文件

安装目录下 文件介绍

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

conf子目录

文件名说明
server.xml主配置文件 (http协议8443)
web.xml每个webapp只有“部署"后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认部署相关的配置,每个web应用也可以使用专用配置文件,来覆盖全局文件
context.xml用于定义所有web应用均需加载的Context配置,此文件为所有的webapps提供默认配置,每个web应用也可以使用自已专用的配置,它通常由专用的配置文件context.xml来定义,其存放位置为WEB-INF/目录中,覆盖全局的文件
tomcat-users.xml用户认证的账号和密码文件
catalina.policy当使用security选项启动omcat时,用于为tomcat设置安全策略
catalina.properties Tomcat环境变量的配置,用于设定类加载器路径,以及一些与JVM调优相关参数
logging.propertiesTomcat日志系统相关的配置,可以修改日志级别和日志路径等
注意配置文件对于大小写敏感

4.2 磁盘文件 和访问的url对应关系

apache:
/var/www/html/index.html  ----->   http://www.kiro.com/index.html
/var/www/html/test/index.html  ----->   http://www.kiro.com/test/index.html

tomcat:
/usr/local/tomcat/webapps     

/usr/local/tomcat/webapps/ROOT/index.jsp  -----> http://www.kiro.com/index.jsp
/usr/local/tomcat/webapps/test/index.jsp  -----> http://www.kiro.com/test/index.jsp

###apache的目录不是平级的,而Tomcat是平级的,默认访问的是/usr/local/tomcat/webapps/ROOT/index.jsp

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

五、Tomcat服务部署

5.1安装jdk

在部署 Tomcat 之前必须安装好 jdk,因为 jdk 是 Tomcat 运行的必要环境。

   1. #关闭防火墙
   
   systemctl stop firewalld
   systemctl disable firewalld
   setenforce 0
   
   2. #将安装 Tomcat 所需软件包传到/opt目录下
      apache-tomcat-9.0.16.tar.gz 
      jdk-8u201-linux-x64.rpm
   3. #切换至/opt下,安装JDK
      cd /opt
      rpm -ivh jdk-8u201-linux-x64.rpm 

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

将安装 Tomcat 所需软件包传到/opt目录下
在这里插入图片描述

切换至/opt下,安装JDK

在这里插入图片描述

5.2 设置JDK环境变量

1. #修改配置文件
vim /etc/profile
 
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
 
2. #刷新配置文件
source /etc/profile     //刷新
java -version           //查看版本

修改配置文件

在这里插入图片描述

刷新配置文件
在这里插入图片描述
在这里插入图片描述

5.3安装tomcat

1. #切换至/opt下,解压tomcat包
cd /opt
tar -zxf apache-tomcat-9.0.16.tar.gz 
 
2. #将解压后的包拷贝至/usr/local/下并重命名
cp -r apache-tomcat-9.0.16 /usr/local/tomcat

切换至/opt下,解压tomcat包

在这里插入图片描述

将解压后的包拷贝至/usr/local/下并重命名

在这里插入图片描述

5.4启动tomcat

1. #切换至拷贝的目录下,启动tomcat
cd /usr/local/tomcat/
##后台启动
/usr/local/tomcat/bin/startup.sh
或
/usr/local/tomcat/bin/catalina.sh start
 ##前台启动
 /usr/local/tomcat/bin/catelina.sh run
 
2. #看是否启动成功
ss -natp |grep 8080
 
3. #在网页测试是否可以成功登录
http://192.168.61.24:8080/

切换至拷贝的目录下,启动tomcat,并查看看是否启动成功

在这里插入图片描述

在网页测试是否可以成功登录
在这里插入图片描述

5.5将tomcat添加到服务

1. #先关闭服务
/usr/local/tomcat/bin/shutdown.sh
 
2. #添加用户设置属主属组
useradd -s /sbin/nologin tomcat
chown tomcat:tomcat tomcat/ -R     //在/usr/local目录下设置
 
3. #新建服务文件
vim /etc/systemd/system/tomcat.service
[Unit]
Description=Tomcat
#After=syslog.target network.target remote-fs.target nss-lookup.target
After=syslog.target network.target
 
[Service]
Type=forking
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
RestartSec=3
PrivateTmp=true
User=tomcat
Group=tomcat
 
[Install]
WantedBy=multi-user.target
 
4. #重新加载服务,并开启,查看是否成功启动
systemctl daemon-reload
systemctl start tomcat
ss -ntap |grep 8080

关闭服务
在这里插入图片描述
添加用户设置属主属组
在这里插入图片描述在这里插入图片描述
新建服务文件
在这里插入图片描述
重新加载服务,并开启,查看是否成功启动
在这里插入图片描述

六、Tomcat服务优化

6.1 Tomcat 虚拟主机配置

可能有时候公司会有多个项目需要运行,那么肯定不可能是一台服务器上运行多个Tomcat 服务,这样会消耗太多的系统资源。此时,就需要使用到 Tomcat 虚拟主机。例如现在新增两个域名 www.yxp.com,www.accp.com希望通过这两个域名访问到不同的项目内容。

1. #创建kiro 和 accp 项目目录和文件
mkdir /usr/local/tomcat/webapps/kiro
mkdir /usr/local/tomcat/webapps/accp

2. #创建文件
   echo "this is kiro web" > kiro/index.html
   echo "this is accp web" > accp/index.html

3. #修改tomcat主配置文件
   vim /usr/local/tomcat/conf/server.xml 
   ##165行插入
    <Host name="www.kiro.com"  appBase="/usr/local/tomcat/webapps" unpackWARs="true" autoDeploy="true"
      xmlValidation="false" xmlNamespaceAware="false">
         <Context docBase="/usr/local/tomcat/webapps/kiro"
            path="" reloadable="true" />

   
     </Host>
        <Host name="www.accp.com"  appBase="/usr/local/tomcat/webapps" unpackWARs="true" autoDeploy="true"
              xmlValidation="false" xmlNamespaceAware="false">
              <Context docBase="/usr/local/tomcat/webapps/accp"
                path="" reloadable="true" />
     </Host>
------------------------------------------------------------------------------------
Host name:主机名
appBase:Tomcat程序工作目录,即存放web应用程序的目录;相对路径为webapps,绝对路径为 /usr/local/tomcat/webapps
unpackWARs:在启用此webapps时是否对WAR格式的归档文件先进行展开;默认为true
autoDeploy:在Tomcat处于运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy;默认为true
xmlValidation:是否验证xml文件执行有效性检验的标志
xmlNamespaceAware:是否启用xml命名空间,设置该值与xmlValidation为true,表示对web.xml文件执行有效性检验

docBase:相应的Web应用程序的存放位置;也可以使用相对路径,起始路径为此Context所属Host中appBase定义的路径;
path:相对于Web服务器根路径而言的URI;如果为空“”,则表示为此webapp的根路径 / ;
reloadable:是否允许重新加载此context相关的Web应用程序的类;默认为false
---------------------------------------------------------------------------------------
   

4. #重启服务
   systemctl restart tomcat

5. #再开启一台centos虚拟机,更改host文件
   192.168.59.118  www.kiro.com  www.accp.com

6. #在网页中测试
   http://www.accp.com:8080/accp/
   http://www.kiro.com:8080/kiro/
   创建 kiro 和 accp 项目目录和文件

创建目录和文件
在这里插入图片描述
在这里插入图片描述
修改主配置文件
在这里插入图片描述
在这里插入图片描述

重启服务并添加域名(另一台CentOS和windows主机)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在网页中测试
在这里插入图片描述在这里插入图片描述
如果出现乱码情况,在/usr/local/tomcat/kiro/index.html文件中添加

<meta charset="UTF-8"/>

在这里插入图片描述

6.2 HTTP 请求过程:

(1)Connector 连接器监听的端口是 8080。由于请求的端口和监听的端口一致,连接器接受了该请求。
(2)因为引擎的默认虚拟主机是 www.kgc.com,并且虚拟主机的目录是webapps。所以请求找到了 tomcat/webapps 目录。
(3)访问的路径为根路径,URI 为空,即空是 Web 程序的应用名,也就是 context。此时请求找到 /usr/local/tomcat/webapps/kgc 目录,解析 index.jsp 并返回。

6.3 Tomcat优化

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

常用的优化相关参数如下:
Tomcat 配置文件参数优化
【redirectPort】 如果某连接器支持的协议是HTTP,当接收客户端发来的HTTPS请求时,则转发至此属性定义的端口。

【maxThreads】 Tomcat使用线程来处理接收的每个请求,这个值表示Tomcat可创建的最大的线程数,即支持的最大并发连接数,默认值是 200。

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

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

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

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

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

【disableUploadTimeout】 上传时是否使用超时机制。应设置为 true。

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

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

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

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

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

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

以上是一些常用的配置参数,还有好多其它的参数设置,还可以继续深入的优化,HTTP Connector 与 AJP Connector 的参数属性值,可以参考官方文档的详细说明进行学习。

Tomcat的缺省端口是多少,怎么修改 找到Tomcat目录下的conf文件夹 进入conf文件夹里面找到server.xml文件
打开server.xml文件 在server.xml文件里面找到下列信息 把Connector标签的8080端口改成你想要的端口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值