【Web服务器】Tomcat的部署

news2024/11/23 21:06:46

文章目录

  • 前言
  • 一、Tomcat 的概念
    • 1. Tomcat 核心组件
      • 1.1 什么是 servlet
      • 1.2 什么是 JSP
    • 2. Tomcat 功能组件结构
      • 2.1 Container 结构分析
    • 3. Tomcat 请求过程
    • 4. 配置文件
      • 4.1 安装目录
      • 4.2 conf 子目录
  • 二、Tomcat 服务部署
    • 1. 下载并安装 JDK
      • 1.1 关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下
      • 1.2 安装 JDK
      • 1.3 设置 JDK 环境变量
      • 1.4 验证 JDK
    • 2. 安装并启动 Tomcat
      • 2.1 安装 Tomcat
      • 2.2 启动 Tomcat
      • 2.3 将 Tomcat 添加到服务
      • 2.4 优化 Tomcat 启动速度
    • 3. 配置虚拟主机
      • 3.1 创建项目的目录和文件
      • 3.2 修改 Tomcat 主配置文件
      • 3.3 客户端验证
    • 4. Tomcat 多实例部署
      • 4.1安装 jdk
      • 4.2 安装 tomcat
      • 4.3 配置 tomcat 环境变量
      • 4.4 修改 tomcat2 中的 server.xml 文件
      • 4.5 修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件
      • 4.5 启动各 tomcat 中的 /bin/startup.sh
      • 4.6 浏览器访问测试


前言

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

  Tomcat属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。一般来说,Tomcat 虽然和 Apache 或着 Nginx 这些web服务器一样,具有处理 HTML 页面的功能,然而由于其处理静态 HTML 的能力远不及 Apache 或者 Nginx,所以Tomcat 通常是作为一个Servlet 和 JSP 容器,单独运行在后端


一、Tomcat 的概念

1. Tomcat 核心组件

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

容器功能
Web 容器完成 Web服务器的功能。
Servlet 容器名字为 catalina,用于 Servlet 代码。
JSP 容器于将 JSP动态网页翻译成 Servlet 代码。

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

1.1 什么是 servlet

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

1.2 什么是 JSP

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

2. Tomcat 功能组件结构

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

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

2.1 Container 结构分析

每个 Service 会包含一个 Container 容器。在 Container 内部包含了 4 个子容器,其作用分别是:

  • Engine:引擎,用来管理多个虚拟主机,一个 Service 最多只能有一个 Engine
  • Host:代表一个虚拟主机,也可以叫站点,通过配置 Host 就可以添加站点;
  • Context:代表一个 Web 应用,包含多个 Servlet 封装器;
  • Wrapper:封装器,容器的最底层。每一 Wrapper 封装着一个 Servlet,负责对象实例的创建、执行和销毁功能。

  EngineHostContextWrapper,这四个容器之间属于父子关系。

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

3. Tomcat 请求过程

  用户在浏览器中输入网址,请求被发送到本机端口 8080,被在那里监听的 Connector 获得;

  Connector 把该请求交给它所在的 Service 的 Engine(Container)来处理,并等待 Engine 的回应;

  请求在 EngineHostContextWrapper 这四个容器之间层层调用,最后在 Servlet 中执行对应的业务逻辑、数据存储等。

  执行完之后的请求响应在 ContextHostEngine 容器之间层层返回,最后返回给 Connector,并通过 Connector 返回给客户端。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p14C47oG-1685956769665)(C:\Users\86138\AppData\Roaming\Typora\typora-user-images\image-20230605092441872.png)]

用户请求(访问80端口)————>
发送请求发送给tomcat————>
tomcat有一个端口在监听8080端口)
从8080端口进入流量的会被在此端口的线程监听到
给与我们的web容器进行处理(有index.html页面显示出来  从8080端口来时会有交互界面  会读取到index.jsp这种java代码)
但是java代码无法直接使用————>
需要利用到jsp容器
将index.jsp中的java的servlet代码进行翻译
servlet容器处理 通过catalina程序/脚本来处理从JSP容器这过来的servlet代码
并不是直接对接mysql数据库
而是直接对接用户的请求例如app中的某个功能模块
比方说看个人信息  servlet容器与app接是api进行对接(具体的URL)
数据流向最终会通过用户请求内容  去mysql数据库寻找相应的内容
最后返回给用户

