Tomcat
一.Tomcat简介
- 1.免费的开放源代码的web应用服务器。
- 2.具有处理HTML页面功能,静态web页面,(但性能一般)。
- 3.通常作为一个servlet和jsp容器。
Tomcat官网为:tomcat.apache.org/,如下所示:
1. Tomcat 核心组件
- web容器:做web 服务区功能。
- servlet容器:处理servlet代码。
- jsp容器:用java语言开发,将jsp动态网页翻译成servlet代码。
注释:
什么是servlet:中间件,解释动态页面,将客户端和数据库连接
什么是jsp:实现java web 应用程序和用户界面部分。
Tomcat (端口号:8080)组件
-
connector 连接器 :暴露监听端口,接收客户端发来的请求和返回响应消息给客户端。
-
container 容器:负责处理用户请求的业务逻辑,由4个容器组成(engine,host,context,wrapper)子容器之间是父子关系。
注释:
- engine:引擎,管理多个虚拟主机,一个container只有一个engine。
- host:代表一个虚拟主机。
- context:管理web应用的路径。
- wrapper:servlet封装器,负责处理业务逻辑
2. 客户端请求过程:
1. 客户端浏览器
2. connector暴露8080端口
3. container (engine)
#根据域名发送对方的虚拟主机
4. hosts
#根据用户访问的url路径
5. context
#根据url路径对应的web应用
6. wrapper
#根据应用程序处理业务的逻辑
二.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 运行时产生的文件 |
| webaapps | 存放项目资源的目录 |
| work | Tomcat 工作目录,一般清除 Tomcat 缓存的时候会使用到(升级版本时注意要删除里面的缓存) |
实例操作:
1.因为是java开发的所以需要先安装jdk环境
将包拖入用rpm -ivh 安装
2.rpm -qpl 查看配置文件路径
3.
cd /usr/java
#将jdk下面的 lib,jre放到环境变量中,方便系统识别。
cd /etc/profile.d
vim java.sh
#创建新文件添加环境变量配置
#添加内容如下:
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64/
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
#wq保存退出
source java.sh
#刷新
which -a java
#查看有多少个java
jdk环境安装好了
4.测试jdk能不能用:
vim Hello.java
编写内容:
public class Hello {
public static void main(String)[]{
System.out.println("Hello World");
}
}
#wq保存退出
javac Hello.java
#生成一个Hello.class字节码的文件
java Hello
#直接运行这个文件即可
能出来 Hello World!运行正常
5. 安装Tomcat
cd /opt
#将Tomcat安装包拖入,并且解压
tar xf
mv apache-tomcat-9.0.16 /usr/local/tomcat
#将tomcat移动到usr下方便管理
cd /usr/bin/tomcat/bin 下去启动软件
启动方法1:路径启动tomcat
后台启动:
tomcat /bin/startup.sh
tomcat /bin/catalina.sh
前台启动:
tomcat /bin/catalina.sh run
关闭服务:
tomcat /bin/shutdown.sh
🍔
🥞
🥩
启动方法2:
编写vim /usr/lib/systemd/system/tomcat.service
[Unit]
Description=tomcat server
Wants=network-online.target
After=network.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/java/jdk1.8.0_201-amd64"
Environment="PATH=$JAVA_HOME/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
Environment="CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar"
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
Restart=on-failure
[Install]WantedBy=multi-user.target
启动方法3:supervisord
- 可以监听,启动,停止,重启一个或者多个进程。
- 当supervisord管理进程,当一个进程意外被杀死,supervisor监听到进程死后,会自动将它重启,很方便的做到进程的自动恢复的功能,不在需要自己写脚本来控制
yum -y install epel-release
yum -y install supervisord
网页检验
三. Tomcat 虚拟主机配置
很多时候公司会有多个项目需要运行,一般不会是在一台服务器上运行多个 Tomcat 服务,这样会消耗太多的系统资源。此时, 就需要使用到 Tomcat 虚拟主机。 例如现在新增两个域名 www.kkk.com 和 www.benet.com, 希望通过这两个域名访问到不同的项目内容。
1.创建 kgc 和 benet 项目目录和文件
mkdir /usr/local/tomcat/webapps/ky31
mkdir /usr/local/tomcat/webapps/ky32
echo "This is ky31 test web page\!" > /usr/local/tomcat/webapps/ky31/index.html
echo "This is ky32 test web page\!" > /usr/local/tomcat/webapps/ky32/index.html
2.修改 Tomcat 主配置文件 server.xml
vim /usr/local/tomcat/conf/server.xml
--165行前--插入
<Host name="www.ky31.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/ky31" path="" reloadable="true" />
</Host>
<Host name="www.ky32.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/ky32" path="" reloadable="true" />
</Host>
#wq保存退出
3.重启服务
[root@localhost conf]# systemctl stop tomcat
[root@localhost conf]# systemctl start tomcat
[root@localhost conf]# ss -natp |grep :8080
方法1: 做地址映射Windowsc盘
方法2: 虚拟机做地址映射,虚拟机浏览器访问
四. Tomcat 请求过程:
1、用户在浏览器中输入网址,请求被发送到本机端口 8080,被在那里监听的 Connector 获得; 2、Connector 把该请求交给它所在的 Service 的 Engine(Container)来处理,并等待 Engine 的回应; 3、请求在 Engine、Host、Context 和 Wrapper 这四个容器之间层层调用,最后在 Servlet 中执行对应的业务逻辑、数据存储等。 4、执行完之后的请求响应在 Context、Host、Engine 容器之间层层返回,最后返回给 Connector,并通过 Connector 返回给客户端。
五.Tomcat 优化
1. 操作系统优化(内核参数)
2. Tomcat配置文件优化
3. Java虚拟机(Jvm)调优
具体优化内容:
1)配置文件优化
修改 server.xml 文件
maxThreads(最大线程数/并发)
processorCache(进程缓冲)
acceptCount(等待队列数)
enableLookups(关闭DNS反向解析)
URIEncoding(网页字符集编码UTF-8)
maxKeepAliveRequests(长连接最大请求数)
connectionTimeout(连接超时时间)
compression(开启页面压缩)
2)系统内核优化
/etc/security/limits.conf
nofile
nproc
memlock
/etc/sysctl.conf
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_max_tw_buckets=5000
net.ipv4.ip_local_port_range=1024 65535
3)JVM优化
-
在 catalina.sh 中设置 JAVA_OPTS 参数
-
JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx2048m -XX:PermSize=1024m -XX:MaxPermSize=1024m -Xmn768m"
-
-server 表示启用JDK的Server模式,实现在多核服务器性能更佳
-
-Xms2048m -Xmx2048m 设置JVM堆内存初始值和最大最一样大,一般设置为物理内存的 1/2
-
-XX:PermSize=1024m -XX:MaxPermSize=1024m 设置永久代(非堆内存)初始值和最大最一样大,一般设置为物理内存的 1/4 初始值和最大最设置一样大的原因:可以减少GC次数和内存伸缩带来的频繁内存申请,从而减少一定的系统开销。
-
Xmn 设置JVM堆内存新生代的大小,一般设置为堆内存的 3/8
-
-XX:ParallelGCThreads=2 设置并行GC(垃圾回收)线程数,提高垃圾回收效率
-
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/tomcat/temp/oom.hprof 设置进程发生OOM异常退出会进行DUMP备份
-
-XX:+DisableExplicitGC 禁止调用System.gc()方法,防止误调用系统gc方法导致系统的JVM堆内存大起大落而使系统响应效率严重降低
六. tomcat安装博客
因为前面我们已经安装过了tomcat,所以安装一个数据库就行
具体操作
1.现将我们自己的博客项目放到webapps文件夹下
2.将原文件复制一份改个名字
3.把这个项目的属主与数组改成tomcat
4.安装数据库,做一个本地仓库
cat >/etc/yum.repos.d/mysql.repo <<EOF
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/
enabled=1
gpgcheck=0
EOF
5.yum安装
yum -y install mysql-community-server
6.启动数据库
systemctl start mysqld
ss -natp |grep 3306
7.找到初始密码
grep password /var/log/mysqld.log
8.登录数据库
9.修改密码
set global validate_password_policy=0;
set global validate_password_length=1;
mysql> alter user root@'localhost' identified by 'Admin@123';
10.创建数据库
CREATE DATABASE blog;
GRANT all ON blog.* TO 'bloguser'@'%' IDENTIFIED BY 'admin123';
GRANT all ON blog.* TO 'bloguser'@'localhost' IDENTIFIED BY 'admin123';
flush privileges;
11.现在去浏览器上去创建用户
12.写好数据库的信息,点击下一步
13.创建用户
14.输入账号密码,进入博客