Tomcat服务部署及优化

一.Tomcat介绍

1.1Tomcat简介

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

1.2Tomcat核心组件

1)Web 容器:完成 Web 服务器的功能。
web容器用于接受、响应用户请求,展示动态页面入口、出口
(2)JSP 容器:用于将 JSP 动态网页翻译成 Servlet 代码。
JSP 全称 Java Server Pages,是一种动态网页开发技术。它使用 JSP 标签在HTML网页中插入 Java 代码。标签通常以 <% 开头,以 %> 结束。
JSP 是一种 Java servlet,主要用于实现 Java web 应用程序的用户界面部分。
JSP 通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
(3)Servlet 容器:名字为 catalina,用于处理 Servlet 代码。
Servlet 是Java Servlet 的简称,可以理解为是一个服务连接器,是用 Java 编写的服务器端程序,具有独立于平台和协议的特性,
简单的理解:servlet 就是一个中间件,包含了接口和方法,将客户端和数据库连接,从而实现动态网页的创建。

二.Tomcat功能组件结构

2.1Tomcat结构

Tomcat 的核心功能有两个,分别是负责接收和反馈外部请求的连接器 Connector,和负责处理请求的容器 Container。 其中连接器和容器相辅相成,一起构成了基本的 web 服务 Service。每个 Tomcat 服务器可以管理多个 Service。
在这里插入图片描述

  1. Connector:负责对外接收和响应请求。它是Tomcat与外界的交通枢纽,监听端口接收外界请求,并将请求处理后传递给容器做业务处理,最后将容器处理后的结果响应给外界。
  2. Container:负责对内处理业务逻辑。其内部由 Engine、Host、Context和Wrapper 四个容器组成,用于管理和调用Servlet 相关逻辑。
  3. Service:对外提供的 Web 服务。主要包含 Connector 和 Container两个核心组件,以及其他功能组件。Tomcat 可以管理多个 Service,且各 Service 之间相互独立

2.2Container结构分析

每个 Service 会包含一个 Container 容器。
在 Container 内部包含了 4 个子容器:

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

Engine、Host、Context 和 Wrapper,这四个容器之间属于父子关系。
容器 由一个引擎可以管理多个虚拟主机。每个虚拟主机可以管理多个 Web 应用。每个 Web 应用会有多个 Servlet 封装器。

2.3Tomcat请求过程

1、用户在浏览器中输入网址,请求被发送到本机端口 8080,被在那里监听的 Connector 获得;
2、Connector 把该请求交给它所在的 Service 的 Engine(Container)来处理,并等待 Engine 的回应;
3、请求在 Engine、Host、Context 和 Wrapper 这四个容器之间层层调用,最后在 Servlet 中执行对应的业务逻辑、数据存储等。
4、执行完之后的请求响应在 Context、Host、Engine 容器之间层层返回,最后返回给 Connector,并通过 Connector 返回给客户端。

三.Tomcat服务部署

3.1安装JDK

因为Tomcat是JAVA语言写的,其运行环境基于JAVA,所以需要现装JDK
查询系统自带的JAVA版本
在这里插入图片描述
PS:因为openjdk不支持Deployment(部署)功能,且源代码不完整,所以我们使用JDK而不使用openjdk

1.关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
2.上传安装包
apache-tomcat-9.0.16.tar.gz #tomcat安装包
jdk-8u201-linux-x64.rpm	    #JDK安装包
3.解压,安装JDK
rpm -ivh jdk-8u201-linux-x64.rpm 

上传安装包
在这里插入图片描述
解压并安装
在这里插入图片描述

设置JDK环境变量

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.d/java.sh  #刷新变量

在这里插入图片描述
查询版本
在这里插入图片描述

JAVA一些专用术语介绍:
JDK :java development kit      //java开发工具
JRE :java runtime environment  //java运行时环境
JVM :java virtuak machine      //java虚拟机,使java程序可以在多种平台上运行class文件

3.2部署Tomcat

3.2.1安装Tomcat

解压安装包
cd /opt
tar -zxvf apache-tomcat-9.0.16.tar.gz 
移动解压包到指定目录
mv apache-tomcat-9.0.16 /usr/local/tomcat

解压安装包
在这里插入图片描述
移动解压包
在这里插入图片描述
创建用户,便于管理服务

useradd -M -s /sbin/nologin tomcat
chown -R tomcat:tomcat /usr/local/tomcat 

在这里插入图片描述

Tomcat服务启动说明:

软件启动位于:/usr/local/tomcat/bin/
#后台启动
/usr/local/tomcat/bin/startup.sh 
或
/usr/local/tomcat/bin/catalina.sh start  
#前台启动
/usr/local/tomcat/bin/catalina.sh run 
这样启动过于麻烦,所以我们需要优化启动

在这里插入图片描述

3.2.2添加系统服务管理

vim /etc/init.d/tomcat

#!/bin/bash
#chkconfig: 35 80 25
#description:Tomcat Service Control Script
start="/usr/local/tomcat/bin/startup.sh"
stop="/usr/local/tomcat/bin/shutdown.sh"
case "$1" in
start)
        $start
;;
stop)
        $stop
;;
restart)
        $0 stop
        $0 start