4. 配置文件

4.1 安装目录

目录功能
bin存放启动和关闭 Tomcat 的脚本文件,比较常用的是 catalina.shstartup.shshutdown.sh 三个文件
conf存放 Tomcat 服务器的各种配置文件,比较常用的是 server.xmlcontext.xmltomcat-users.xmlweb.xml 四个文件。
lib存放Tomcat日志
temp存放Tomcat运行时产生的文件
webapps存放项目资源的目录
workTomcat工作目录,一般清除Tomcat缓存的时候会使用到

4.2 conf 子目录

文件名说明
server.xml主配置文件
web.xml每个webapp只有“部署"后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认部署相关的配置,每个web应用也可以使用专用配置文件,来覆盖全局文件
context.xml用于定义所有web应用均需加载的Context配置,此文件为所有的webapps提供默认配置,每个web应用也可以使用自已专用的配置,它通常由专用的配置文件context.xml来定义,其存放位置为WEB-INF/目录中,覆盖全局的文件
tomcat-users.xml用户认证的账号和密码文件
catalina.policy当使用security选项启动omcat时,用于为tomcat设置安全策略
catalina.propertiesTomcat环境变量的配置,用于设定类加载器路径,以及一些与JVM调优相关参数
logging.propertiesTomcat日志系统相关的配置,可以修改日志级别和日志路径等

二、Tomcat 服务部署

1. 下载并安装 JDK

  在部署 Tomcat 之前必须安装好 jdk ,因为 jdk 是 Tomcat 运行的必要环境。

1.1 关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# setenforce 0

[root@localhost ~]# cd /opt/
[root@localhost opt]# ls
apache-tomcat-9.0.16.tar.gz jdk-8u201-linux-x64.rpm  rh

1.2 安装 JDK

[root@localhost opt]# cd /opt
###查询指定软件包的文件列表
[root@localhost opt]# rpm -qpl jdk-8u201-linux-x64.rpm 
###安装jdk
[root@localhost opt]# rpm -ivh jdk-8u201-linux-x64.rpm 
###查看jdk版本号
[root@localhost opt]# java -version
openjdk version "1.8.0_262"
OpenJDK Runtime Environment (build 1.8.0_262-b10)
OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)

1.3 设置 JDK 环境变量

[root@localhost opt]# vim /etc/profile.d/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
###刷新配置文件
[root@localhost opt]# source /etc/profile.d/java.sh
[root@localhost opt]# 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 :java development kit (java开发工具)。
  • JRE :java runtime environment (java运行时环境)。
  • JVM :java virtuak machine (java虚拟机),使java程序可以在多种平台上运行class文件。
  • CLASSPATH:告诉jvm要使用或执行的class放在什么路径上,便于JVM加载class文件。
  • tools.jar:是系统用来编译一个类的时候用到的,即执行javac的时候用到。
  • dt.jar:dt.jar是关于运行环境的类库,主要是swing包。

1.4 验证 JDK

验证思路

首先使用文本工具编写java源代码,比如 Hello.java ;
在命令行中,输入命令:javac Hello.java,对源代码进行编译,生成 class 字节码文件;
编译完成后,如果没有报错信息,输入命令:java Hello,运行 class 字节码文件,由 JVM 对字节码进行解释和运行,打印 “Hello World”。

实际步骤

[root@localhost opt]# vim Hello.java
public class Hello {			
  public static void main(String[] args){
    System.out.println("Hello world!");
  }
}

