前言:
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,运行jsp和servlet,使用HTTP与客户端(通常是浏览器)进行通信。Tomcat 是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选,因为Tomcat 技术先进、性能稳定,成为目前比较流行的Web 应用服务器。Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展,但它是独立运行的
一:tomcat安装部署
1.1:Tomcat介绍
- 免费的、开放源代码的Web应用服务器
- Apache软件基金会( Apache Software Foundation)Jakarta项目中的一个核心项目
- 由 Apache、Sun和一些公司及个人共同开发而成
- 深受Java爱好者的喜爱,并得到部分软件开发商的认可
- 是目前比较流行的Web应用服务器
1.2:Tomcat核心组件
1.3:Tomcat处理请求大致流程
HTTP服务器接收到请求之后把请求交给Servlet容器来处理,Servlet容器通过Servlet接⼝调⽤业务类。
Servlet接⼝和Servlet容器这⼀整套内容叫作Servlet规范。
Servlet容器有解耦的作用,避免Http服务器和业务类的直接耦合。
由于Tomcat根据Servlet规范实现了Servlet容器,同时它又具有Http服务器的功能,所以Tomcat拥有两个重要身份:
- Servlet容器
- Http服务器
1.4:Tomcat Servlet容器处理流程
当用户请求某个URL资源时:
-
- Http服务器会把请求信息封装成Request对象,再转化成ServletRequest对象,传入Servlet容器;
-
- Servlet容器接收到请求后,根据
URL
和Servlet
的映射关系(必要的配置信息),找到对应的Servlet;
- Servlet容器接收到请求后,根据
-
- 如果Servlet还没有被加载,使用反射技术创建该Servlet,并调用Servlet的
init
方法来完成初始化;
- 如果Servlet还没有被加载,使用反射技术创建该Servlet,并调用Servlet的
-
- 调用Servlet的
service
方法处理请求,将请求处理结果封装成ServletResponse对象,返回给Http服务器;
- 调用Servlet的
-
- Http服务器将接收到的ServletResponse对象转化成Response对象,返回给客户端。
1.5:Tomcat 系统总体架构
Tomcat设计了两个核心组件连接器(Connector)和容器(Container)来完成Tomcat的两大核心功能:
- 连接器:负责对外交流,处理Socket连接,负责网络字节流和Request/Response对象的转化;
- 容器:负责内部处理,加载和管理Servlet,以及具体请求的处理。
二:Tomcat 连接器组件 Coyote
2.1:Coyote简介
Coyote是Tomcat连接器组件的名称,是对外的接口。客户端通过Coyote与服务端建立连接、发送请求并接受响应。
Coyote负责的是具体协议(应用层)和IO(传输层)**的相关内容:
- Coyote封装了底层的网络通信(Socket请求及响应处理)
- Coyote使Catalina容器(容器组件)与具体的请求协议和IO操作方式完全解耦
- Coyote将Socket输入转化封装为Request对象,进一步交给Catalina容器处理,处理完成后,Catalina容器通过Coyote提供的Response对象将结果写入输出流
三:Tomcat部署步骤
3.1:下载并安装JDK
- JDK是Java语言的软件开发环境
- JDK安装包保存在服务器的/root目录下
[root@localhost ~]# iptables -F
[root@localhost ~]# setenforce 0
[root@localhost ~]# rz -E
rz waiting to receive.
[root@localhost ~]# ls
anaconda-ks.cfg 公共 文档
apache-tomcat-9.0.16.tar.gz 模板 下载
initial-setup-ks.cfg 视频 音乐
jdk-8u201-linux-x64.rpm 图片 桌面
[root@localhost ~]# java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
[root@localhost ~]# rpm -ivh jdk-8u201-linux-x64.rpm
- 设置环境变量
[root@localhost jdk1.8.0_201-amd64]# pwd
/usr/java/jdk1.8.0_201-amd64
[root@localhost jdk1.8.0_201-amd64]# ls
bin man
COPYRIGHT README.html
include release
javafx-src.zip src.zip
jre THIRDPARTYLICENSEREADME-JAVAFX.txt
lib THIRDPARTYLICENSEREADME.txt
LICENSE
[root@localhost jdk1.8.0_201-amd64]# vim /etc/pro
profile profile.d/ protocols
[root@localhost jdk1.8.0_201-amd64]# vim /etc/profile
#末行添加
export JAVA_HOME=/usr/java/jbk1.8.0_201-amd64
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
#环境变量生效
[root@localhost jdk1.8.0_201-amd64]# source /etc/profile
#查看java版本
[root@localhost jdk1.8.0_201-amd64]# java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
- 安装启动Tomcat
[root@localhost ~]# ls
anaconda-ks.cfg jdk-8u201-linux-x64.rpm 视频 下载
apache-tomcat-9.0.16.tar.gz 公共 图片 音乐
initial-setup-ks.cfg 模板 文档 桌面
#将安装包移动到Tomcat目录到/usr/local下
[root@localhost ~]# tar zxvf apache-tomcat-9.0.16.tar.gz -C /usr/local
[root@localhost ~]# cd /usr/local/
[root@localhost local]# mv apache-tomcat-9.0.16/ tomcat
[root@localhost bin]# pwd
/usr/local/tomcat/bin
[root@localhost bin]# ls
bootstrap.jar makebase.sh
catalina.bat setclasspath.bat
catalina.sh setclasspath.sh
catalina-tasks.xml shutdown.bat
ciphers.bat shutdown.sh
ciphers.sh startup.bat
commons-daemon.jar startup.sh
commons-daemon-native.tar.gz tomcat-juli.jar
configtest.bat tomcat-native.tar.gz
configtest.sh tool-wrapper.bat
daemon.sh tool-wrapper.sh
digest.bat version.bat
digest.sh version.sh
makebase.bat
shutdown.s:控制服务关闭
startup.sh:控制服务开启
- 创建超链接
makebase.bat
[root@localhost bin]# ln -s /usr/local/tomcat/bin/startup.sh /usr/bin/
[root@localhost bin]# ln -s /usr/local/tomcat/bin/shutdown.sh /usr/bin/
- 重启服务查看端口
[root@localhost bin]# startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@localhost bin]# netstat -ntap | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 14181/java
- 客户机访问测试
浏览器访问http://20.0.0.42:8080 访问会出现Tomcat默认界面
四:优化Toncat启动时间
- 第一次启动查看日志你会发现Tomcat启动很慢,默认情况下需要几十秒,可以修改jdk参数进行优化。
- /dev/random和/dev/urandom是Linux系统中提供的随机伪设备。这两个设备的任务是提供永不为空的随机字节数据流。很多解密程序与安全应用程序(如SSH keys key等)需要他们提供随机和数据流.
- 这两个设备的差异在于/dev/random的random pool依赖于系统中段,因此在系统的中断不足时/dev/random设备会一直封锁,尝试读取的进程就会进入等待状态,直到系统的中断充分够用,/dev/random设备可以保证数据的随机性。/dev/urandom不依赖系统的中毒那,也就不会造成进程忙等待,但是数据的随机性也不高.
4.1:缩短Tomcat启动时间
[root@localhost bin]# cd /usr/java/jdk1./8.0_201-amd64/jre/lib/se
curity/
[root@localhost security]# ls
blacklist java.policy policy
blacklisted.certs java.security trusted.libraries
cacerts javaws.policy
[root@localhost security]# vim java.security
#重启服务
root@localhost security]# startup.sh
4.2:Tomcat目录结构
[root@localhost ~]# ll /usr/local/tomcat/
总用量 124
drwxr-x---. 2 root root 4096 8月 14 14:53 bin #启动和关闭Tomcat脚本文件
-rw-r-----. 1 root root 19203 2月 5 2019 BUILDING.txt
drwx------. 3 root root 254 8月 14 14:57 conf #Tomcat服务器各种配置文件
-rw-r-----. 1 root root 6095 2月 5 2019 CONTRIBUTING.md
drwxr-x---. 2 root root 4096 8月 14 14:53 lib #Tomcat服务器的jar包
-rw-r-----. 1 root root 57092 2月 5 2019 LICENSE
drwxr-x---. 2 root root 197 8月 14 14:57 logs #Tomcat的日志
-rw-r-----. 1 root root 2333 2月 5 2019 NOTICE
-rw-r-----. 1 root root 3255 2月 5 2019 README.md
-rw-r-----. 1 root root 6854 2月 5 2019 RELEASE-NOTES
-rw-r-----. 1 root root 16262 2月 5 2019 RUNNING.txt
drwxr-x---. 2 root root 30 8月 14 14:53 temp #Tomcat运行时产生的文件
drwxr-x---. 7 root root 81 2月 5 2019 webapps #项目资源的目录
drwxr-x---. 3 root root 22 8月 14 14:57 work #工作目录:
五:构建虚拟主机
虚拟web主机的定义:
●在同一台服务器中运行多个Web站点,其中每一个站点并不独立占用一台真正的计算机
5.1:虚拟主机的优势
虚拟Web主机指的是在同一台服务器中运行多个Web站点,其中的每一个站点实际上并不独自占用整个服务器,因此
被称为“虚拟Web主机”。 通过虚拟Web主机服务可以充分利用服务器的硬件资源,从而大大降低网站构建及运行成本。
5.2:举例:通过两个域名访问到不同的项目内容
5.2.1:步骤
-
创建shuai和lisi项目目录和文件
-
修改 Tomcat主配置文件
-
重启 Toma服务
-
测试:
5.21:创建shuai和lisi主页文件目录
drwxr-x---. 3 root root 22 8月 14 14:57 work
[root@localhost ~]# cd /usr/local/tomcat/webapps/
[root@localhost webapps]# mkdir shuai lisi
[root@localhost webapps]# ls
docs examples host-manager lisi manager ROOT shuai
[root@localhost webapps]# cd shuai/
[root@localhost shuai]# vim index.jsp
#编写首页信息
<h1>this is shuai web</h1>
[root@localhost shuai]# cd ../lisi/
[root@localhost lisi]# vim index.jsp
#编写lisi首页信息
<h1>this is lisi web</h1>
5.22:设置DNS和修改Tomcat主配置文件
[root@localhost lisi]# yum -y install bind
- 配置DNS主配置文件
[root@localhost lisi]# vim /etc/named.conf
options {
listen-on port 53 {
any; };
listen-on-v6 port 53 {
::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query {
any; };
- 配置区域配置文件
[root@localhost lisi]# vim /etc/named.rfc1912.zones
zone "shuai.com" IN {
type master;
file "shuai.com.zone";
allow-update {
none; };
};
zone "lisi.com" IN {
type master;
file "lisi.com.zone";
allow-update {
none; };
};
- 配置区域数据
[root@localhost lisi]# cd /var/named/
[root@localhost named]# cp -p named.localhost shuai.com.zone
[root@localhost named]# vim shuai.com.zone
[root@localhost named]# cp -p shuai.com.zone lisi.com.zone
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
www IN A 20.0.0.42
#重启服务
[root@localhost named]# systemctl restart named
- 客户机测试域名解析
5.23:配置Tomcat主配置文件
[root@localhost bin]# cd /usr/local/tomcat/
[root@localhost tomcat]# cd conf/
[root@localhost conf]# ls
Catalina jaspic-providers.xml tomcat-users.xml
catalina.policy jaspic-providers.xsd tomcat-users.xsd
catalina.properties logging.properties web.xml
context.xml server.xml
[root@localhost conf]# vim server.xml
#G到末行
<Host name="www.shuai.com" appBase="/usr/local/tomcat/webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/shuai" path="" reloadable="true"/>
</Host>
<Host name="www.lisi.com" appBase="/usr/local/tomcat/webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/lisi" path="" reloadable="true"/>
</Host>
- 重启服务
[root@localhost conf]# shutdown.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@localhost conf]# startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
- 测试主机
六:Tomcat优化
6.1:Tomcat配置文件参数优化
- 【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”:对于以下的浏览器,不启用压缩。
[root@localhost ~]# vim /usr/local/tomcat9/conf/server.xml
<Connector port="8080" protocol="HTTP/1.1" '//找到此段落'
connectionTimeout="20000"
redirectPort="8443" />
'//在 redirectPort="8443" 和/>中间添加以下段落'
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"
[root@localhost ~]# shutdown.sh
[root@localhost ~]# startup.sh
6.2:压测演示
win 10安装jdk java的环境
设置环境变量
3.测试环境
- 把压测工具粘贴到虚拟机中,打开软件
打开文件 选择桌面的压测工具
启动优化后
[root@localhost ~]# vim /usr/local/tomcat9/conf/server.xml
<Connector port="8080" protocol="HTTP/1.1" '//找到此段落'
connectionTimeout="20000"
redirectPort="8443" />
'//在 redirectPort="8443" 和/>中间添加以下段落'
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"
#启动服务
[root@localhost ~]# shutdown.sh
[root@localhost ~]# startup.sh
- 再次压测