Tomcat

162 阅读4分钟

Tomcat

一.Tomcat简介

  • 1.免费的开放源代码的web应用服务器。
  • 2.具有处理HTML页面功能,静态web页面,(但性能一般)。
  • 3.通常作为一个servlet和jsp容器。

Tomcat官网为:tomcat.apache.org/,如下所示:

image.png

1. Tomcat 核心组件

  • web容器:做web 服务区功能。
  • servlet容器:处理servlet代码。
  • jsp容器:用java语言开发,将jsp动态网页翻译成servlet代码。

注释:

什么是servlet:中间件,解释动态页面,将客户端和数据库连接

什么是jsp:实现java web 应用程序和用户界面部分。

Tomcat (端口号:8080)组件

  • connector 连接器 :暴露监听端口,接收客户端发来的请求和返回响应消息给客户端。

  • container 容器:负责处理用户请求的业务逻辑,由4个容器组成(engine,host,context,wrapper)子容器之间是父子关系。

注释:

  1. engine:引擎,管理多个虚拟主机,一个container只有一个engine。
  2. host:代表一个虚拟主机。
  3. context:管理web应用的路径。
  4. 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存放项目资源的目录
workTomcat 工作目录,一般清除 Tomcat 缓存的时候会使用到(升级版本时注意要删除里面的缓存)

实例操作:

image.png

1.因为是java开发的所以需要先安装jdk环境

将包拖入用rpm -ivh 安装

image.png

2.rpm -qpl 查看配置文件路径

image.png

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 

image.png

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!运行正常

image.png

5. 安装Tomcat

    cd  /opt 
    #将Tomcat安装包拖入,并且解压
    tar xf 
   
   mv apache-tomcat-9.0.16  /usr/local/tomcat 
   #将tomcat移动到usr下方便管理 
   
   cd  /usr/bin/tomcat/bin 下去启动软件
    

image.png

启动方法1:路径启动tomcat

后台启动:

 tomcat  /bin/startup.sh
 tomcat  /bin/catalina.sh

前台启动:

  tomcat  /bin/catalina.sh run

关闭服务:

 tomcat  /bin/shutdown.sh

image.png

🍔

image.png

🥞

image.png

🥩

image.png

启动方法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

image.png

启动方法3:supervisord

  1. 可以监听,启动,停止,重启一个或者多个进程。
  2. 当supervisord管理进程,当一个进程意外被杀死,supervisor监听到进程死后,会自动将它重启,很方便的做到进程的自动恢复的功能,不在需要自己写脚本来控制

yum -y install epel-release

yum -y install supervisord

网页检验

http://192.168.47.100:8080

image.png

三. Tomcat 虚拟主机配置

很多时候公司会有多个项目需要运行,一般不会是在一台服务器上运行多个 Tomcat 服务,这样会消耗太多的系统资源。此时, 就需要使用到 Tomcat 虚拟主机。 例如现在新增两个域名 www.kkk.comwww.benet.com, 希望通过这两个域名访问到不同的项目内容。

image.png

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

image.png

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保存退出

image.png

3.重启服务

[root@localhost conf]# systemctl stop tomcat
[root@localhost conf]# systemctl start tomcat
[root@localhost conf]# ss -natp |grep :8080

image.png

方法1: 做地址映射Windowsc盘

image.png

方法2: 虚拟机做地址映射,虚拟机浏览器访问

image.png

image.png

image.png

四. 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文件夹下

image.png

2.将原文件复制一份改个名字

image.png

3.把这个项目的属主与数组改成tomcat

image.png

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

image.png

5.yum安装

yum  -y install mysql-community-server

image.png

6.启动数据库

systemctl start mysqld
ss -natp |grep 3306

image.png

7.找到初始密码

grep password /var/log/mysqld.log

image.png

8.登录数据库

image.png

9.修改密码

set global validate_password_policy=0;
set global validate_password_length=1;

mysql> alter user root@'localhost' identified by 'Admin@123';

image.png

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;

image.png

11.现在去浏览器上去创建用户

image.png

12.写好数据库的信息,点击下一步

image.png

13.创建用户

image.png

14.输入账号密码,进入博客

image.png