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.mzph.cn/news/812524.shtml

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

相关文章

sql server2008触发器

sql server在Navicat工具不能插入数据 可以去写代码插入&#xff0c;代码连接sql server可以插入 或者使用sql server专门的工具 BEGINdeclare a int;declare s t_amount;select a baddebt_age_id,srate from aa_baddebt_age;INSERT INTO dade(id,name) VALUES(a,s) END

手机外屏碎8折维修,天星金融(原小米金融)助阵米粉节

今年4月6日是小米公司14岁生日&#xff0c;也是一年一度的盛会“米粉节”。据“小米服务”官方公众号发布的消息&#xff0c;为庆祝这一重要日子&#xff0c;从4月6日起至4月17日&#xff0c;为用户带来一系列服务权益。 据悉&#xff0c;活动共包括8项服务权益&#xff0c;其…

2024年认证杯SPSSPRO杯数学建模B题(第一阶段)神经外科手术的定位与导航全过程文档及程序

2024年认证杯SPSSPRO杯数学建模 B题 神经外科手术的定位与导航 原题再现&#xff1a; 人的大脑结构非常复杂&#xff0c;内部交织密布着神经和血管&#xff0c;所以在大脑内做手术具有非常高的精细和复杂程度。例如神经外科的肿瘤切除手术或血肿清除手术&#xff0c;通常需要…

12.4.1 实验1:配置CDP

12.4.1 实验1&#xff1a;配置CDP 1、实验目的 通过本实验可以掌握: CDP特征。CDP配置和调试方法。通过CDP查看设备直连邻居信息的方法。 2、实验拓扑 配置CDP的实验拓扑如上图所示。 3、实验步骤 &#xff08;1&#xff09;配置路由器R1 R1(config)#interface serial 0…

选择成为一名程序员:兴趣与职业发展的交织

在当今信息化、数字化的时代&#xff0c;程序员这一职业越来越受到年轻人的青睐。那么&#xff0c;是什么原因驱使他们选择走上编程这条道路呢&#xff1f;是纯粹的兴趣使然&#xff0c;还是对未来职业发展的深思熟虑&#xff1f;本文将深入探讨这一话题&#xff0c;分析兴趣与…

【opencv】示例-pca.cpp PCA图像重建演示

// 加载必要的头文件 #include <iostream> // 用于标准输入输出流 #include <fstream> // 用于文件的输入输出 #include <sstream> // 用于字符串的输入输出流操作#include <opencv2/core.hpp> // OpenCV核心功能的头文件 #include "o…

Pycharm通过配置隧道连接远程服务器

前言&#xff1a; 上篇有说到局域网windows和服务器互通的情况下连接远程pycharm&#xff0c;这次咱们来说下通过跳板机的方式连接服务器如何做到windows远程连接到服务器 1&#xff1a;设置SSH隧道或SSH代理 ssh -L localhost:LOCAL_PORT:FINAL_SERVER_IP:FINAL_SERVER_PORT…

Prompt编写——安全边界

在编写prompt&#xff08;提示、指令或引导语&#xff09;时&#xff0c;设置安全边界主要是为了防止生成的内容超出预期或包含不合适、有害的信息。特别是在使用大型语言模型时&#xff0c;如GPT系列模型&#xff0c;设置安全边界至关重要。以下是一些建议来设置安全边界&…

如何实现vue点击按钮进行图片浏览 ?

以下是官方的写法&#xff0c;并不能达到我们的要求&#xff0c;官方实现的功能是点击图片达到预览大图的效果。如果你的按钮就是图片&#xff0c;也可以达到目前的功能 <div class"demo-image__preview"><el-imagestyle"width: 100px; height: 100px…

AI赋能的BIM体验

近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术与建筑信息模型&#xff08;BIM&#xff09;的融合给建筑行业带来了革命性的变化。 BIM 是建筑物物理和功能特征的数字表示&#xff0c;与 AI 功能相结合&#xff0c;显着改变了客户的体验。 在本文中&#xff0c;我们…

搭建Android内核和Framework开发和调试环境

