一:Tomcat概述
1.1:Tomcat介绍
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器, 属千轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用, 是开发和调试JSP 程序的首选。对于一个初学者来说, 可以这样认为, 当在一台机器上配置好Apache 服务器,可利用它响应HTML ( 标准通用标记语言下的一个应用)页面的访问请求。实际上, Tomcat 是Apache 服务器的扩展, 但运行时它是独立运行的, 所以当运行Tomcat 时, 它实际上作为一个与Apache 独立的进程单独运行的
当配置正确时, Apache 为HTML 页面服务, 而Tomcat 实际上运行JSP 页面和Servlet 。Tomcat 和IIS 等Web 服务器一样, 具有处理HTML 页面的功能, 另外它还是一个Servlet 和JSP 容器, 独立的Servlet 容器是Tomcat 的默认模式。不过, Tomcat 处理静态HTML 的能力不如Apache 服务器
1.2:Tomcat核心组件
通常意义上的Web 服务器接受请求后, 只是单纯地响应静态资源(如HTML 文件、图片文件等) , 不能在后端进行一定的处理操作。Tomcat 是Apache 下的一个子项目, 它具备Web 服务器的所有功能, 不仅可以监听接受请求并响应静态资源, 而且可以在后端运行特定规范的Java 代码Servlet, 同时将执行的结果以HTML 代码的形式返回客户端。
Tomcat 由一系列的组件构成其中核心的组件有三个。
1:web容器:完成web服务器的功能。
2:Servlet容器:名字为catalina,用于处理Servlet代码。
3:JSP 容器:用于将 JSP动态网页翻译成Servlet代码。
1.3:Tomcat请求处理
Tomcat 具体的处理请求过程如下所示。
- 1:用户在浏览器中输入网址,请求被发送到本机端口8080,被在那里监听的Connector获得;
- 2:Connector把该请求交给它所在的Service 的 Engine (Container)来处理,并等待Engine的回应;
- 3:请求在Engine、Host、Context和 Wrapper 这四个容器之间层层调用,最后在Servlet 中执行对应的业务逻辑、数据存储等。
- 4:执行完之后的请求响应在Context、Host、Engine 容器之间层层返回,最后返回给Connector,并通过Connector返回给客户端。
1.4:Tomcat功能组件结构
Tomcat核心组件有6个,分别为Tomcat有Server,Service,Connector,Engine,Host和Context等
1:Server
Server元素在最顶层,代表整个Tomcat容器,因此它必须是server.xml中唯一一个最外层的元素。一个Server元素中可以有一个或多个Service元素。Server的主要任务,就是提供一个接口让客户端能够访问到这个Service集合,同时维护它所包含的所有的Service的声明周期,包括如何初始化、如何结束服务、如何找到客户端要访问的Service
2:Service
Service的作用,是在Connector和Engine外面包了一层,把它们组装在一起,对外提供服务。一个Service可以包含多个Connector,但是只能包含一个Engine;其中Connector的作用是从客户端接收请求,Engine的作用是处理接收进来的请求。Tomcat可以提供多个Service,不同的Service监听不同的端口
3:Connector
Connector的主要功能,是接收连接请求,创建Request和Response对象用于和请求端交换数据;然后分配线程让Engine来处理这个请求,并把产生的Request和Response对象传给Engine。通过配置Connector,可以控制请求Service的协议及端口号
4:Engine
Engine组件在Service组件中有且只有一个;Engine是Service组件中的请求处理组件。Engine组件从一个或多个Connector中接收请求并处理,并将完成的响应返回给Connector,最终传递给客户端。实际上,Engine、Host和Context都是容器,但它们不是平行的关系,而是父子关系:Engine包含Host,Host包含Context
5:Host
Host是Engine的子容器。Engine组件中可以内嵌1个或多个Host组件,每个Host组件代表Engine中的一个虚拟主机。Host组件至少有一个,且其中一个的name必须与Engine组件的defaultHost属性相匹配。Host虚拟主机的作用,是运行多个Web应用(一个Context代表一个Web应用),并负责安装、展开、启动和结束每个Web应用
6:Context
Context元素代表在特定虚拟主机上运行的一个Web应用。每个Web应用基于WAR文件,或WAR文件解压后对应的目录(这里称为应用目录)。Context是Host的子容器,每个Host中可以定义任意多的Context元素
1.5:Container结构分析
每个 Service 会包含一个 Container容器。在Container内部包含了4个子容器:
4个子容器的作用分别是:
1:Engine:引擎,用来管理多个虚拟主机,一个Service 最多只能有一个Engine;
2:Host:代表一个虚拟主机,也可以叫站点,通过配置 Host 就可以添加站点;
3:Context:代表一个 web应用,包含多个Servlet封装器;
4:wrapper:封装器,容器的最底层。每一wrapper 封装着一个Servlet,负责对象实例的创建、执行和销毁功能。
Engine、Host、Context和 wrapper,这四个容器之间属于父子关系。
容器由一个引擎可以管理多个虚拟主机。每个虚拟主机可以管理多个web应用。每个web应用会有多个Servlet封装器
1.6:Tomcat数据流向
二:Tomcat服务部署
2.1:下载并安装JDK
在部署Tomcat 之前必须安装好JDK , 因为JDK 是Tomcat 运行的必要环境。JDK 的安装相对比较简单, 版本有很多, 本章选择基于linux64 位RPM 版本。
下载完安装包后, 将其上传到服务器/root 目录下, 执行安装命令。
[root@local host ~]# rpm -ivh jdk-8u171 -linux-x64.rpm
上面显示安装完成,jdk 安装目录在/usr/java/jdk1 .8 .0_171-amd64 ,, 编辑/etc/profile文件, 设置jdk 的环境变量。具体操作如下。
[root@localhost ~]#vim /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_ 171-amd64
export CLASSPATH= $JAVA_HOME/Iib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
[root@localhost ~]#source /etc/profile //使环境变量生效
[root@localhost~]# java -version //查看JDK版本
java version "1 .8.0_ 171"
2.2: 安装启动Tomcat
1. 安装Tomcat 服务
从Tomcat 官网下载apache-tomcat-9.0.8.tar.gz 稳定版本, 将安装包解压后移动Tomcat目录到/usr/local 下面, 然后执行/usr/local/tomcat/bin/sta rtup . sh 命令启动Tomcat 即可。具体操作如下。
[root@localhost ~]# vim /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH
[root@localhost ~]# source /etc/profile
[root@localhost ~]# java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
2:安装启动Tomcat
从Tomcat 官网下载apache-tomcat-9. 0 .8. tar. gz 稳定版本, 将安装包解压后移动Tomcat目录到/usr/lo cal 下面, 然后执行/usr/local/tomcat/bin/sta rtup . sh 命令启动Tomcat 即可。具体操作如下。
[root@localhost ~]# tar zxvf apache-tomcat-9.0.8.tar.gz
[root@localhost ~]# mv apache-tomcat-9.0.8 /usr/local/tomcat
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh
[root@localhost ~]# netstat -anpt | grep java
- 8005端口是用于命令行关闭Tomcat服务
- 8009 Tomcat服务器通过Connector连接器组件与客户程序建立连接使用的端口
- 8080是Tomcat的web服务端默认口号
3:优化Tomcat启动时间
查看日志会发现Tomcat 第一次启动很慢, 默认情况下都需要几十秒。修改JDK 参数可以改善该状况, 打开/usr/java/jdk1.8.0_171-amd64/j re/l i b/security/j ava.security 文件, 找到如下内容: securerandom.source=file :/dev/random 修改成securerandom.sou「ce=file :/dev/urandom 。然后重启Tomcat 就会发现启动时间变短很多。
[root@localhost ~]# vim /usr/java/jdk1.8.0_171-amd64/jre/lib/security/java.security securerandom.source=file:/dev/urandom ##已经存在该参数
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh
4:Tomcat目录结构
- 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 目录:用于存放项目资源的目录。
- work 目录:是 Tomcat 工作目录,一般清除 Tomcat 缓存的时候会使用到
三:Tomcat配置与优化
3.1:虚拟主机配置
1:创建 www 和 bbs 项目目录和文件
[root@localhost ~]# mkdir /usr/local/tomcat/webapps/www
[root@localhost ~]# echo "This is www page\!"> /usr/local/tomcat/webapps/www/index.jsp
[root@localhost ~]# mkdir /usr/local/tomcat/webapps/bbs
[root@localhost ~]# echo "This is bbs page\!"> /usr/local/tomcat/webapps/bbs/index.jsp
2:修改 Tomcat 主配置文件
[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml
<Host name="www.test.com" appBase="/usr/local/tomcat/webapps"
unpackWARs="true" autoDeploy="true">
<Context docBase="/usr/local/tomcat/webapps/www" path="" reloadable="true" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
<Host name="bbs.test.com" appBase="/usr/local/tomcat/bbs"
unpackWARs="true" autoDeploy="true">
<Context docBase="/usr/local/tomcat/webapps/bbs" path="" reloadable="true" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh
- <Host name="bbs.test.com" appBase="/usr/local/tomcat/webapps"
- name="bbs.test.com" 网站的服务名称,做基于域名的虚拟主机时,这个参数需要设置如果要做基于端口的虚拟主机,此处的值应修改为原来的localhost
- appBase="/usr/local/tomcat/webapps" 站点目录,这个位置可以不用修改
- path="" 虚拟目录的目录名,URL/path,指的是斜杠后跟的字符串
- reloadable="true" reloadable=true时 当web.xml或者class有改动的时候都会自动重新加载不需要从新启动服务
3.2:Tomcat优化
1. Tomcat 配置文件参数优化
关千Tomcat 主配置文件server.xml 里面很多默认的配置项,并不能满足业务需求, 常用的优化参数如下。
- maxThreads: Tomcat 使用线程来处理接收的每个请求, 这个值表示Tomcat 可创建的最大的线程数, 默认值是200
- minSpareThreads: 最小空闲线程数, Tomcat 启动时的初始化线程数, 表示即使没有人使用也开这么多空线程等待, 默认值是10
- maxSpareThreads: 最大备用线程数, 一旦创建的线程超过这个值, Tomcat 就会关闭不再需要的socket 线程。默认值是-1 (无限制) , 一般不需要指定。
- URI Encod ing : 指定Tomcat 容器的URL 编码格式, Tomcat 语言编码格式这块不如其它Web 服务器软件配置方便, 需要分别指定。
- connnectionTimeout: 网络连接超时, 单位: 毫秒, 设置为0 表示永不超时, 这样设置有隐患的。通常默认20000 毫秒就可以。
- enablelookups: 是否反查域名, 以返回远程主机的主机名, 取值为:true 或false ,如果设置为false, 则直接返回IP 地址, 为了提高处理能力, 应设置为false
- disableUploadTimeout: 上传时是否使用超时机制。应设置为true
- connectionUploadTimeout: 上传超时时间, 毕竞文件上传可能需要消耗更多的时间,该参数需要根据自己的业务需要自行调整,以使Servlet 有较长的时间来完成它的执行,需要与上一个参数一起配合使用才会生效。
- acceptCount : 指定当所有可以使用的处理请求的线程都被使用时, 可传入连接请求的最大队列长度, 超过这个数的请求将不予处理, 默认为100 个。
- compression : 是否对响应的数据进行GZIP 压缩, off 表示禁止压缩、on 表示允许压缩(文本将被压缩) 、force 表示所有情况下都进行压缩, 默认值为off。压缩数据后可以有效的减少页面的大小, 一般可以减小1/3 左右, 因而节省带宽。
- compressionM i nSize: 表示压缩响应的最小值, 只有当响应报文大小大千这个值的时候才会对报文进行压缩, 如果开启了压缩功能, 默认值就是2048
- compressableMimeType: 压缩类型, 指定对哪些类型的文件进行数据压缩。
- noCompressionUserAgents="gozilla, traviata": 对于以下的浏览器, 不启用压缩。
2. jmeter 压测工具
运行jmeter 软件
使用的jmeter 软件版本为apache-j meter-3.1,双击运行apache-jmeter-3.1.rar压缩包-> bin 目录->ApacheJ Meter.jar 文件即可打开jmeter 软件