02_JavaWeb中的Tomcat(详解)

文章目录

  • Tomcat
  • 1, 概述
    • 1.1 安装
    • 1.2 目录结构
    • 1.3 启动/停止
  • 2, 资源部署
    • 2.1 直接部署: 主要和重要的方式
    • 2.2 虚拟映射: 重要
      • 2.2.1 方式一:
      • 2.2.1 方式二:
    • 2.3 原理解析
  • 3, Tomcat组件
    • 3.1 Connector
    • 3.2 Engine
      • 3.2.1 Host
        • 3.2.1.1 Context
  • 4, 其它: 重要
    • 4.1 设置

Tomcat

1, 概述

web服务器有很多种。在大多数情况下,我们会选择Tomcat。

Tomcat是一个服务器:

- 在这这个Tomcat的服务器的概念, 指的是具有监听别的用户请求和响应用户请求功能的一个运行在电脑上的程序.

1.1 安装

Tomcat的官网: https://tomcat.apache.org/

Tomcat直接解压缩到某个盘符根目录即可,不要放置在很深的目录结构中,同时也建议不要放置在中文目录下,以防出现一些问题。(不仅仅针对Tomcat,对其他软件也是如此)

注意自己的计算机要拥有JAVA_HOME配置, 才能运行Tomcat

(如果电脑上没有配置JAVA_HOME, 启动Tomcat会一闪而过)

(注意是否端口占用)

1.2 目录结构

目录结构

- bin目录:二进制文件存放目录,启停tomcat的文件均位于该目录下
-  conf目录:配置文件的存放目录
-  logs目录:日志存放目录,tomcat正常启动及错误启动的日志信息均会记录在此目录中。可以作为tomcat启动失败时一个调试方式。(面试中问题: 线上出了BUG,你是怎么解决的/定位的?Tomcat的日志信息, 报了什么错, 定位错误代码, 修改)// webapps目录:在tomcat中部署资源的目录
(如果我们要使用Tomcat, 只需要把  后端代码 or 前端代码  放到Tomcat的webapps下面, 然后启动Tomcat -> 这种行为称为"部署应用")
(面试中问到的问题: Java项目是怎么部署和上线的?    方式1,java项目写好了->编译(class)打包(war)-> 把这个打成的war, 放到云服务中的Tomcat的webapps下面, 启动Tomcat, 结束.     )
(上面面试回答的补充: 1, Tomcat -> 意味有云服务安装了JVM;  2, 安装数据库 3,买域名->dns解析  )- lib目录:tomcat运行时依赖的jar包存放于此
- temp目录:临时文件的存放目录
- work目录:tomcat工作时的工作目录

在这里插入图片描述

1.3 启动/停止

启动Tomcat

// 1, Tomcat的bin目录下点击执行startup.bat文件
// 2, Tomcat的bin目录下唤出cmd,输入startup  或者 startup.bat 执行注意: 如果启动过程,Tomcat窗口一闪而过,那是JAVA_HOME没有配置正确

停止Tomcat

// 1, Tomcat的bin目录下执行shutdown.bat文件
// 2, Tomcat的bin目录下唤出cmd,执行shutdown
// 3, 在tomcat启动成功的窗口,按住ctrl键,多次按c键,也可以停止 (不建议)

2, 资源部署

应用 = 项目: 部署应用(应用当成一个项目 或者 一个代码模块), 部署项目

需要注意的是tomcat最小单位是应用, 一个Tomcat容器中可以包含多个应用,资源文件必须放置在应用中,应用有两个属性,应用名和应用路径

2.1 直接部署: 主要和重要的方式

创建目录部署

// 直接在tomcat的webapps目录下新建一个目录,当tomcat运行时便会将webapps目录下这个新建目录解析成为一个应用/一个项目。
// 资源文件放置在该目录内内部, 访问时只需要通过如下路径来访问:
http://主机:端口号/应用名(目录的名称)/相对应用内部的一个相对路径构成

在这里插入图片描述

// 如图: 如果需要访问1.txt,那么访问的地址为http://localhost:8080/hello/1.txt

War包部署

// 我们可以通过部署java项目的war包的形式(war包是一个Java项目经过编译压缩之后的一个压缩包格式),当Tomcat运行的时候,  Tomcat会将webapps下的war包会自动解压缩成目录(原理上和上面是等价的),访问方式同上。

2.2 虚拟映射: 重要

虚拟映射, 我们可能不会直接使用. (1, 用到, 给idea配置tomcat)

所谓虚拟映射, 就是把应用部署到tomcat目录之外,通过一些虚拟的方式把这个项目映射到Tomcat的webapps目录中

2.2.1 方式一:

配置文件: conf/Catalina/localhost目录下新建一个xml文件,并配置

在这里插入图片描述

<!-- 配置映射资源的来源文件地址 -->
<Context docBase="D:\appname" />

