简介
Tomcat是一款免费、开放源代码的web应用服务器,是Apache软件基金会的一个核心开源项目,属于轻量级应用服务器,通常意义上的 web服务器接受请求后,只是单纯地响应静态资源,如 HTMI文件,图片文件等,不能在后端进行一定的处理操作。“Tomcat是 Apache 下的一个子项目,它具备 Web服务器的所有功能,不仅可以监听接受请求并响应静态资源,而且可以在后端运行特定规范的Java代码Servlet,同时将执行的结果以HTML代码的形式写回客户端。
工作流程
当用户访问业务项目例如支付宝淘宝等,nginx负责静态页面的处理以及展示index.jsp这种动态页面,然后用户对网页进行注册或者支付等操作,修改了index.jsp文件中的java代码(这里我不知道对不对),而jsp容器无法执行文件中的servlet代码于是转交给servlet容器,由其中的catalina脚本进行翻译,翻译后转交给业务项目,然后业务项目通过其中的java代码对数据库进行调用,再然后一级一级返回,最终返回给用户。
安装
首先,tomcat运行需要依赖jdk编译器,所以先安装jdk,jdk用于将java源码文件转换为执行文件。
#通过rpm命令安装jdk编译器
rpm -ivh jdk-8u201-linux-x64.rpm
java -version #查看java版本,由于开源版本可能对某些功能不兼容,所以需要修改版本
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)
#设置jdk的环境变量,两种方法,一种是创建一个脚本文件,第二种进入/etc/profile.d文件中添加下面的几行
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64 #声明jdk的工作目录以及版本
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar #声明可执行文件的tools工具和运行库的位置
export PATH=$JAVA_HOME/bin:$PATH #声明java的环境变量目录
source /etc/profile.d/java.sh #重新加载这个环境变量脚本
java -version #查看版本,发现已经变更
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
jdk安装好后,开始安装tomcat
#解压tomcat软件包并移动至/usr/local/tomcat目录下
tar zxvf apache-tomcat-9.0.16.tar.gz -C /opt
mv /opt/apache-tomcat-9.0.16/ /usr/local/tomcat
#查看该目录
ls /usr/local/tomcat
bin CONTRIBUTING.md logs RELEASE-NOTES webapps
BUILDING.txt lib NOTICE RUNNING.txt work
conf LICENSE README.md temp
tomcat下的目录说明:
bin:存放启动关闭tomcat的文件,常用的是catalina.sh(翻译java代码),startup.sh(启动脚本),shutdown.sh(关闭脚本)。
conf:存放tomcat服务的配置文件,常用的有server.xml(主配置文件)、context.xml、tomcat-users.xml、web.xml。
lib:存放tomcat服务的jar包,除非和第三方服务进行连接比如redis,否则不作修改。
logs:存放tomcat日志文件,tomcat会自动进行日志分割。
temp:存放tomcat运行产生的文件。
webapps:存放项目资源的目录。
work:tomcat的工作目录,清除tomcat缓存时会用到。
#创建软连接,方便一键启动关闭
ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin/
ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/bin/
#启动tomcat
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的端口号是8080且由于与web服务的连接器是java支持的,所以服务显示的是java
netstat -natp |grep 8080
tcp6 0 0 :::8080 :::* LISTEN 48908/java
启动成功后,访问8080端口。
tomcat虚拟主机
当一台服务器需要运行多个项目时,需要用到虚拟主机(运行多个tomcat会极大的损耗服务器资源)。
#首先进入/etc/hosts文件中添加域名和地址的映射
vim /etc/hosts
192.168.214.215 www.shiki.com www.shiki1.com
#再webapps目录下新建两个项目目录
mkdir /usr/local/tomcat/webapps/shiki
mkdir /usr/local/tomcat/webapps/shiki1
echo "this is shiki page\!" > /usr/local/tomcat/webapps/shiki/index.jsp
echo "this is shiki1 page\!" > /usr/local/tomcat/webapps/shiki1/index.jsp
#进入tomcat的主配置文件,在配置文件中以host开头,host结尾表示一个项目
<!--开头 -->结尾表示注释。在148-150行的host项目中修改
vim /usr/local/tomcat/conf/server.xml
<Host name="www.shiki.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/shiki" path="" reloadable="true" />
</Host>
#在前一个项目后再添加一一个项目
<Host name="www.shiki1.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/shiki1" path="" reloadable="true" />
</Host>
#配置好后,保存退出,然后重启服务
#如果tomcat正在运行项目,那么关闭服务后需要等待一段时间再启动,目的是让项目都完全关闭,不然可能会出错。
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/loc
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.
分别访问www.shiki.com和www.shiki1.com
优化
tomcat默认的配置环境并不适合生产环境,会出现频繁的卡死报错等,所以要对tomcat进行优化。
#tomcat的优化:
maxThreads:Tomcat:这个值表示Tomcat可创建的最大的线程数,默认值是200。
minspareThreads:最小空闲线程数,Tomcat启动时的初始化的线程数,默认值是10。
maxSpareThreads:最大备用线程数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。默认值是-1(无限制)。
URIEncoding:指定Tomcat容器的URL编码格式。
connnectionTimeout:网络连接超时时间,单位:亳秒,设置为0表示永不超时,默认20000亳秒。
enableLookups:是否反查域名,以返回远程主机的主机名,取值为: true或false,如果设置为false,则直接返回IP地址。
disableUploadTimeout:上传时是否使用超时机制。
connectionUploadTimeout:上传超时时间,需要与上一个参数一起配合使用才会生效。
acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可传入连接请求的最大队列长度,默认为100个。
compression:是否对响应的数据进行GZIP压缩,压缩数据后可以有效的减少页面的大小,一般可以减小 1/3 左右。
compressionMinSize:表示压缩响应的最小值,如果开启了压缩功能,默认值就是2048。
compressableMimeType:压缩类型,指定对哪些类型的文件进行数据压缩。
noCompressionJserAgents= "gozilla,traviata":对于以下的浏览器,不启用压缩。
#进入配置文件
vim /usr/local/tomcat/conf/server.xml
minSpareThreads="50" #设置线程数50
enableLookups="false" #不进行反查域名
disableUploadTimeout="true" #开启上传超时
acceptCount="300" #排队长度为300个
maxThreads="500" #最多可创建500个线程
processorCache="500" #系统可缓存对象数量为500个
URIEncoding="UTF-8" #指定URL编码格式为中文字符集
compression="on" #开启gzip压缩
compressionMinsize="2048" #最小压缩大小
compressableMimeType="text/html, text/xml,text/javascript, text/css, text/plain , image/gif , image/jpg, image/png" #对于这些文件不进行压缩
#最后重启服务
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@www ~]# 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.
nginx+tomcat(反向代理+负载分担)
需要两台tomcat服务器,一台nginx服务器
#对第一台服务器进行配置
在webapps目录下创建一个test目录并编辑index.jsp文件
mkdir /usr/local/tomcat/webapps/test
vim /usr/local/tomcat/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
<% out.println("动态页面1,http://www.test1.com");%>
</body>
<html>
#进入配置文件修改hosts项目
vim /usr/local/tomcat/conf/server.xml
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="fales">
<Context docBase=“/usr/local/tomcat/webapps/test" path="" reloadable="true" />
#然后重启服务
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
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.
#对第二台服务器进行配置
在webapps目录下创建一个test目录并编辑index.jsp文件
mkdir /usr/local/tomcat/webapps/test
vim /usr/local/tomcat/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title>
</head>
<body>
<% out.println("动态页面2,http://www.test2.com");%>
</body>
<html>
#进入配置文件修改hosts项目
vim /usr/local/tomcat/conf/server.xml
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="fales">
<Context docBase=“/usr/local/tomcat/webapps/test" path="" reloadable="true" />
#然后重启服务
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
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.
#对nginx服务器进行配置
vim /usr/local/nginx/conf/ngixn.conf
#在http字段中添加
upstream tomcatserver {
server 192.168.214.215:8080 weight=1;
server 192.168.214.214:8080 weight=1;
}
在server字段中添加
location ~ .*\.jsp$ {
proxy_pass http://tomcatserver;
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
set_real_ip_from 0.0.0.0/0;
real_ip_header X-Forwarded-For;
}
访问192.168.214.215/index.jsp,可以发现指向不同的tomcat服务器