Tomcat部署

1、Tomcat概述

(1)什么是Tomcat

Tomcat 是 Java 语言开发的,Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,是 Apache 软件基金会的 Jakarta 项目中的一个核心项目,由 Apache、Sun 和其他一些公司及个人共同开发而成。
使用场景

作为Web服务器,处理静态网页请求,如html页面,但是性能一般(只有nginx的六分之一);
作为Servlet/JSP容器,运行JAVA语言开发的jsp动态网页程序,并作为中间件实现前端Web和后端数据库的协同工作,这也是tomcat的主要应用场景。

 

(2)Tomcat的组成

Tomcat 由一系列的组件构成,其中核心的组件有三个:

(1)Web 容器:完成 Web 服务器的功能。
(2)Servlet 容器:名字为 catalina,用于处理 Servlet 代码。
(3)JSP 容器:用于将 JSP 动态网页翻译成 Servlet 代码。

Tomcat 是 Web 应用服务器,也是一个 Servlet/JSP 容器。Tomcat 作为 Servlet 容器,负责处理客户的.jsp动态页面的请求,把请求传送给 Servlet,并将 Servlet 的响应传送回给客户。

什么是 servlet?

Servlet 是Java Servlet 的简称,可以理解为是一个服务连接器,是用 Java 编写的服务器端程序,具有独立于平台和协议的特性, 简单的理解:servlet 就是一个中间件,包含了接口和方法,将客户端和数据库连接,从而实现动态网页的创建。

什么是 JSP?

JSP 全称 Java Server Pages,是一种动态网页开发技术。它使用 JSP 标签在HTML网页中插入 Java 代码。标签通常以 <% 开头,以 %> 结束。
JSP 是一种 Java servlet,主要用于实现 Java web 应用程序的用户界面部分。
JSP 通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

Tomcat功能组件结构

Tomcat 的核心功能有两个,分别是负责接收和反馈外部请求的连接器 Connector,和负责处理请求的容器 Container。 其中连接器和容器相辅相成,一起构成了基本的 web 服务 Service。每个 Tomcat 服务器可以管理多个 Service。

●Connector:负责对外接收和响应请求。它是Tomcat与外界的交通枢纽,监听端口接收外界请求,并将请求处理后传递给容器做业务处理,最后将容器处理后的结果响应给外界。
●Container:负责对内处理业务逻辑。其内部由 Engine、Host、Context和Wrapper 四个容器组成,它们是父子关系,用于管理和调用 Servlet 相关逻辑。
●Service:对外提供的 Web 服务。主要包含 Connector 和 Container 两个核心组件,以及其他功能组件。Tomcat 可以管理多个 Service,且各 Service 之间相互独立。

每个 Service 会包含一个 Container 容器。在 Container 内部包含了 4 个子容器:

 engine:引擎,管理多个虚拟主机,一个container只有一个engine
 host:一个host代表一个虚拟主机站点
 context:管理web网页应用程序
 wrapper:servlet封装器,负责处理业务逻辑,对象实例的创建、执行、销毁等动作

容器 由一个引擎可以管理多个虚拟主机。每个虚拟主机可以管理多个 Web 应用。每个 Web 应用会有多个 Servlet 封装器。

Tomcat 请求过程:


1、用户在浏览器中输入网址,请求被发送到本机端口 8080,被在那里监听的 Connector 获得;
2、Connector 把该请求交给它所在的 Service 的 Engine(Container)来处理,并等待 Engine 的回应;
3、请求在 Engine、Host、Context 和 Wrapper 这四个容器之间层层调用,最后在 Servlet 中执行对应的业务逻辑、数据存储等。
4、执行完之后的请求响应在 Context、Host、Engine 容器之间层层返回,最后返回给 Connector,并通过 Connector 返回给客户端。

2、Tomcat部署

(1)安装jdk

1)系统初始化

[root@zx1 ~]# systemctl stop firewalld
[root@zx1 ~]# setenforce 0
setenforce: SELinux is disabled

2)安装jdk

有两种方式

第一种方式:yum安装


[root@zx1 ~]# cd /mnt/Packages/
[root@zx1 Packages]# ls | grep -i java
[root@zx1 Packages]# yum install -y java-1.8.0-*
[root@zx1 Packages]# java -version

第二种方式

软件包安装

官网下载软件包

将软件包上传到/opt目录中

[root@zx1 opt]# ls
jdk-8u391-linux-x64.rpm  jdk-8u391-linux-x64.tar.gz  rh
[root@zx1 opt]#

一个是rpm安装

查看rpm包的指定列表,发现都在/usr/lib/jvm目录中

root@zx1 opt]# rpm -qpl jdk-8u391-linux-x64.rpm

另一个是tar安装(可以自己指定目录)