该配置项表示的含义是配置了一个叫做/app的应用(应用名为xml文件的名称),即/app, 该应用指向的路径即应用路径为D:\app2,如果希望访问该目录下某个文件,则通过如下方式来访问:

http://主机:端口号/app/app2目录内文件路径

2.2.1 方式二:

配置文件: conf/server.xml文件中

<!-- 在Host节点下配置Context节点 -->
<!-- path代表应用名, docBase代表映射的资源位置 -->
<Context path="/appName" docBase="D:\appPath" />

访问方式(同方式一): eg: http://localhost:8080/app3/12.jpg

2.3 原理解析

要明确一点的是,静态资源服务器的本质其实就是把用户在浏览器地址栏输入的一个网络路径加以解析转换成服务器主机硬盘路径

在明确上述问题之后,那么部署资源的方式就容易理解了。tomcat中最小的单位是应用,任何一个资源文件都必须放置在应用中。

在这里插入图片描述

当我们使用直接部署时,假设tomcat位于D:/tomcat目录下,而后我们在webapps目录下新建一个hello目录,在该目录下存放资源文件,那么当我们访问http://localhost:8080/hello时,尝试解析/hello对应的硬盘路径为D:/tomcat/webapps/hello,而后访问http://localhost:8080/hello/1.txt时,对应的文件路径为D:/tomcat/webapps/hello/1.txt,文件恰好位于该路径,那么便可以获取到文件的输入流,随后将文件响应出去

当我们使用虚拟映射时,tomcat的存放路径依然是D:/tomcat目录下,此时我们的文件位于D:/app2目录下,紧接着我们进行了虚拟映射的配置,配置应用的名称为/app3,应用的路径为D:/app2,当输入的地址http://localhost:8080/app3时,此时关联到的硬盘路径为D:/app2目录,随后如何访问某个文件,只需要写出该文件相对D:/app2目录的一个相对路径关系即可。

3, Tomcat组件

Tomcat组件-> Tomcat的内部的构成

有点抽象(认为设计的东西, 非现实中的抽象)

Tomcat是由一系列可以配置的组件所构成。组件元素位于conf/server.xml文件中。当tomcat启动时,会读取server.xml文件里面的内容,按照xml文件的设置,生成相应的组件对象。也就是说,如果我们希望tomcat运行时的组件发生变化,只需要对server.xml文件进行修改即可。Tomcat组件中有一个比较核心的组件需要我们重点关注。

<?xml version="1.0" encoding="UTF-8"?><!-- 整个Tomcat是一个Server(整一个Tomcat服务) --> 
<Server port="8005" shutdown="SHUTDOWN"><!-- 一个Server可以包含多个Service(多个服务空间)  --><Service name="Catalina"><!-- 一个Service可以有多个Connector(功能和端口不能重复):Connector监听的请求全部要触发到Engine中   --><Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" /><Connector port="443" protocol="HTTP/1.0"connectionTimeout="20000"redirectPort="8443" /><!-- 一个Service 只能包含一个Engine --> <Engine name="Catalina" defaultHost="localhost"><!-- 一个Engine可以包含多个 Host(虚拟主机) --> <!-- appBase 用来标识这个虚拟主句Host管理的文件夹(这个文件夹里面放到都是这个虚拟主机管理的项目) --><Host name="www.baidu.com"  appBase="webapps"unpackWARs="true" autoDeploy="true"><!-- 一个Host虚拟主机里面可以包含多个Context(一个Context代表一个应用/项目)  --> <!-- path:代表虚拟映射项目的名字, docBase: 指向某一个被映射的目录  --><Context path="/app3" docBase="C:\Users\snow\Desktop\d" /></Host><  <!-- 一个Engine可以包含多个 Host(虚拟主机) --> <Host name="www.taobao.com"  appBase="webapps"unpackWARs="true" autoDeploy="true"></Host></Engine></Service></Server>

在这里插入图片描述

3.1 Connector

Connector:负责接收客户端的请求以及对客户端做出响应。主要职责是负责持续不断监听某一端口号,将客户端传递过来的请求报文解析转换成request对象,同时还会提供一个response对象,将这两个对象传递给Engine。

3.2 Engine

负责接收Connector传递过来的request对象以及response对象,并进一步传递给Host

3.2.1 Host

负责接收Engine传递过来的request对象以及response对象,并挑选一个合适的Context对象进行进一步传递

3.2.1.1 Context

负责处理具体的业务逻辑。比如利用应用路径拼接请求资源路径,接下来在硬盘上查找该文件是否存在,并且写入数据到reponse中,最终Connector会读取response中的数据

4, 其它: 重要

4.1 设置

默认端口设置

