02_JavaWeb中的Tomcat(详解)

news2024/11/26 2:47:52

文章目录

  • 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.coloradmin.cn/o/1600191.html

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

相关文章

(踩坑)Please refer to 异常和Error creating bean with name 异常

一、Please refer to 异常 如图所示&#xff0c;在使用maven构建项目的时候&#xff0c;如果提示该错误&#xff0c;则可能是xml配置文件有问题或者测试类等。但是没有明确的异常信息&#xff0c;所以做以下小改动&#xff0c;可以查看异常信息。 在IDEA工具中&#xff0c;打…

08 SQL进阶 -- 集合运算 -- 表的连结(JOIN)

1. 连结(JOIN) 前一节我们学习了 UNION和INTERSECT 等集合运算, 这些集合运算的特征就是以行方向为单位进行操作. 通俗地说, 就是进行这些集合运算时, 会导致记录行数的增减。使用 UNION 会增加记录行数,而使用 INTERSECT 或者 EXCEPT 会减少记录行数。 但这些运算不能改变…

【Java开发指南 | 第十篇】Java修饰符

读者可订阅专栏&#xff1a;Java开发指南 |【CSDN秋说】 文章目录 JAVA修饰符访问修饰符非访问修饰符static 修饰符final 修饰符abstract 修饰符synchronized 修饰符transient 修饰符volatile 修饰符 JAVA修饰符 修饰符用来定义类、方法或者变量&#xff0c;通常放在语句的最前…

2024年【高处安装、维护、拆除】考试题库及高处安装、维护、拆除复审模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 高处安装、维护、拆除考试题库是安全生产模拟考试一点通生成的&#xff0c;高处安装、维护、拆除证模拟考试题库是根据高处安装、维护、拆除最新版教材汇编出高处安装、维护、拆除仿真模拟考试。2024年【高处安装、维…

瞬态瑞丽波频散曲线提取

频散曲线 function [Y1, f, phase] = das_fft(signal1, signal2, Ts) [y, lag

windows编译xlnt,获取Excel表里的数据

用git拉取项目 这个文件是空的 要用git拉下来&#xff0c;使用终端编译xlnt库 点击解决方案 运行生成 然后新建项目&#xff0c;配置好库&#xff0c; #include <iostream> #include <xlnt/xlnt.hpp>int main() {// 打开 Excel 文件xlnt::workbook workbook;workb…

Ubuntu Vs code配置ROS开发环境

文章目录 1.开发环境2.集成开发环境搭建2.1 安装Ros2.2 安装 Vs code2.3 安装vs code 插件 3.Vs code 配置ROS3.1 创建ROS工作空间3.2 从文件夹启动Vs code3.3 使用Vscode 编译ROS 空间3.4 使用Vs code 创建功能包 4.编写简单Demo实例4.1编写代码4.2编译与执行 1.开发环境 系统…

【数学】主成分分析(PCA)的应用案例(Python)

接着上篇PCA推导过程文章&#xff0c;本文结合图像来展示PCA的应用过程 Jupyter notebook 源文件在这里 1 借助库函数来PCA重建 使用sklearn库函数 # Import needed libs import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import load_digits from…

大模型微调的几种常见方法

在文章深入理解大语言模型微调技术中&#xff0c;我们详细了解大语言模型微调的概念和训练过程&#xff0c;本篇给大家介绍大模型微调常见的7种训练方法。 1、Adapter Tuning 2019年谷歌的研究人员首次在论文《Parameter-Efficient Transfer Learning for NLP》提出针对 BERT 的…

java线程(1)

1、多线程启动 有两种启动方式 1、实现Runable接口 2、继承Thread类并且重写run&#xff08;&#xff09;方法 在执行进程中的任务才会产生线程&#xff0c;所以需要实现Runable接口并且重写run&#xff08;&#xff09;方法&#xff0c;然后将Runable的实现对象作为参数传…

(文章复现)分布式电源选址定容的多目标优化算法

参考文献&#xff1a; [1]夏澍,周明,李庚银.分布式电源选址定容的多目标优化算法[J].电网技术,2011,35(09):115-121. [2] Ye Tian, Ran Cheng, Xingyi Zhang, and Yaochu Jin, “PlatEMO: A MATLAB platform for evolutionary multi-objective optimization [educational for…

图像处理与视觉感知---期末复习重点(8)

文章目录 一、图像分类流程二、梯度方向直方图2.1 概述2.2 计算梯度方向直方图2.2.1 过程2.2.2 总结 三、SIFT 一、图像分类流程 流程&#xff1a;输入图像、预处理、特征提取、学习算法、类标。 二、梯度方向直方图 2.1 概述 1. 梯度方向直方图(Histogram of Oriented Gradie…

【1688电商运营必看】掌握这些关键数据指标,轻松提升业绩!

1688电商运营&#xff0c;数据分析环节中需要关注多个关键指标&#xff0c;以便全面、深入地了解店铺或产品的运营状况。以下是一些主要的指标&#xff1a; 1、流量指标 访客数&#xff1a;反映店铺的吸引力和流量规模。 浏览量&#xff1a;显示页面的受欢迎程度&#xff0c…

【AI开发:语言】二、Qwen1.5-7B模型本地部署CPU和GPU版

前言 之前文章&#xff0c;我们采用了Koblod运行Yi-34B大模型&#xff0c;本文采用LM Studio来运行千问模型。 LM Studio并没有开源&#xff0c;但是可以免费使用&#xff0c;他是目前本地进行模型测试最好的工具了。 在这里&#xff0c;依然使用Windows 10进行部署和测试&…

GPT-3:NLP领域的革新者

在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;预训练模型一直是研究的热点。随着技术的不断进步&#xff0c;我们见证了从BERT到GPT等一系列模型的涌现。其中&#xff0c;GPT-3&#xff08;Generative Pre-trained Transformer 3&#xff09;以其卓越的生成能力和…

抗干扰1路|1通道触摸单按键触摸触控ICVK3601 SOT23-6适用于玩具,风扇,台灯等触摸IC

产品品牌&#xff1a;永嘉微电/VINKA 产品型号&#xff1a;VK3601 封装形式&#xff1a;SOT23-6 概述 VK3601具有1个触摸按键&#xff0c;可用来检测外部触摸按键上人手的触摸动作。该芯片具有较 高的集成度&#xff0c;仅需极少的外部组件便可实现触摸按键的检测。 提供了1路…

力扣周赛392复盘

3105. 最长的严格递增或递减子数组 题目 给你一个整数数组 nums 。 返回数组 nums 中 严格递增 或 严格递减 的最长非空子数组的长度。 思考&#xff1a; 返回什么&#xff1a;返回最长非空子数组的长度。return max(decs_len,incs_len); 但实际上我们只需要用一个变量ans就…

【优质书籍推荐】AI赋能100%提高项目管理效率

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

Vision GNN: An Image is Worth Graph of Nodes

感受野&#xff1a;在卷积神经网络中,感受野(Receptive Field)是指特征图上的某个点能看到的输入图像的区域,即特征图上的点是由输入图像中感受野大小区域的计算得到的。 感受野并非越大越好&#xff0c;反而可能因为过大而过于发散梯度下降&#xff08;Gradient Descent GD&am…

在linux系统中启动pycharm

1.找到pycharm的安装路径&#xff0c;一般在下载文件夹中 2.进入pycharm的安装路径&#xff0c;进入bin目录 3.右击&#xff0c;打开终端&#xff0c;输入./pycharm.sh