[root@localhost opt]# javac Hello.java
[root@localhost opt]# ls
apache-tomcat-9.0.16.tar.gz  Hello.class  Hello.java  jdk-8u201-linux-x64.rpm  rh
[root@localhost opt]# java Hello
Hello world!

  类名、接口名命令:英文大小写字母、数字字符、$和_,不能使用关键字和数字开头;
  一个单词命名时第一个单词的首字母要大写;多单词组成时,所有单词的首字母大写:XxxYyyZzz(大驼峰命名法)

2. 安装并启动 Tomcat

2.1 安装 Tomcat

[root@localhost ~]# cd /opt
[root@localhost opt]# tar zxvf apache-tomcat-9.0.16.tar.gz
[root@localhost opt]# mv apache-tomcat-9.0.16 /usr/local/tomcat
[root@localhost opt]# cd /usr/local/tomcat/bin
[root@localhost bin]# ls
bootstrap.jar       commons-daemon-native.tar.gz  makebase.sh       tomcat-juli.jar
catalina.bat        configtest.bat                setclasspath.bat  tomcat-native.tar.gz
catalina.sh         configtest.sh                 setclasspath.sh   tool-wrapper.bat
catalina-tasks.xml  daemon.sh                     shutdown.bat      tool-wrapper.sh
ciphers.bat         digest.bat                    shutdown.sh       version.bat
ciphers.sh          digest.sh                     startup.bat       version.sh
commons-daemon.jar  makebase.bat                  startup.sh

2.2 启动 Tomcat

后台启动方式一

###后台启动tomcat
[root@localhost bin]# /usr/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/java/jdk1.8.0_201-amd64/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
###看是否启动成功
[root@localhost bin]# netstat -lntp | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      3862/java  
###停止tomcat
[root@localhost bin]# /usr/local/tomcat/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/java/jdk1.8.0_201-amd64/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
###看是否停止成功
[root@localhost bin]# netstat -lntp | grep 8080     

后台启动方式二

###后台启动tomcat
[root@localhost bin]# /usr/local/tomcat/bin/catalina.sh start
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/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
###看是否启动成功
[root@localhost bin]# netstat -lntp | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      4461/java   
###停止tomcat
[root@localhost bin]# /usr/local/tomcat/bin/catalina.sh stop
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/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
###看是否停止成功
[root@localhost bin]# netstat -lntp | grep 8080

前台启动方式

###前台启动
[root@localhost bin]# /usr/local/tomcat/bin/catalina.sh run
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/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
05-Jun-2023 22:19:11.193 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server.服务器版本:        Apache Tomcat/9.0.16
05-Jun-2023 22:19:11.199 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server.构建:          Feb 4 2019 16:30:29 UTC
###前台停止
ctrl+c
###看是否停止成功	
[root@localhost bin]# netstat -lntp | grep 8080  

浏览器查看

http://192.168.145.30:8080

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GyiEgQ2x-1685956769666)(C:\Users\86138\AppData\Roaming\Typora\typora-user-images\image-20230605140916932.png)]

2.3 将 Tomcat 添加到服务

###编写tomcat服务文件
[root@localhost system]# 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
###重新加载服务
[root@localhost system]# systemctl daemon-reload
[root@localhost system]# systemctl start tomcat
[root@localhost system]# systemctl status tomcat
● tomcat.service - tomcat server
   Loaded: loaded (/usr/lib/systemd/system/tomcat.service; disabled; vendor preset: disabled)
   Active: active (running) since 一 2023-06-05 22:35:22 CST; 15s ago
  Process: 6029 ExecStart=/usr/local/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)
 Main PID: 6040 (catalina.sh)
    Tasks: 46
   CGroup: /system.slice/tomcat.service
           ├─6040 /bin/sh /usr/local/tomcat/bin/catalina.sh start
           └─6041 /usr/java/jdk1.8.0_201-amd64/bin/java -Djava.util.logging.config.file...