当我们在访问http://www.baidu.com时,我们发现请求的地址中没有端口号,为什么没有端口号,是因为没有使用端口号吗?不是的。而是当前服务器使用的是 当前协议的默认端口号,对于http协议来说,默认端口号是80。所以如果希望你的tomcat在访问时也不携带端口号,那么需要设置你的tomcat监听80端口号即可。

<!-- conf/server.xml文件 -->
<Connector port="80" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />

缺省应用: 默认应用-> ROOT

观察webapps目录下的应用,有一个非常特殊,ROOT,访问该目录下的资源文件时,不能通过/ROOT/1.html来访问,需要去掉应用名。ROOT应用为tomcat的缺省应用,意思是当找不到合适的应用来处理时,会将请求交给缺省应用来处理。访问缺省应用下的资源文件时,不需要携带应用名。

如何设置应用为缺省应用?
// 方式一:在webapps目录下的应用,目录名改为ROOT  (这种更合适)
// 方式二:在conf/Catalina/localhost目录下配置ROOT.xml文件  (平时实际操作不建议)
// 方式三: 在conf/server.xml配置  (不要让path="/ROOT" -> 定义一个项目名叫ROOT, 而不是所谓的默认应用)

欢迎页面

在某些场景下,我们发现请求的资源地址最终指向的是目录而不是一个具体的资源文件,那么访问的是哪个文件呢?实际上访问的是当前应用下的欢迎页面。

<!-- conf/web.xml文件中有配置 --> 
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file></welcome-file-list>

比如访问http://localhost:8080/application

地址指向的是一个应用,而不是一个具体的资源,那么tomcat会去加载哪个页面呢?依次按照welcome-file中的设置,一个一个在当前应用下去查找文件是否存在,首先查找index.html、index.htm、index.jsp如果查找到,则结束,如果没有查找到,则进入到下一个,如果全部都没有找到,则最终返回404.

思考题:设置Tomcat: 通过ip地址就可以直接访问到某个 png图片文件,应该如何设置?

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android网络抓包--Charles

一、Android抓包方式 对Https降级进行抓包&#xff0c;降级成Http使用抓包工具对Https进行抓包 二、常用的抓包工具 wireshark&#xff1a;侧重于TCP、UDP传输层&#xff0c;HTTP/HTTPS也能抓包&#xff0c;但不能解密HTTPS报文。比较复杂fiddler&#xff1a;支持HTTP/HTTPS…

文献速递:深度学习肝脏肿瘤诊断---基于多相增强 CT 和临床数据的恶性肝肿瘤鉴别诊断深度学习

Title 题目 Deep learning for diferential diagnosisof malignant hepatic tumors based on multi-phase contrast-enhanced CT and clinical data 基于多相增强 CT 和临床数据的恶性肝肿瘤鉴别诊断深度学习 Abstract 摘要 Liver cancer remains the leading cause of can…

云计算:Linux 部署 OVS 集群(控制端)实现OpenFlow

目录 一、实验 1.环境 2.Linux 部署 OVS 集群&#xff08;控制端&#xff09; 3.控制端对接服务端OVS网元 4.服务端OVS添加流表 5.服务端删除OVS 二、问题 1. ODL如何查找已安装插件 2.查看流表显示不全 3.如何删除OVS流表 一、实验 1.环境 (1) 主机 表1 宿主机 主…

什么是NLP?

&#x1f916;NLP是什么&#xff1f;&#x1f916; NLP&#xff08;Natural Language Processing&#xff09;&#xff0c;全称自然语言处理&#xff0c;是人工智能不可或缺的一环&#xff0c;它搭建了人与计算机之间沟通的桥梁&#x1f309;。 &#x1f6e0;️NLP强大功能一…

【自然语言】使用词袋模型,TF-IDF模型和Word2Vec模型进行文本向量化

一、任务目标 python代码写将 HarryPorter 电子书作为语料库&#xff0c;分别使用词袋模型&#xff0c;TF-IDF模型和Word2Vec模型进行文本向量化。 1. 首先将数据预处理&#xff0c;Word2Vec 训练时要求考虑每个单词前后的五个词汇&#xff0c;地址为 作为其上下文 &#xf…

CTFshow电子取证——内存取证1

关于内存与注册表 内存中的注册表项 当Windows操作系统启动时&#xff0c;它会将注册表的部分数据加载到内存中&#xff0c;以便系统和应用程序可以快速地访问这些信息。这些数据在内存中可以更快地被读取和修改&#xff0c;以便系统能够动态地调整其行为和配置。 系统性能和…

Ubuntu (Linux系统) 下载安装 Qt 环境

在官网http://download.qt.io/archive/qt/ 下载安装包&#xff0c;默认linux平台下提供的安装包以run后缀结尾 也可以选择其它地址下载 Qt官网下载地址&#xff1a;https://download.qt.io&#xff1b; 国内镜像下载地址&#xff1a;https://mirrors.cloud.tencent.com/qt/ 。建…

