深入理解Tomcat

目录:

Tomcat

Tomcat简介

Tomcat 服务器是Apache的一个开源免费的Web容器。它实现了JavaEE平台下部分技术规范,属于轻量级应用服务器

如何下载tomcat

可以访问我写的这盘博客👉如何下载和配置Tomcat--看这篇文章就懂了

Tomcat工作原理

Tomcat是一个能够处理请求并产生响应的应用程序。Tomcat实现了JavaEE平台下的一些技术规范,所以我们可以在Tomcat中运行我们所编写的Servlet、JSP。

客户端基于网络协议发送请求给Tomcat的web服务器 ,tomcat监听端口 ,web服务器解析请求选择需要的请求信息发送给容器找到要使用的脚本 , 脚本操作数据库返回只给java,java在对返回的结果进行封装后,返回web服务器,最后服务器返回给客户端

Tomcat架构图


conf/server.xml配置文件

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">


 <Service name="Catalina">


    <!-- 连接器监听端口是 8080,默认通讯协议是 HTTP/1.1 -->
  <Connector port="8080" protocol="HTTP/1.1"
        connectionTimeout="20000"
        redirectPort="8443" />
              
    <!-- 名字为 Catalina 的引擎,其默认的虚拟主机是 localhost -->
  <Engine name="Catalina" defaultHost="localhost">
     <!-- 名字为 localhost 的虚拟主机,其目录是 webapps-->
   <Host name="localhost" appBase="webapps"
      unpackWARs="true" autoDeploy="true">
   </Host>
  </Engine>
 </Service>
</Server>

Tomcat组件

Server组件

启动一个server实例(即一个JVM进程),它监听在8005端口以接收shutdown命令。Server的定义不能使用同一个端口,这意味着如果在同一个物理机上启动了多个Server实例,必须配置它们使用不同的端口。

为什么是JVM进程?

因为tomcat就是一个java编写的程序,tomcat运行时,就相当于一个java主类的启动,所以是JVM进程

xml 复制代码
<Server port="8005" shutdown="SHUTDOWN">

port: 接收shutdown指令的端口,默认为8005;

shutdown:发往此Server用于实现关闭tomcat实例的命令字符串,默认为SHUTDOWN;

Service组件

Service主要用于关联一个引擎和与此引擎相关的连接器,每个连接器通过一个特定的端口和协议接收请求并将其转发至关联的引擎进行处理。困此,Service要包含一个引擎、一个或多个连接器。

xml 复制代码
<Service name="Catalina">

name:此服务的名称,默认为Catalina;

Connector组件

支持处理不同请求的组件,一个引擎可以有一个或多个连接器,以适应多种请求方式。默认只开启了处理Http协议的连接器。如果需要使用其他协议,需要在Tomcat中配置该协议的连接器。

支持处理不同请求的组件,一个引擎可以有一个或多个连接器,以适应多种请求方式。默认只开启了处理Http协议的连接器。如果需要使用其他协议,需要在Tomcat中配置该协议的连接器。

在Tomcat中连接器类型通常有4种:

  • HTTP连接器
  • SSL连接器
  • AJP 1.3连接器
  • proxy连接器
xml 复制代码
<Connector port="8888" protocol="HTTP/1.1"
        connectionTimeout="20000"
        redirectPort="8443" />

port:监听的端口

protocol:连接器使用的协议,默认为HTTP/1.1;

connectionTimeout:等待客户端发送请求的超时时间,单位为毫秒;

redirectPort:如果某连接器支持的协议是HTTP,当接收客户端发来的HTTPS请求时,则转发至此属性定义的端口;

maxThreads:支持的最大并发连接数,默认为200个;

Engine组件

Engine是Servlet处理器的一个实例,即servlet引擎,定义在server.xml中的Service标签中。Engine需要defaultHost属性来为其定义一个接收所有发往非明确定义虚拟主机的请求的Host组件。

xml 复制代码
<Engine name="Catalina" defaultHost="localhost">

name:Engine组件的名称;

defaultHost:Tomcat支持基于FQDN(Fully Qualified Domain Name 全限定域名)的虚拟主机,这些虚拟主机可以通过在Engine容器中定义多个不同的Host组件来实现;但如果此引擎的连接器收到一个发往非明确定义虚拟主机的请求时则需要将此请求发往一个默认的虚拟主机进行处理,因此,在Engine中定义的多个虚拟主机的主机名称中至少要有一个跟defaultHost定义的主机名称同名;