6月 05 22:35:22 localhost.localdomain systemd[1]: Starting tomcat server...
6月 05 22:35:22 localhost.localdomain startup.sh[6029]: Using CATALINA_BASE:   /usr/l...t
6月 05 22:35:22 localhost.localdomain startup.sh[6029]: Using CATALINA_HOME:   /usr/l...t
6月 05 22:35:22 localhost.localdomain startup.sh[6029]: Using CATALINA_TMPDIR: /usr/l...p
6月 05 22:35:22 localhost.localdomain startup.sh[6029]: Using JRE_HOME:        /usr/j...4
6月 05 22:35:22 localhost.localdomain startup.sh[6029]: Using CLASSPATH:       /usr/l...r
6月 05 22:35:22 localhost.localdomain startup.sh[6029]: Tomcat started.
6月 05 22:35:22 localhost.localdomain systemd[1]: Started tomcat server.
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost system]# systemctl stop tomcat
[root@localhost system]# systemctl status tomcat
● tomcat.service - tomcat server
   Loaded: loaded (/usr/lib/systemd/system/tomcat.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

6月 05 22:35:22 localhost.localdomain startup.sh[6029]: Using CLASSPATH:       /usr/l...r
6月 05 22:35:22 localhost.localdomain startup.sh[6029]: Tomcat started.
6月 05 22:35:22 localhost.localdomain systemd[1]: Started tomcat server.
6月 05 22:35:43 localhost.localdomain systemd[1]: Stopping tomcat server...
6月 05 22:35:43 localhost.localdomain shutdown.sh[6112]: Using CATALINA_BASE:   /usr/...t
6月 05 22:35:43 localhost.localdomain shutdown.sh[6112]: Using CATALINA_HOME:   /usr/...t
6月 05 22:35:43 localhost.localdomain shutdown.sh[6112]: Using CATALINA_TMPDIR: /usr/...p
6月 05 22:35:43 localhost.localdomain shutdown.sh[6112]: Using JRE_HOME:        /usr/...4
6月 05 22:35:43 localhost.localdomain shutdown.sh[6112]: Using CLASSPATH:       /usr/...r
6月 05 22:35:43 localhost.localdomain systemd[1]: Stopped tomcat server.
Hint: Some lines were ellipsized, use -l to show in full.

service文件含义解释

[Unit] 表示这是基础信息
Description 是描述
After 是在那个服务后面启动,一般是网络服务启动后启动
[Service] 表示这里是服务信息
Type 是服务类型
PIDFile 是服务的pid文件路径, 开启后,必须在tomcat的bin/catalina.sh中加入CATALINA_PID参数
ExecStart 是启动服务的命令
ExecReload 是重启服务的命令
ExecStop 是停止服务的指令
[Install] 表示这是是安装相关信息
WantedBy 是以哪种方式启动:multi-user.target表明当系统以多用户方式(默认的运行级别)启动时,这个服务需要被自动运行。

2.4 优化 Tomcat 启动速度

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

[root@localhost ~]# vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security
###--117行--修改
###把random改成urandom,使数据流更快
securerandom.source=file:/dev/urandom
###启动tomcat服务
[root@localhost ~]# systemctl start tomcat
###查看是否启动成功
[root@localhost ~]# netstat -lntp | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      7045/java

tomcat 启动慢的原因是随机数产生遭到阻塞,遭到阻塞的原因是 熵池大小 。

  • /dev/random:阻塞型,读取它就会产生随机数据,但该数据取决于熵池噪声,当熵池空了,对/dev/random 的读操作也将会被阻塞。
  • /dev/urandom:非阻塞的随机数产生器,它会重复使用熵池中的数据以产生伪随机数据。这表示对/dev/urandom的读取操作不会产生阻塞,但其输出的熵可能小于/dev/random的。它可以作为生成较低强度密码的伪随机数生成器,不建议用于生成高强度长期密码。

3. 配置虚拟主机

  很多时候公司会有多个项目需要运行,一般不会是在一台服务器上运行多个 Tomcat 服务,这样会消耗太多的系统资源。此时, 就需要使用到 Tomcat 虚拟主机。

3.1 创建项目的目录和文件

[root@localhost ~]# mkdir /usr/local/tomcat/webapps/accp
[root@localhost ~]# mkdir /usr/local/tomcat/webapps/benet
[root@localhost ~]# echo "<h1>This is accp page</h1>" > /usr/local/tomcat/webapps/accp/index.jsp
[root@localhost ~]# echo "<h1>This is benet page</h1>" > /usr/local/tomcat/webapps/benet/index.jsp

3.2 修改 Tomcat 主配置文件

[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml
--165行前--插入
<Host name="www.accp.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/webapps/accp" path="" reloadable="true" />
</Host>

<Host name="www.benet.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/webapps/benet" path="" reloadable="true" />
</Host>
###停止tomcat
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh
###启动tomcat
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh
###查看是否启动成功
[root@localhost ~]# netstat -lntp | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      7045/java

Host字段含义:

  name:主机名

  appBase:Tomcat程序工作目录,即存放web应用程序的目录;相对路径为webapps,绝对路径为 /usr/local/tomcat/webapps

  unpackWARs:在启用此webapps时是否对WAR格式的归档文件先进行展开;默认为true

  autoDeploy:在Tomcat处于运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy;默认为true

  xmlValidation:是否验证xml文件执行有效性检验的标志

  xmlNamespaceAware:是否启用xml命名空间,设置该值与xmlValidationtrue,表示对web.xml文件执行有效性检验

Context字段含义:

  docBase:相应的Web应用程序的存放位置;也可以使用相对路径,起始路径为此Context所属Host中appBase定义的路径;

  path:相对于Web服务器根路径而言的URI;如果为空 ,则表示为此webapp的根路径 /

  reloadable:是否允许重新加载此context相关的Web应用程序的类;默认为 false

3.3 客户端验证

###配置临时DNS解析文件
[root@localhost ~]# echo "192.168.145.30 www.accp.com www.benet.com" >> /etc/hosts

浏览器访问 http://www.accp.com:8080/
浏览器访问 http://www.benet.com:8080/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZDZ2kXHw-1685956769667)(C:\Users\86138\AppData\Roaming\Typora\typora-user-images\image-20230605151438893.png)]

HTTP 请求过程:

  • Connector 连接器监听的端口是 8080。由于请求的端口和监听的端口一致,连接器接受了该请求。
  • 因为引擎的默认虚拟主机是 www.accp.com,并且虚拟主机的目录是webapps。所以请求找到了 tomcat/webapps 目录。
  • 访问的路径为根路径,URI 为空,即空是 Web 程序的应用名,也就是 context。此时请求找到 /usr/local/tomcat/webapps/accp 目录,解析 index.jsp 并返回。

4. Tomcat 多实例部署

4.1安装 jdk

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# setenforce 0

[root@localhost ~]# cd /opt/
[root@localhost opt]# ls
apache-tomcat-9.0.16.tar.gz jdk-8u91-linux-x64.tar.gz  rh
###解压
[root@localhost opt]# tar xf jdk-8u91-linux-x64.tar.gz 
[root@localhost opt]# mv jdk1.8.0_91/ /usr/local/
[root@localhost opt]#  cd 
[root@localhost ~]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=$JAVA_HOME/jre
export CATALINA=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=%JAVA_HOME/bin:$JRE_HOME/bin:$PATH
###加载文件
[root@localhost ~]# source /etc/profile
[root@localhost ~]# java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)

4.2 安装 tomcat

[root@localhost opt]# tar zxvf apache-tomcat-9.0.16.tar.gz
###创建目录
[root@localhost opt]# mkdir /usr/local/tomcat
[root@localhost opt]# cd /usr/local/tomcat/
###移动tomcat到/usl/local/tomcat/改名为tomcat1
[root@localhost tomcat]# mv apache-tomcat-9.0.16 /usr/local/tomcat/tomcat1
###复制 tomcat1 改名为 tomcat2
[root@localhost tomcat]# cp -a /usr/local/tomcat/tomcat1 /usr/local/tomcat/tomcat2
[root@localhost tomcat]# ls
tomcat1  tomcat2

4.3 配置 tomcat 环境变量

[root@localhost ~]# vim /etc/profile.d/tomcat.sh
#tomcat1
export CATALINA_HOME1=/usr/local/tomcat/tomcat1
export CATALINA_BASE1=/usr/local/tomcat/tomcat1
export TOMCAT_HOME1=/usr/local/tomcat/tomcat1

#tomcat2
export CATALINA_HOME2=/usr/local/tomcat/tomcat2
export CATALINA_BASE2=/usr/local/tomcat/tomcat2
export TOMCAT_HOME2=/usr/local/tomcat/tomcat2
[root@localhost ~]# source /etc/profile.d/tomcat.sh

4.4 修改 tomcat2 中的 server.xml 文件

要求各 tomcat 实例配置不能有重复的端口号

[root@localhost ~]# vim /usr/local/tomcat/tomcat2/conf/server.xml
###22行,修改Server prot,默认为8005 -> 修改为8006
<Server port="8006" shutdown="SHUTDOWN">

###69行,修改Connector port,HTTP/1.1  默认为8080 -> 修改为8081
<Connector port="8081" protocol="HTTP/1.1"

###116行,修改Connector port AJP/1.3,默认为8009 -> 修改为8010
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />

  第一个连接器默认监听8080端口,负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。

  第二个连接器默认监听8009端口,负责和其他的HTTP服务器建立连接。在把Tomcat与其他HTTP服务器集成时,就需要用到这个连接器。

  另外还有两个常用的端口号分别是8005、8443,其中8005是复制关闭tomcat服务使用,8443是负责https请求连接。

4.5 修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件

[root@localhost ~]# cd /usr/local/tomcat/tomcat1/bin/
[root@localhost bin]# vim startup.sh
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------
##添加以下内容
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1

[root@localhost bin]# vim shutdown.sh
# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1

[root@localhost tomcat1]# cd /usr/local/tomcat/tomcat1/bin/
[root@localhost bin]# vim startup.sh
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2

[root@localhost bin]# vim shutdown.sh
# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2

4.5 启动各 tomcat 中的 /bin/startup.sh

[root@localhost ~]# /usr/local/tomcat/tomcat1/bin/startup.sh
Using CATALINA_BASE:   /usr/local/tomcat/tomcat1
Using CATALINA_HOME:   /usr/local/tomcat/tomcat1
Using CATALINA_TMPDIR: /usr/local/tomcat/tomcat1/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat/tomcat1/bin/bootstrap.jar:/usr/local/tomcat/tomcat1/bin/tomcat-juli.jar
Tomcat started.
[root@localhost ~]# /usr/local/tomcat/tomcat2/bin/startup.sh
Using CATALINA_BASE:   /usr/local/tomcat/tomcat2
Using CATALINA_HOME:   /usr/local/tomcat/tomcat2
Using CATALINA_TMPDIR: /usr/local/tomcat/tomcat2/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat/tomcat2/bin/bootstrap.jar:/usr/local/tomcat/tomcat2/bin/tomcat-juli.jar
Tomcat started

[root@localhost ~]# netstat -lntp | grep java
tcp6       0      0 :::8080                 :::*                    LISTEN      12737/java          
tcp6       0      0 :::8081                 :::*                    LISTEN      12802/java          
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      12737/java          
tcp6       0      0 127.0.0.1:8006          :::*                    LISTEN      12802/java          
tcp6       0      0 :::8009                 :::*                    LISTEN      12737/java          
tcp6       0      0 :::8010                 :::*                    LISTEN      12802/java          

4.6 浏览器访问测试

http://192.168.145.45:8080
http://192.168.145.45:8081

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cl2Z6IvB-1685956769667)(C:\Users\86138\AppData\Roaming\Typora\typora-user-images\image-20230605171840071.png)]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/624655.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Milvus Lite 已交卷!轻量版 Milvus,主打就是一个轻便、无负担