稀碎从零算法笔记Day47-LeetCode:找到冠军 I

或许是昨天的每日一题太难了&#xff0c;今天的简单 题型&#xff1a;数组、矩阵 链接&#xff1a;2923. 找到冠军 I - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 一场比赛中共有 n 支队伍&#xff0c;按从 0 到 n - 1 编号。 给你一个下…

在vue3中实现pptx、word、excel预览

插件推荐 PPTXjs vue-office 代码 <script setup lang"ts" name"home"> import { computed, nextTick, ref, onMounted } from vue; //引入VueOfficeDocx组件 import VueOfficeDocx from vue-office/docx; //引入VueOfficeExcel组件 import VueOf…

对LSTM的通俗易懂理解--可变权重

RNN的问题&#xff1a;长期依赖&#xff0c;即对短期的数据敏感&#xff0c;对比较远的长期数据不敏感&#xff0c;这是因为RNN隐藏状态权重在不同时刻是共享相同的&#xff0c;随着时间步的增加&#xff0c;梯度会指数级地衰减或者增长&#xff0c;导致梯度消失或者爆炸&#…

高质量ChatGPT Prompts 精选

通用超级 Prompt GPT4实用。通用超级 prompt &#xff0c;根据你想要的输出和你的反馈&#xff0c;自动使用相应的专家角色帮你解决问题。如果需要升级ChatGPT Plus&#xff0c;可以参考教程 升级 GPT4.0 保姆教程 您是一位具有多领域专长的专家级ChatGPT提示工程师。在我们…

贪心算法|968.监控二叉树

力扣题目链接 class Solution { private:int result;int traversal(TreeNode* cur) {// 空节点&#xff0c;该节点有覆盖if (cur NULL) return 2;int left traversal(cur->left); // 左int right traversal(cur->right); // 右// 情况1// 左右节点都有覆盖if (le…

Llama2模型本地部署(Mac M1 16G)

环境准备 环境&#xff1a;Mac M1 16G、Conda Conda创建环境配置 使用Anaconda-Navigator创建python 3.8环境 切换到新建的conda环境&#xff1a; conda activate llama38 llama.cpp 找一个目录&#xff0c;下载llama.cpp git clone https://github.com/ggerganov/llama.…

在word中将公式复制后变成了图片怎么解决

是由于文件复制后格式不兼容造成的&#xff0c;需要转化一下。 然后确定就好了

计算机网络——TCP和UDP协议

目录 前言 前篇 引言 TCP与UDP之间的区别 TCP 三次握手 为什么要三次握手而不是两次握手&#xff1f; 丢包问题与乱序问题的解决 四次挥手 为什么客户端需要等待超时时间&#xff1f; UDP协议 TCP和UDP的主要区别 前言 本博客是博主用于复习计算机网络的博客&…

halcon domain和region总结

1.domain是什么 在halcon中&#xff0c;ROI(Region Of Interest)被称为图像的域(domain)&#xff08;参考《solution_guide_i.pdf》&#xff09;。这个术语来自数学中的定义域&#xff0c;而图像就是函数&#xff0c;本函数负责将坐标映射到像素值&#xff0c;即f(x) gray这样…

强大的数据分析计算软件:Stata 15 for Mac 激活版

Stata 15 for Mac是一款高级统计分析软件&#xff0c;具有强大的数据管理和数据提取工具。以下是其功能和特点的详细介绍&#xff1a; 软件下载&#xff1a;Stata 15 for Mac 激活版版下载 数据管理&#xff1a;Stata 15 for Mac支持多种数据库、数据格式和计算机语言&#xff…

【尝试】域名验证:配置github二级目录下的txt文件

【尝试】域名验证&#xff1a;配置github二级目录下的txt文件 写在最前面一、初始化本地仓库二、设置远程仓库1. 远程仓库 URL 没有设置或设置错误添加远程仓库修改远程仓库 2. 访问权限问题3. 仓库不存在步骤 1: 在你的仓库中添加文件步骤 2: 确认GitHub Pages设置步骤 3: 访问…

ElasticSearch中使用bge-large-zh-v1.5进行向量检索(一)

一、准备 系统&#xff1a;MacOS 14.3.1 ElasticSearch&#xff1a;8.13.2 Kibana&#xff1a;8.13.2 BGE是一个常见的文本转向量的模型&#xff0c;在很多大模型RAG应用中常常能见到&#xff0c;但是ElasticSearch中默认没有。BGE模型有很多版本&#xff0c;本次采用的是bg…

深度学习入门(2)

一。Matplotlib模块添加 Matplotlib是用于绘制图形的库&#xff0c;使用 Matplotlib 可以轻松地绘制图形和实现数据的可视化。 pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple 二、绘制简单图形 import numpy as np import matplotlib.pyplot as plt #…