[root@zx1 opt]# tar xf jdk-8u391-linux-x64.tar.gz
[root@zx1 opt]# ls
jdk1.8.0_391  jdk-8u391-linux-x64.rpm  jdk-8u391-linux-x64.tar.gz  rh
[root@zx1 opt]# mv jdk1.8.0_391/ /usr/local/
[root@zx1 opt]# cd /usr/local/
[root@zx1 local]# ls
bin  etc  games  include  jdk1.8.0_391  lib  lib64  libexec  sbin  share  src
[root@zx1 local]# cd jdk1.8.0_391/
[root@zx1 jdk1.8.0_391]# ls
bin        include         jmc.txt  jvisualvm.txt  lib      man          release  THIRDPARTYLICENSEREADME-JAVAFX.txt
COPYRIGHT  javafx-src.zip  jre      legal          LICENSE  README.html  src.zip  THIRDPARTYLICENSEREADME.txt
[root@zx1 jdk1.8.0_391]#

jdk1.8.0_391的bin目录是存放java命令的,jre目录包含java的运行环境,lib目录包含java运行时需要的架构包

清除之前的jdk

[root@zx1 jdk1.8.0_391]# yum -y remove java-1.8.0-*
[root@zx1 jdk1.8.0_391]# yum -y remove java-1.7.0-*
[root@zx1 jdk1.8.0_391]# java -version
-bash: /usr/bin/java: 没有那个文件或目录
[root@zx1 jdk1.8.0_391]#

配置环境变量

[root@zx1 jdk1.8.0_391]# java -version
-bash: /usr/bin/java: 没有那个文件或目录
[root@zx1 jdk1.8.0_391]# vim /etc/profile
[root@zx1 jdk1.8.0_391]# source /etc/profile
[root@zx1 jdk1.8.0_391]# java -version
java version "1.8.0_391"
Java(TM) SE Runtime Environment (build 1.8.0_391-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.391-b13, mixed mode)
[root@zx1 jdk1.8.0_391]#


在文件末行添加以下内容
export JAVA_HOME=/usr/local/jdk1.8.0_391
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

验证jdk环境是否安装成功

[root@zx1 jdk1.8.0_391]# cd ~
[root@zx1 ~]# vim hello.java
[root@zx1 ~]# javac hello.java
[root@zx1 ~]# ls
anaconda-ks.cfg  hello.java            公共  视频  文档  音乐
hello.class      initial-setup-ks.cfg  模板  图片  下载  桌面
[root@zx1 ~]# java hello
Hello World
[root@zx1 ~]#


public class hello {
   public static void main(String [] args){
    System.out.println("Hello World");
}

}

(2)安装并启动Tomcat

1)上传压缩包并解压

tomcat目录中的bin目录有tomcat启动停止的脚本,conf目录有tomcat常用的配置文件,logs目录存放日志,lib目录存放着tomcat的架构包,temb目录存放着tomcat运行时的产生的一些临时文件,webapps目录存放web程序,work目录是tomcat的工作目录

[root@zx1 opt]# ls
apache-tomcat-9.0.16.tar.gz  jdk-8u391-linux-x64.tar.gz
jdk-8u391-linux-x64.rpm      rh
[root@zx1 opt]# tar xf apache-tomcat-9.0.16.tar.gz
[root@zx1 opt]# mv apache-tomcat-9.0.16 /usr/local/tomcat
[root@zx1 opt]# cd /usr/local/
[root@zx1 local]# ls
bin  games    jdk1.8.0_391  lib64    sbin   src
etc  include  lib           libexec  share  tomcat
[root@zx1 local]# cd tomcat/
[root@zx1 tomcat]# ls
bin           CONTRIBUTING.md  logs       RELEASE-NOTES  webapps
BUILDING.txt  lib              NOTICE     RUNNING.txt    work
conf          LICENSE          README.md  temp

2)开启tomcat

[root@zx1 tomcat]# cd bin/
[root@zx1 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/local/jdk1.8.0_391/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@zx1 bin]# netstat -lntp | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      3264/java
[root@zx1 bin]#

显示已成功开启

3)关闭tomcat

[root@zx1 bin]# ./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/local/jdk1.8.0_391/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@zx1 bin]# netstat -lntp | grep 8080

./catalina.sh start/stop也可以实现后台启动/关闭tomcat,./catalina.sh run可实现前台启动tomcat,要想停止,ctrl+c即可 。nginx前台启动:/usr/local/nginx -g "daemon off;"

4)添加tomcat.service系统服务