环境 ubuntu20.04或者22.04 x86_64 步骤 搭建cuttlefish运行环境 参考:搭建 Cuttlefish 运行环境 安装下面的软件包sudo apt install -y git devscripts config-package-dev debhelper-compat golang curl 其他,可以参考这个链接,安装android依赖的软件包: sudo apt i…

1.Chinese Tiny LLM_ Pretraining a Chinese-Centric Large Language Model

文章目录 摘要一、背景二、预训练数据统计信息数据处理 模型架构 三、SFT四、Learning from Human Preferences五、评估数据集和指标训练过程和比较分析安全性评估中文硬指令理解与遵循评价 六、结论 https://arxiv.org/abs/2404.04167https://github.com/Chinese-Tiny-LLM/Chi…

python 今日小知识1——parser

argparse模块&#xff0c;其实质就是将相关参数进行设置。相对专业说法&#xff1a; argparse 模块提供轻松编写用户友好的命令行接口。 程序定义它需要的参数&#xff0c;然后 argparse 将弄清如何从 sys.argv 解析出那些参数。 argparse 模块会自动生成帮助和使用手册&#…

江科大笔记

这里写目录标题 片上资源/外设引脚定义表启动配置推挽开漏oc/od 门漏极/集电极 电阻的上拉下拉输入捕获输入捕获通道主从触发模式输入捕获基本结构PWMI基本结构PWMPSC ARR CRR输入捕获模式测频率TIM_PrescalerConfig()初始化输入捕获测频法测周法 PWMI模式测频率占空比定时中断…

C语言经典例题(24) --- 计算体重指数、计算三角形的周长和面积、计算球体的体积、成绩的输入输出、变种水仙花数

文章目录 1.计算体重指数2.计算三角形的周长和面积3.计算球体的体积4.成绩的输入输出5.变种水仙花数 1.计算体重指数 题目描述: 问题&#xff1a;计算BMI指数&#xff08;身体质量指数&#xff09;。BMI指数&#xff08;即身体质量指数&#xff0c;简称体质指数又称体重&…

C语言---顺序表(二)

文章目录 前言1.准备工作2.代码的实现2.1.顺序表的创建、销毁和打印2.2.顺序表的扩容、头插\删、尾插\删2.2.1.扩容2.2.2.尾插2.2.3.头插2.2.3.尾删2.2.4.头删 2.3.指定位置之前插入/删除数据/查找数据2.3.1.指定位置之前插入数据2.3.2.指定位置之前删除数据2.3.3.查找特定数据…

Okhttp全链路监控

目标&#xff1a; 1&#xff09;.监控网络请求的各个阶段 2&#xff09;获取每一个阶段的耗时和性能&#xff0c;用于性能分析。包括dns解析&#xff0c;socket连接时间&#xff0c;tls连接时间&#xff0c;请求发送时间&#xff0c;服务器接口处理时间&#xff0c;应答传输时…

44.基于SpringBoot + Vue实现的前后端分离-汽车租赁管理系统(项目 + 论文PPT)

项目介绍 本站是一个B/S模式系统&#xff0c;采用SpringBoot Vue框架&#xff0c;MYSQL数据库设计开发&#xff0c;充分保证系统的稳定性。系统具有界面清晰、操作简单&#xff0c;功能齐全的特点&#xff0c;使得基于SpringBoot Vue技术的汽车租赁管理系统设计与实现管理工作…

【数据结构与算法】:10道链表经典OJ

1. 移除链表元素 思路1&#xff1a;遍历原链表&#xff0c;将 val 所在的节点释放掉。(太麻烦) 思路2&#xff1a;创建新链表&#xff0c;再遍历原链表&#xff0c;找到不为 val 的节点尾插到新链表。 思路1代码实现如下&#xff1a; 注意&#xff1a; 1.当链表为空时&#x…

Pytorch: 利用预训练的残差网络ResNet50进行图像特征提取,并可视化特征图热图

1. 残差网络ResNet的结构 2.图像特征提取和可视化分析 import cv2 import time import os import matplotlib.pyplot as plt import torch from torch import nn import torchvision.models as models import torchvision.transforms as transforms import numpy as npimgname…