;;
*)
echo "$0 {start|stop|restart}"
esac

在这里插入图片描述

[root@xiayan ~]# chmod +x /etc/init.d/tomcat  #添加执行权限
[root@xiayan ~]# chkconfig --add tomcat       #添加到系统服务
[root@xiayan ~]# systemctl start tomcat
[root@xiayan ~]# lsof -i:8080                 #查看服务是否启动

在这里插入图片描述

测试网页是否可以打开
在这里插入图片描述

3.3Tomcat目录说明

cd /usr/local/tomcat
在这里插入图片描述

  1. bin:存放启动和关闭Tomcat的脚本文件,比较常用的是 catalina.sh、startup.sh、shutdown.sh三个文件
    在这里插入图片描述
  2. conf:存放Tomcat 服务器的各种配置文件,比较常用的是server.xml、context.xml、tomcat-users.xml、web.xml 四个文件
    在这里插入图片描述
server.xml: Tomcat的主配置文件,包含Service,Connector,Engine,Realm,Valve,Hosts主组件的相关配置信息;
context.xml:所有host的默认配置信息;
tomcat-user.xml:Realm认证时用到的相关角色、用户和密码等信息,Tomcat自带的manager默认情况下会用到此文件,在Tomcat中添加/删除用户,为用户指|定角色等将通过编辑此文件实现;
web.xml:遵循Servlet规范标准的配置文件,用于配置servlet,并为所有的web应用程序提供包括MIME映射等默认配置信息;

其它目录说明:

●lib:存放Tomcat运行需要的库文件的jar 包,一般不作任何改动,除非连接第三方服务,比如 redis,那就需要添加相对应的jar 包
●logs:存放 Tomcat 执行时的日志
●temp:存放 Tomcat 运行时产生的文件
●webapps:存放 Tomcat 默认的 Web 应用部署目录
●work:Tomcat工作日录,存放jsp编译后产生的class文件,一般清除Tomcat缓存的时候会使用到
●src:存放Tomcat 的源代码
●doc:存放Tomcat文档

3.4Tomcat多站点配置

在实际生产中,很多时候公司会有多个项目需要运行,一般不会在一台服务器上配置多个tomcat服务,这样会大大消耗系统资源。此时,就需要使用tomcat虚拟主机。
比如现在新增两个域名www.xy.com与www.xiayan.com,使这两个域名访问不同的项目内容

1.创建xy和xiayan项目目录和文件
mkdir -p /usr/local/tomcat/webapps/xy
mkdir -p /usr/local/tomcat/webapps/xiayan
echo "wellcome to www.xy.com" >/usr/local/tomcat/webapps/xy/index.jsp
echo "wellcome to www.xiayan.com" >/usr/local/tomcat/webapps/xiayan/index.jsp
2.添加域名映射
echo "192.168.48.10 www.xy.com www.xiayan.com" >>/etc/hosts

在这里插入图片描述
vim /usr/local/tomcat/conf/server.xml

<Host name="www.xy.com"  appBase="webapps"
unpackWARs="true" autoDeploy="true"
mlValidation="false" xmlNamespaceAware="false" >
<Context docBase="/usr/local/tomcat/webapps/xy" path="" reloadable="true" />
</Host>

<Host name="www.xiayan.com"  appBase="webapps"
unpackWARs="true" autoDeploy="true"
mlValidation="false" xmlNamespaceAware="false" >
<Context docBase="/usr/local/tomcat/webapps/xiayan" path="" reloadable="true" />
</Host>

重启服务:systemctl restart tomcat

在这里插入图片描述
在这里插入图片描述
在浏览器中访问测试:www.xy.com:8080 www.xiayan.com:8080
在这里插入图片描述

在这里插入图片描述

3.5Tomcat进程查看

利用JDK自带的工具进行查看,这些工具都在JAVA_HOME/bin目录下:
jps:用来显示本地的java进程,以及进程号,进程启动的路径等。

在这里插入图片描述

四.Tomcat服务优化

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

redirectPort:如果某连接器支持的协议是 HTTP,当接收客户端发来的 HTTPS 请求时,则转发至此属性定义的端口。
maxThreads:这个值表示可创建的最大的线程数,即支持的最大并发连接数,默认值是 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" 对于以下的浏览器,不启用压缩

在这里插入图片描述

<Connector port="8080" protocol="HTTP/1.1"
                connectionTimeout="20000"
		redirectPort="8443" 
                minSpareThreads="50"
                enableLookups="flase"
                disableUploadTimeout="true"
                acceptCount="300"
                maxThreads="500"
                processorCache="500"
		URIEncoding="UTF-8"
                compressionMinSize="2048"
	 compressableMimeType="text/html.text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png"/>

五.总结

tomcat为java程序,所以在安装服务时必须安装java的jdk。由于openjdk不支持部署且源代码不全所以我们不使用系统自带的openjdk;
因tomcat运行在java jdk,所以我们在查看服务端口时,过滤tomcat时查不到的,需要过滤java,例如:ps -aux |grep java
tomcat是用线程干活的,所以在优化的时候我们要限制其线程数,防止其打开线程过多导致系统其它服务无法正常运行

猜你喜欢

转载自blog.csdn.net/weixin_44175418/article/details/125040438