Host组件

虚拟主机

虚拟主机(英语:virtual hosting)或称共享主机(shared web hosting),又称虚拟服务器,是一种在单一主机或主机群上,实现多网域服务的方法,可以运行多个网站或服务的技术。

Host组件位于Engine容器中用于接收请求并进行相应处理的虚拟主机。通过该容器可以运行Servlet或者JSP来处理请求。

xml 复制代码
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">

name:虚拟主机的名称,Tomcat通过在请求URL中的域名与name中的值匹配,用于查找能够处理该请求的虚拟主机。如果未找到则交给在Engine中defaultHost指定的主机处理;

appBase:此Host的webapps目录,即指定存放web应用程序的目录的路径;

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

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

Context组件

Context是Host的子组件,代表指定一个Web应用,它运行在某个指定的虚拟主机(Host)上;每个Web应用都是一个WAR文件,或文件的目录。

xml 复制代码
<Context path="/test" docBase="D:\bjsxt\itbaizhan.war" />

path:context path既浏览器访问项目的访问路径。

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

配置虚拟主机(Host)

因为我的tomcat端口改成了8081所以tomcat监听的tomcat端口为8081

webapps1/a/index.html

根据这个结构创建目录

index.html

html 复制代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
 <TITLE>ZBXMX </TITLE>
 <META NAME="Generator" CONTENT="EditPlus">
 <META NAME="Author" CONTENT="">
 <META NAME="Keywords" CONTENT="">
 <META NAME="Description" CONTENT="">
 </HEAD>
 <BODY>
    Welcome toZBDX
 </BODY>
</HTML>

**修改 conf目录下的server.xml的host标签 **

xml 复制代码
    <Host name="localhost" appBase="webapps1"
       unpackWARs="true" autoDeploy="true">
          <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"     prefix="localhost_access_log" suffix=".txt"
            pattern="%h %l %u %t &quot;%r&quot; %s %b" />
    </Host>

注意:

建议注释掉原来的host标签或者删掉 否则启动tomcat时 有startup.bat有可能发生闪退

运行tomcat后 访 http://localhost:8081/a/index.html

如何通过访问http://zbdx:8081/a/index.html

首先继续修改host

修改成为如图 将name属性值修改一下即可

继续访问你会发现无法访问成功

这个时候需要进行域名绑定

修改C:\Windows\System32\drivers\etc\hosts文件

大部分的电脑都是这个

在最后一行添加

即可访问成功

配置Context

context的作用就是可以让tomcat运行其他目录下的项目

创建index.html页面。
index.html

html 复制代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
 <TITLE>ZBXMX </TITLE>
 <meta charset="UTF-8">
 <META NAME="Generator" CONTENT="EditPlus">
 <META NAME="Author" CONTENT="">
 <META NAME="Keywords" CONTENT="">
 <META NAME="Description" CONTENT="">
 </HEAD>
 <BODY>
    Welcome to jjy最帅 zlw最美 啊哈哈哈
 </BODY>
</HTML>

将index.html资源部署到d盘的demo目录中。

通过zbdx:8081/zbdx/index.html访问虚拟主机,并访问index.html。

在host标签里添加

xml 复制代码
<Context path="/zbdx" docBase="d:/demo"/>

然后访问http://zbdx:8081/zbdx/index.html

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

相关推荐
老马啸西风4 分钟前
NLP 中文拼写检测纠正论文 C-LLM Learn to CSC Errors Character by Character
java
Cosmoshhhyyy26 分钟前
LeetCode:3083. 字符串及其反转中是否存在同一子字符串(哈希 Java)
java·leetcode·哈希算法
AI人H哥会Java40 分钟前
【Spring】基于XML的Spring容器配置——<bean>标签与属性解析
java·开发语言·spring boot·后端·架构
开心工作室_kaic1 小时前
springboot493基于java的美食信息推荐系统的设计与实现(论文+源码)_kaic
java·开发语言·美食
缺少动力的火车1 小时前
Java前端基础—HTML
java·前端·html
loop lee1 小时前
Redis - Token & JWT 概念解析及双token实现分布式session存储实战
java·redis
ThetaarSofVenice1 小时前
能省一点是一点 - 享元模式(Flyweight Pattern)
java·设计模式·享元模式
InSighT__1 小时前
设计模式与游戏完美开发(2)
java·游戏·设计模式
神仙别闹1 小时前
基于Java2D和Java3D实现的(GUI)图形编辑系统
java·开发语言·3d