想要体验世界上最快的向量数据库&#xff1f;缺少专业的工程师团队作为支撑&#xff1f;Milvus 安装环境受限&#xff1f; 别担心&#xff0c;轻量版 Milvus 来啦&#xff01; 在正式介绍 Milvus Lite 之前&#xff0c;先简单回顾一下 Milvus。Milvus 是一款开源的向量数据库&a…

logstash启动时默认连接本机节点elasticsearch问题

背景 今天在排查处理一个logstash读取kafka数据写入到hdfs的问题时候&#xff0c;发现在启动日志中多了个 logstash.outputs.elasticsearch 连接的地址是localhost:9200 部分日志如下&#xff1a; 排查过程说明 1、首先确认 logstash 启动的配置文件中的 output 配置&#x…

SonarQube Data Center Edition 10.0 Crack

使用{SonarQube}为团队和企业提供干净的代码 SonarQube Data Center Edition为开发团队提供深度集成到企业环境中的代码质量和安全解决方案;使您能够一致且可靠地部署干净的代码。 灵活性和治理&#xff1a;完美的企业代码质量工具 与您的企业环境深度集成 自我管理&#xff0…

【软件测试】软件测试的基本概念和开发模型

1. 前言 在进行软件测试的学习之前,我们要了解软件测试一些基本概念. 这些基本概念将帮助我们更加明确工作的目标以及软件测试到底要做什么. 2. 软件测试的基本概念 软件测试的基本概念有3个,分别是需求,测试用例和BUG. 2.1 需求 这里的需求还可以分为 用户需求和软件需求,用户…

