1.Tocmcat部署

news2025/1/6 20:04:55

文章目录

  • Tomcat部署
    • 介绍
    • 部署Tomcat
        • 安装jdk
        • 安装Tomcat
          • 添加tomcat系统服务
    • Tomcat部署虚拟主机
    • tomcat多实例部署

Tomcat部署

  • Tomcat安装部署
  • 虚拟主机配置
  • Tomcat优化

介绍

  • 免费的、开放源代码的Web应用服务器
  • Apache软件基金会(Apache Software Foundation)Jakarta项目中的- -个核心项目
  • 由Apache、Sun和一些公司及个人共同开发而成
  • 深受Java爱好者的喜爱,并得到部分软件开发商的认可
  • 目前比较流行的Web应用服务器

在这里插入图片描述

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

    • Web容器:完成Web服务器的功能。
    • Servlet 容器:名字为catalina, 用于处理Servlet 代码。
    • JSP容器:用于将JSP动态网页翻译成Servlet 代码。
  • 因此Tomcat 是Web应用服务器,也是一个Servlet/JSP 容器。Tomeat 作为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 之间相互独立。

  • Container结构分析:

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

  • 4个子容器的作用分别是:

    • Engipe: 引擎,用来管理多个虚拟主机,一个Service 最多只能有一个Engine;
    • Host:代表一个虚拟主机,也可以叫站点,通过配置Host 就可以添加站点:
    • Context: 代表-一 个Web. 应用,包含多个Servlet封装器:
    • Wrapper: 封装器,容器的最底层。每一Wrapper 封装着-一个Servlet, 负贵对象实例的创建、执行和销毁功能。
  • Engine、Host.、Context和wrapper, 这四个容器之间属于父子关系。容器由一个引擎可以管理多个虚拟主机。每个虚拟主机可以管理多个Web应用。每个Web应用会有多个Servlet 封装器。

  • Tomcat请求过程:,

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

在这里插入图片描述

详解:
假设来自客户的请求为: http://localhost:8080/wsota/wsota_index.jsp 
1) 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得 
2) Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应 
3) Engine获得请求localhost/wsota/wsota_index.jsp,匹配它所拥有的所有虚拟主机Host 
4) Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机) 
5) localhost Host获得请求/wsota/wsota_index.jsp,匹配它所拥有的所有Context 
6) Host匹配到路径为/wsota的Context(如果匹配不到就把该请求交给路径名为""的Context去处理) 
7) path="/wsota"的Context获得请求/wsota_index.jsp,在它的mapping table中寻找对应的servlet 
8) Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类 
9) 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法 
10)Context把执行完了之后的HttpServletResponse对象返回给Host 
11)Host把HttpServletResponse对象返回给Engine 
12)Engine把HttpServletResponse对象返回给Connector 
13)Connector把HttpServletResponse对象返回给客户browser

tomcat端口

  • tcp 8080 负责处理http请求连接
  • tcp 8443 负责处理https请求连接
  • tcp 8005 关闭tomcat服务使用
  • tcp 8009 AJP协议端口,与apache连接使用,apache可通过AJP协议访问tomcat的8009端口

部署Tomcat

systemctl stop firewalld
systemctl disable firewalld
setenforce 0


cd /opt/
apache-tomcat-9.0.16.tar.gz  jdk-8u201-linux-x64.rpm    ##需要用到的软件包

安装jdk

cd /opt/

rpm -ivh jdk-8u201-linux-x64.rpm                 #安装一个新的RPM软件包
rpm -qpl jdk-8u201-linux-x64.rpm                  #查询指定软件包的文件列表
java -version                                    #查看安装的java版本信息

 cd /usr/java/jdk1.8.0_201-amd64/             ##jdk安装目录
  • bin目录:包含jdk运行所需要程序和命令
  • jre目录中的bin:jre运行所需要的程序和命令
  • lib目录:包含java的库文件
##设置jdk环境变量


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

source /etc/profile.d/java.sh          ##启动java.sh脚本

java -version
##验证java是否安装成功

vim hello.java

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

javac hello.java 

安装Tomcat

cd /opt/
tar xf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat

cd /usr/local/tomcat/bin

./startup.sh                           ##后台运行tomcat
./shutdown.sh                          ##后台关闭tomcat

./catalina.sh start                     ##后台运行tomcat

./catalina.sh run                       ##前台运行romcat,会占用窗口

netstat -lntp | grep :8080
添加tomcat系统服务
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



systemctl daemon-reload       #重新加载
systemctl start tomcat    #启动tomcat服务
netstat -lntp | grep :8080

优化tomcat启动速度

vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security

--117行--修改
securerandom.source=file:/dev/urandom  

/usr/local/tomcat/bin/shutdown.sh 
/usr/local/tomcat/bin/startup.sh 

/usr/local/tomcat/中主要目录说明:

目录名称功能作用
bin存放启动和关闭 tomcat的脚本文件,如catalina.sh、startup.sh、shutdown.sh
conf存放 Tomcat 服务器的各种配置文件,如主配置文件 server.xml 和 应用默认的部署描述文件 web.xml
lib存放 Tomcat 运行需要的库文件的 jar 包,一般不作任何改动
logs存放 Tomcat 执行时的日志
temp存放 Tomcat 运行时产生的文件
webapps存放 Tomcat 默认的 Web 应用项目资源的目录
workTomcat 的工作目录,存放 Web 应用代码生成和编译文件

Tomcat部署虚拟主机

##创建不同域名的目录和文件

cd /usr/local/tomcat/webapps/


mkdir kgc
mkdir benet

echo "this is kgc  tomcat web\!" > ./kgc/index.jsp 
echo "this is benet  tomcat web\!" > ./benet/index.jsp 

##修改tomcat 主配置文件   server.xml

cd /usr/local/tomcat/conf
vim server.xml


--165行前--插入

<Host name="www.kgc.com" appBase="webapps" unpackWARs="true"                    autoDeploy="true" 
         xmlValidation="false" 
         xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/webapps/kgc" 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>

修改Host配置段

关键词功能
name主机名
appBaseTomcat程序工作目录,即存放web应用程序的目录;相对路径为webapps,绝对路径为 /usr/local/tomcat/webapps
unpackWARs在启用此webapps时是否对WAR格式的归档文件先进行展开;默认为true
autoDeploy在Tomcat处于运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy;默认为true
xmlValidation是否验证xml文件执行有效性检验的标志
xmlNamespaceAware是否启用xml命名空间,设置该值与xmlValidation为true,表示对web.xml文件执行有效性检验
Context docBase相应的Web应用程序的存放位置;也可以使用相对路径,起始路径为此Context所属Host中appBase定义的路径
path相对于Web服务器根路径而言的URI;如果为空"",则表示为此webapp的根路径 /
reloadable是否允许重新加载此context相关的Web应用程序的类;默认为false
systemctl stop tomcat
systemctl start tomcat
netstat -lntp | grep :8080

tomcat多实例部署

systemctl disable --now firewalld
setenforce 0


##采用另外一种方法安装jdk
cd /opt/
apache-tomcat-9.0.16.tar.gz  jdk-8u91-linux-x64.tar.gz

tar xf apache-tomcat-9.0.16.tar.gz
tar xf jdk-8u91-linux-x64.tar.gz


mv jdk1.8.0_91 /usr/local/

mkdir /usr/local/tomcat
cp -r apache-tomcat-9.0.16 /usr/local/tomcat/tomcat1
cp -r apache-tomcat-9.0.16 /usr/local/tomcat/tomcat2
##修改java中的配置文件

vim /etc/profile


==在最后添加==

export JAVA_HOME=/usr/local/jjdk1.8.0_91
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

source /etc/profile
##配置tomcat环境变量

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


source /etc/profile.d/tomcat.sh
##修改  tomcat2  中的server.xml文件,要求各tomcat实例配置不能有重复的端口号

cd /usr/local/tomcat/tomcat2/conf
vim 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" />	

##修改  tomcat1  实例中的   startup.sh   文件

vim /usr/local/tomcat/tomcat1/bin/startup.sh 


# ----------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------
##添加以下内容

export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1

##修改  tomcat1  实例中的  shutdown.sh  文件