[root@zx1 bin]# cd /usr/lib/systemd/system
[root@zx1 system]# vim tomcat.service
[root@zx1 system]# systemctl restart tomcat.service
[root@zx1 system]# systemctl enable tomcat.service
Created symlink from /etc/systemd/system/multi-user.target.wants/tomcat.service to /usr/lib/systemd/system/tomcat.service.
[root@zx1 system]# netstat -lntp | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      3845/java
[root@zx1 system]# systemctl stop tomcat.service
[root@zx1 system]# netstat -lntp | grep 8080
[root@zx1 system]#

[Unit]
Description=tomcat server
Wants=network-online.target
After=network.target

[Service]
Type=forking
Environment="JAVA_HOME=/usr/local/jdk1.8.0_391"
Environment="PATH=$JAVA_HOME/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
Environment="CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib"
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target

(3)优化tomcat启动速度

第一次启动tomcat可能会发现 Tomcat 启动很慢,默认情况下可能会需要几十秒,可以修改jdk参数进行改。


[root@zx1 opt]# vim /usr/local/jdk1.8.0_391/jre/lib/security/java.security
[root@zx1 opt]# systemctl restart tomcat.service
[root@zx1 opt]# systemctl status tomcat.service


120行修改成:securerandom.source=file:/dev/urandom

3、Tomcat虚拟主机配置

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

(1)创建 xy101 和 xy102 项目目录和文件

[root@zx1 opt]# cd /usr/local/tomcat/webapps/
[root@zx1 webapps]# mkdir xy{101,102}
[root@zx1 webapps]# ls
docs  examples  host-manager  manager  ROOT  xy101  xy102
[root@zx1 webapps]# echo "scj like xiaojiejie\!" > xy101/index.jsp
[root@zx1 webapps]# echo "scj like dancing\!" > xy102/index.jsp

(2)修改 Tomcat 主配置文件 server.xml

[root@zx1 webapps]# vim /usr/local/tomcat/conf/server.xml
[root@zx1 webapps]# systemctl restart tomcat.service
[root@zx1 webapps]#

164行后添加以下内容

在hosts文件中添加内容

在浏览器输入http://www.xy101.com:8080 http://www.xy102.com:8080

4、Tomcat多实例部署

(1)重新生成一个Tomcat

[root@zx1 webapps]# cd /opt/
[root@zx1 opt]# ls
apache-tomcat-9.0.16.tar.gz  jdk-8u391-linux-x64.tar.gz
jdk-8u391-linux-x64.rpm      rh
[root@zx1 opt]# tar xf apache-tomcat-9.0.16.tar.gz
[root@zx1 opt]# mv apache-tomcat-9.0.16 /usr/local/tomcat2
[root@zx1 opt]# cd /usr/local/
[root@zx1 local]# ls
bin  games    jdk1.8.0_391  lib64    sbin   src     tomcat2
etc  include  lib           libexec  share  tomcat
[root@zx1 local]# systemctl stop tomcat.service
[root@zx1 local]# netstat -lntp | grep java
[root@zx1 local]#

(2)修改tomcat2中的server.xml文件,要求各tomcat实例配置不能有重复的端口号

[root@zx1 local]# vim tomcat2/conf/server.xml
[root@zx1 local]#

22行8005换成8006,69行8080换成8081,116行8009换成8010

(3)配置tomcat启动的环境变量

[root@zx1 local]# vim /usr/local/tomcat/bin/startup.sh
[root@zx1 local]#

[root@zx1 local]# vim /usr/local/tomcat/bin/shutdown.sh

[root@zx1 local]# vim /usr/local/tomcat2/bin/startup.sh

[root@zx1 local]# vim /usr/local/tomcat2/bin/shutdown.sh

(4)启动各tomcat中的/bin/startup.sh

[root@zx1 local]# ./tomcat/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/local/jdk1.8.0_391/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@zx1 local]# ./tomcat2/bin/startup.sh
Using CATALINA_BASE:   /usr/local/tomcat2
Using CATALINA_HOME:   /usr/local/tomcat2
Using CATALINA_TMPDIR: /usr/local/tomcat2/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_391/jre
Using CLASSPATH:       /usr/local/tomcat2/bin/bootstrap.jar:/usr/local/tomcat2/bin/tomcat-juli.jar
Tomcat started.
[root@zx1 local]# netstat -lntp | grep java
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      5130/java
tcp6       0      0 127.0.0.1:8006          :::*                    LISTEN      5184/java
tcp6       0      0 :::8009                 :::*                    LISTEN      5130/java
tcp6       0      0 :::8010                 :::*                    LISTEN      5184/java
tcp6       0      0 :::8080                 :::*                    LISTEN      5130/java
tcp6       0      0 :::8081                 :::*                    LISTEN      5184/java
[root@zx1 local]#

(5)浏览器访问

浏览器输入http://20.0.0.10:8080  http://20.0.0.10:8081

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值