【博客646】将消息队列放在Prometheus前以提高可靠性并不总是“好主意“

将队列放在Prometheus前以提高可靠性并不总是"好主意" 为了防止突发流量&#xff0c;而在prometheus前加上消息队列以达到削峰填谷的目的 架构如下&#xff1a; 应用程序将指标推送到某种形式的队列&#xff08;通常是 Kafka&#xff09;&#xff0c;暴露器二进制…

超详细IDEA创建Maven项目

文章目录 一、Maven概述二、创建Maven项目三、Maven项目简单介绍3.1 标准化的项目结构3.2 标准化的构建流程3.3 方便的依赖管理 一、Maven概述 Maven是一个专门用于管理和构建Java项目的工具。我们之所以要使用Maven&#xff0c;是因为Maven可以为我们提供一套标准化的项目结构…

Python单元测试框架《python 自动化框架 pytest》

​ 编辑切换为居中 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; Pytest 简介 pytest 是python 的一种单元测试框架&#xff0c;不python 自带的unittest 测试框架类似&#xff0c;但是比 unittest 框架使用起来更简洁&#xff0c;效率更高。根据pyt…

智警杯半决赛知识点

hive&#xff1a; 启动hadoop 启动本地连接&#xff0c;连接外网 主机就是外网IP 1.修改云主机host文件&#xff0c;添加内网ip&#xff0c;对应映射名为hadoop000&#xff0c;实现云主机自身使用root用户ssh访问hadoop000免密登录 改host文件 vim/etc/hosts 比赛时会提…