vim /usr/local/tomcat/tomcat1/bin/startup.sh 


# ----------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------
##添加以下内容

export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1
##修改  tomcat2  实例中的  startup.sh  文件

vim /usr/local/tomcat/tomcat2/bin/startup.sh 


# ----------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------
##添加以下内容

export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2
##修改  tomcat2  实例中的  shutdown.sh  文件

vim /usr/local/tomcat/tomcat2/bin/startup.sh 


# ----------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------
##添加以下内容

export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2
##启动两个服务

/usr/local/tomcat/tomcat1/bin/startup.sh 
/usr/local/tomcat/tomcat2/bin/startup.sh 

netstat -natp | grep java

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

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

相关文章

华为OD机试真题B卷 JavaScript 实现【5键键盘的输出】,附详细解题思路

一、题目描述 有一个特殊的5键键盘&#xff0c;上面有a&#xff0c;ctrl-c&#xff0c;ctrl-x&#xff0c;ctrl-v&#xff0c;ctrl-a五个键。 a键在屏幕上输出一个字母a&#xff1b;ctrl-c将当前选择的字母复制到剪贴板&#xff1b;ctrl-x将当前选择的字母复制到剪贴板&#…

【算法系列之哈希表I】leetcode15. 三数之和

242.有效的字母异位词 力扣题目链接 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 **注意&#xff1a;**若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 输入: s "anagram", t "nag…

快来给你个人微信公众号认个证吧

欢迎关注「全栈工程师修炼指南」公众号 点击 &#x1f447; 下方卡片 即可关注我哟! 作者安全运维学习答疑交流群&#xff1a;请关注公众号回复【学习交流群】 今天我一改往日&#xff0c;不谈技术只谈谈关于个人公众号认证流程&#xff0c;突然感觉自己有点不务正业了&#xf…

go语言学习——9

文章目录 goroutine概念goroutine调度模型 channelchannel介绍定义/声明channelchannel的关闭channel遍历channel其他细节 goroutine 前言&#xff1a;统计1~90000000数字中&#xff0c;哪些是素数&#xff1f; 使用循环&#xff0c;很慢使用并发或者并行的方式&#xff0c;将任…

【数据结构】二叉树(二)

目录 一、二叉树链式结构及实现 1、二叉树的结构 2、二叉树的遍历 2.1 前序遍历 2.2 中序遍历 2.3 后序遍历 2.4 层序遍历 3、二叉树链式结构的实现 3.1 创建一个节点 3.2 二叉树节点个数 3.3 二叉树叶子节点个数 3.4 二叉树的高度 3.5 二叉树第k层节点个数 3.6 二叉树查找值…

数据库管理-第八十二期 EMCC升级教程(20230607)

数据库管理 2023-06-07 第八十二期 EMCC升级教程1 升级EMCC1.1 升级概览1.2 拷贝相关文件1.3 升级OPatch1.4 升级OMSPatcher1.5 升级WLS1.6 升级OMS 2 升级Agent2.1 升级概览2.2 拷贝相关文件2.3 安装或升级AgentPatcher2.4 升级agent 3 升级Oracle数据库ASH包总结 第八十二期 …

什么时候适合加一层?

加一层能解决问题&#xff1a; 为什么加一层能解决问题&#xff1f; 什么时候适合加一层&#xff1f; 销售说不吵的&#xff0c; 道路检测说没有超标。 业主就是睡不着。 吃瓜群众说你为啥买那边的房子。 销售说开发商骗他&#xff0c;他也是受害者。 结果没问题&#xff0…

CSS 样式语言 选择器

CSS介绍 层叠样式表&#xff0c;是一种样式表语言&#xff0c;用来描述HTML和XML文档的呈现。随着HTML的发展&#xff0c;为了满足页面设计者的要求&#xff0c;HTML添加了很多显示功能&#xff0c;但是随着这些功能的增加&#xff0c;使得HTML越来越杂乱&#xff0c;HTML 页面…

「企业安全架构」EA874:安全需求,愿景、原则和流程

安全需求愿景 在开始任何安全架构工作之前&#xff0c;定义安全需求是很重要的。这些需求应该受到业务上下文和通用需求远景文档的影响。下面是一个图表&#xff0c;它显示安全需求是企业信息安全体系结构中业务上下文的一部分。 图1 安全需求远景&#xff08;SRV&#xff09;有…

Android系统原理性问题分析 - 系统 Root 的实现原理

声明 在Android系统中经常会遇到一些系统原理性的问题&#xff0c;在此专栏中集中来讨论下。Android低版本时经常听说Root系统&#xff0c;随着Android版本的升高&#xff0c;提Root的人越来越少了。不过我在系统开发时也有客户提出为系统Root的需求&#xff0c;所以在这里分析…

【产品经理】用户增长方法论

在做用户增长为核心的产品运营推广前&#xff0c;我们应从几个方面入手——打造核心功能点、转化方式要清晰、用户反馈与转化、传播渠道要合适、建立病毒式传播规则。 2017年&#xff0c;以营销见长的可口可乐公司将设置了24年之久的首席营销官&#xff08;CMO&#xff09;撤销…

[Maven高级]->近万字文章带你深入了解Maven

⭐作者介绍&#xff1a;大二本科网络工程专业在读&#xff0c;持续学习Java&#xff0c;努力输出优质文章 ⭐作者主页&#xff1a;逐梦苍穹 ⭐所属专栏&#xff1a;JavaEE ⭐如果觉得文章写的不错&#xff0c;欢迎点个关注一键三连&#x1f609;有写的不好的地方也欢迎指正&…

已经安装高版本CUDA的条件下bitsandbytes发现低版本的CUDA SETUP: Detected CUDA version 100解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Zabbix 配置钉钉报警

如有错误&#xff0c;敬请谅解&#xff01; 此文章仅为本人学习笔记&#xff0c;仅供参考&#xff0c;如有冒犯&#xff0c;请联系作者删除&#xff01;&#xff01; 1. 创建服务群【手机钉钉】|【电脑钉钉】- 右上角【】-【发起群聊】-【选人建群】/选择不同的群类型创建&…

数据库信息速递 甲骨文与微软合作,在Azure上推出数据库服务

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

Linux搭建配置jdk开发环境

因为ZooKeeper、Hadoop和Spark等大数据应用的运行需要Java环境的支持&#xff0c;所以需要我们来安装配置一下jdk环境。 安装步骤如下&#xff1a; 下载JDK 访问Oracle官网下载Linux x64操作系统的JDK安装包jdk-8u161-linux-x64.tar.gz。 上传JDK安装包 通过SecureCRT远程连接…

chatgpt赋能python:Python的数据存储:理解Python的内存管理机制

Python的数据存储&#xff1a;理解Python的内存管理机制 Python是一种高级编程语言&#xff0c;广泛用于开发Web应用程序、机器学习和数据科学等。作为一门动态语言&#xff0c;Python的内存管理机制是其优点之一。这篇文章将探讨Python如何内部存储数据&#xff0c;介绍Pytho…

pytorch ddp 范例

pytorch ddp 范例&#xff1a; ################ ## main.py文件 import argparse from tqdm import tqdm import torch import torchvision import torch.nn as nn import torch.nn.functional as F # 新增&#xff1a; import torch.distributed as dist from torch.nn.paral…

从零开始手搓一个STM32与机智云的小项目——GPIO的输入输出

文章目录 前言GPIO简介GPIO的命名与数量GPIO的功能STM32F1 GPIO的寄存器 库函数开发搭建库函数的工程查看原理图WACK_UP输入按键继电器输出138控制流水灯 代码编写库函数简介GPIO输出模式控制继电器通过138控制ledGPIO实现按键输入的操作编写逻辑代码 实物效果 总结 前言 上一…

Redis学习总结(二)

AOF 为什么是在执行完命令之后记录日志&#xff1f; 关系型数据库&#xff08;如 MySQL&#xff09;通常都是执行命令之前记录日志&#xff08;方便故障恢复&#xff09;&#xff0c;而 Redis AOF 持久化机制是在执行完命令之后再记录日志。AOF 记录日志过程为什么是在执行完命…