【论文阅读】(2023.05.10-2023.06.03)论文阅读简单记录和汇总

(2023.05.10-2023.06.08)论文阅读简单记录和汇总 2023/05/10&#xff1a;今天状态&#xff0c;复阳大残&#xff0c;下午淋了点雨吹了点风&#xff0c;直接躺了四个小时还是头晕- -应该是阳了没跑了。 2023/06/03&#xff1a;前两周出差复阳&#xff0c;这两周调整作息把自己又…

第十三届蓝桥杯c++b组国赛题解(还在持续更新中...)

第十三届蓝桥杯Cb组国赛真题pdf自取 试题A&#xff1a;2022 解题思路&#xff1a; 有2022个物品&#xff0c;它们的编号分别是1到2022&#xff0c;它们的价值分别等于它们的编号。也就是说&#xff0c;有2022种物品&#xff0c;物品价值等于物品编号。 从2022个物品种选取10个…

虹科案例 | 虹科Dimetix激光测距传感器可实现无接触式监测采矿设备健康状况!

Part.01 行业挑战 采矿业机器的环境条件通常非常恶劣&#xff0c;损坏的设备会导致生产力和利润下降。虹科虹科Dimetix激光测距传感器为采矿设备和危险区域机器的机器健康监测提供了非接触式解决方案。 采矿操作中的处理设备通常包括分离、混合和粉碎矿石的机械设备。许多重型…

客户线上反馈:从信息搜集到疑难 bug 排查全流程经验分享

写在前面&#xff1a;本文是我在前端团队的第三次分享&#xff0c;应该很少会有开发者写客户反馈处理流程以及 bug 排查的心得技巧&#xff0c;全文比较长&#xff0c;写了一个多星期大概1W多字&#xff08;也是我曾经2年工作的总结&#xff09;&#xff0c;如果你有耐心阅读&a…

因数据库字段可存储长度设置的小了,已达到设置字符类型的存储上限,导致数据存储时报错 及 常用的数据类型

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 使用MySQL数据库&#xff0c;因数据库字段可存储长度设置的小了&#xff0c;已达到设置字符类型的存储上限&#xff0c;导致数据存储时报错 问题描述 提示&#xff1a;这里描述项目中遇到的问题&am…

2天刷完这套八股文,offer到手啦?

前言 大家好&#xff0c;最近有不少小伙伴在后台留言&#xff0c;得准备面试了&#xff0c;又不知道从何下手&#xff01;为了帮大家节约时间&#xff0c;特意准备了一份面试相关的资料&#xff0c;内容非常的全面&#xff0c;真的可以好好补一补&#xff0c;希望大家在都能拿…

我的GIT练习Three

目录 前言 GIT安装教程 Git作者 GIT优点 GIT缺点 为什么要使用 Git GIT练习Three 总结 前言 Git 是一个分布式版本控制及源代码管理工具;Git 可以为你的项目保存若干快照&#xff0c;以此来对整个项目进行版本管理 GIT安装教程 点击进入查看教程&#xff1a;点击进入 G…

(深入浅出)详解虚拟内存

概述 我们都知道一个进程是与其他进程共享CPU和内存资源的。正因如此&#xff0c;操作系统需要有一套完善的内存管理机制才能防止进程之间内存泄漏的问题。 为了更加有效地管理内存并减少出错&#xff0c;现代操作系统提供了一种对主存的抽象概念&#xff0c;即是虚拟内存&am…

从未尝试过的 7 种处理 CSS 的方法

啊&#xff0c;Web 开发的世界——您可以从学习 HTML、JavaScript&#xff0c;当然还有 CSS 等基础知识开始。 但是一旦你在现实世界中构建应用程序&#xff0c;纯 CSS 就不再适用了。 挣扎是真的。 因此&#xff0c;今天我们将深入探讨使用 NextJS 为 React 应用程序编写 CSS…

NLP与GPT联合碰撞:大模型与小模型联合发力

目录标题 NLP是什么东西&#xff1f;Al大小模型联合发力 NLP是自然语言处理&#xff0c;而GPT是自然语言生成模型。 它们的联合碰撞结果是大模型与小模型联合发力&#xff0c;是因为大模型可以提供更好的语言理解和生成能力&#xff0c;而小模型则可以更快地进行推理和预测。 …

考虑微网新能源经济消纳的共享储能优化配置(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【剑指offer专项突破版】字符串篇——“C“

前言 剑指offer专项突破版&#xff08;力扣官网&#xff09;——> 点击进入 本文所属专栏——>点击进入 一.字符串中的变位词 题目分析 总结 要求——在字符串2中找到字符串的1的排列顺序之一 数据格式——仅包含小写字母——哈希表&#xff01; 返回值——bool值 思路分…