Tomcat

时间:2024-03-01 11:41:48

一. Tomcat 的相关知识

1.简介

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。

当在一台机器上配置好Apache 服务器,可利用它响应 HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat 是 Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行 Tomcat 时,它实际上作为一个与 Apache 独立的进程单独运行的。

当配置正确时,Apache 为 HTML 页面服务,而 Tomcat 实际上运行 JSP 页面和Servlet。另外,Tomcat 和 IIS 等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet 和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。

2. web 技术

2.1 http 协议和 B/S 结构

操作系统有进程子系统,使用多进程就可以充分利用硬件资源。进程中可以多个线程,每一个线程可以被CPU调度执行,这样就可以让程序并行的执行。这样一台主机就可以作为—个服务器为多个客户端提供计算服务。

客户端和服务端往往处在不同的物理主机上,它们分属不同的进程,这些进程间需要通信。跨主机的进程间通信需要使用网络编程。最常见的网络编程接口是socket。

Socket 称为套接字,本意是插座。也就是说网络通讯需要两端,如果一端被动的接收另一端请求并提供计算和数据的称为服务器端,另一端往往只是发起计算或数据请求,称为客户端。

这种编程模式称为 Client/Server 编程模式,简称C/S编程,开发的程序也称为C.S程序。C/S编程往往使用传输层协议(TCP/UDP),较为底层,比如: QQ,迅雷,云音乐,云盘, foxmail, xshell等。

1990年 HTTP 协议和浏览器诞生。在应用层使用文本跨网络在不同进程间传输数据,最后在浏览器中将服务器惴返回的HTML渲染出来。由此,诞生了网页开发。

网页是存储在 WEB 服务器端的文本文件,浏览器发起HTTP请求后,到达WEB服务程序后,服务程序根据 URL 读取对应的HTML文件,并封装成 HTTP 响应报文返回给浏览器端。起初网页开发主要指的是 HTML、CSS 等文件制作,目的就是显示文字或图片,通过超级链接跳转到另一个HTML并显示其内容。后来,网景公司意识到让网页动起来很重要,伴着 SUN 的 java 的名气,发布了JavaScript语言,可以在浏览器中使用5引攀执行的脚本语言,可以让网页元素动态变化。网页动起来了。

为了让网页动起来,微软使用 ActiveX 技术、SUN的 Applet 都可以在浏览器中执行代码,但都有安全性问题。能不能直接把内容直接在WEB服务器端组织成HTML,然后把HTML返回给浏览器渲染呢?

最早出现了 CGl (Common Gateway Interface)通用网关接口,通过浏览器中输入URL直接映射到一个服务器端的脚本程序执行,这个脚本可以查询数据库并返回结果给浏览器端。这种将用户请求使用程序动态生成的技术,称为动态网页技术。先后出现了 ASP、PHP、JSP 等技术,这些技术的使用不同语言编写的程序都运行在服务器端,所以称为WEB后端编程。有一部分程序员还是要编写HTML、CSS、JavaScript,这些代码运行在浏览器端,称为WEB前端编程。合起来称为Browser/Server编程,即B/S编程。

2.2 前端三大核心技术

① HTML
② css
③ JavaScript

Javascript简称 JS,是一种动态的弱类型脚本解释性语言,和HTML、CSS并称三大WEB核心技术,得到了几乎主流浏览器支持

随着chrome浏览器的V8引擎发布 ,V8JS引擎不是解释执行,而是本地编译,在V8引擎做了很多优化,JS程序在其上运行堪比本地二进制程序。V8引擎使用C++开发,可以嵌入到任何C++程序中。基于V8引擎,2009年基于服务器 javascript 的运行环境 Node.js 诞生,创建了第一版npm (Node js包管理嚣和开源库生态系统)提供了大显的库供程序员使用。从此,便可以在服务器端真正大规模使用 JavaScript 编程了。也就是说 JavaScript 也可以真正称为服务器端编程语言了,成为目前唯一的前、后端通用的语言。

④ 同步和异步

同步:

交互式网页,用户提交了请求,就是想看到查询的结果。服务器响应到来后是一个全新的页面内容,哪怕 URL 不变,整个网页都需要重新渲染。例如,用户填写注册信息,只是2次密码不一致,提交后,整个注册页面重新刷新,所有填写项目重新填写(当然有办法让用户减少重填)。这种交互非常不友好。从代价的角度看,就是为了注册的一点点信息,结果返回了整个网页内容,不但浪费了网络带宽,还需要浏览器重新渲染网页,太浪费资源了,影响了用户体验和感受。上面这些请求的过程,就是同步过程,用户发起请求,页面整个刷新,直到服务器端响应的数据到来并重新渲染。

异步:

1996年微软实现了 iframe 标签,可以在一个网页使用 iframe 标签局部异步加载内容。

1999年微软推出异步数据传输的 ActiveX 插件技术,太笨重了,但是也火了很多年。有一个组件XMLHttpRequest 被大多数浏览器支持。

传统的网页如果需要更新内容,必需重数整个网页面。Ajax的出现,改变这一切,同时极大的促进了 Javascript 的发展。Ajax即"Asynchronous Javascript AndXML”(异步JavaScript和XML),是指一种创建交互式、快速动态网页应用的网页开发技术,最早起源于1998年微软的Outook Web Access开发团队。Ajax通过在后台与服务器进行少量数据交换,可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。Javascript 通过调用浏览器内置的 WEB API 中的XMLHttpRequest对象实现Ajax技术。早期Aijax结合数据格式XML,目前更多的使用)SON。利用AAX可实现前后端开发的彻底分离,改变了传统的开发模式。

3.java 基础

3.1 web 架构

① web 资源和访问

PC端或移动端浏览器访问

从静态服务器请求 HTML、CSS、JS 等文件发送到浏览器端,浏览器端接收后渲染在浏览器上从图片服务器请求图片资源显示,从业务服务器访问动态内容,动态内容是请求后有后台服务访问数据库后得到的,最终返回到浏览器端。

手机 App访问

内置了 HTM L和 ]S 文件,不需要从静态WEB服务器下载JS或HTML。为的就是减少文件的发送,现代前端开发使用的文件太多或太大了有必要就从图片服务器请求图片,从业务服务器请求动态数据 客户需求多样,更多的内容还是需要由业务服务器提供,业务服务器往往都是由一组服务器组成。

② 后台应用架构
① 单体应用架构

传统架构 (单机系统)。一个项目一个工程:比如商品、订单、支付、库存、登录、注册等等,统一部署,一个进程。

all in one 的架构方式,把所有的功能单元放在一个应用里。然后把整个应用部署到一台服务器上。如果负载能力不行,将整个应用进行水平复制,进行扩展,然后通过负载均衡实现访问。

Java实现: JSP、 Servlet, 打包成一个jar. war部署

好处:易于开发和测试,也十分方便部署,当需要扩展时,只需要将war复制多份,然后放到多个服务器上,再做个负载均衡就可以了。

坏处:如果某个功能模块出问题,有可能全站不可访问,修改Bug后、某模块功能修改或升级后,需要停掉整个服务,重新整体重新打包、部署这个应用war包,功能模块相互之间耦合度高,相互影响,不适合当今互联网业务功能的快速迭代。特别是对于-一个大型应用,我们不可能把所有内容都放在一 个应用里面,我们如何维护、如何分工合作都是问题。如果项目庞大,管理难度大

web应用服务器:开源的 tomcat. jetty. glassfish, 商用的有weblogic、websphere. Jboss

② 微服务

微服务与soa 基本理念差不多, 只是微服务更细,属于SOA (Service Oriented Architecture)的子集面。微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底去掉耦合,每一个微服务提供单个业务功能,一个服务只做一件事。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。从技术角度讲就是一种小而独立的处理过程,类似与进程的概念,能够自行单独启动或销毁。

微服务架构(分布式系统),各个模块/服务,各自独立出来,"让专业的人干专业的事”,独立部署。分布式系统中,不同的服务可以使用各自独立的数据库。·服务之间采用轻量级的通信机制(通常是基于HTTP的RESTful API)。

微服务设计的思想改变了原有的企业研发团队组织架构。传统的研发组织架构是水平架构,前端、后端、DBA、测试分别有自己对应的团队,属于水平团队组织架构。而微服务的设计思想对团队的划分有着一定的影响,使得团队组织架构的划分更倾向于垂直架构,比如用户业务是一个团队来负责,支付业务是一个团队来负责。但实际上在企业中并不会把团队组织架构拆分得这么绝对,垂直架构只是一种理想的架构,微服务的实现框架有多种,不同的应用架构,部署方式也有不同。

③ 单体架构和微服务比较

④ 微服务的优点与缺点

优点:

  • 每个服务足够内聚,足够小,代码容易理解。这样能聚焦一个只当的业务功能或业务需求。

  • 开发简单、开发效率提高,一个服务可能就是专业的只干一件事,微服务能够被小团队单独开发,这个小团队可以是2到5人的开发人员组成。

  • 微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的。

  • 微服务能使用不同的语言开发

  • 易于和第三方集成,微服务运行容易且灵活的方式集成自动部署,通过持续集成工具,如: Jenkins、Hudson、Bamboo。微服务易于被一个开发人员理解、修改和维护,这样小团队能够更关注自己的工作成果,无需通过合作才能体现价值。微服务允许你利用融合最新技术。微服务只是业务逻辑的代码,不会和 HTML/CSS 或其他界面组件混合,即前后端分离,每个微服务都有自己的存储能力,可以有自己的数据库,也可以有统一数据库。

缺点:

  • 微服务把原有的一个项目拆分成多个独立工程,增加了开发、测试、运维、监控等的复杂度

  • 微服务架构需要保证不同服务之间的数据一致性,引入了分布式事务和异步补偿机制,为设计和开发带来一定挑战,开发人员和运维需要处理分布式系统的复杂性,需要更强的技术能力

  • 微服务适用于复杂的大系统,对于小型应用使用微服务,进行盲目的拆分只会增加其维护和开发成本

3.2 java

① 介绍

Java创始人之一的 James Gosling

② 组成

Java包含下面部分:

  • 语言、语法规范。关键字,如: if、for、class 等

  • 源代码 source code

  • 依赖库,标准库(基础)第三方库(针对某些应用)。底层代码太难使用且开发效率低,封装成现成的库

  • JVM虚拟机。将源代码编译为中间码即字节码后,再运行在JVM之上

由于各种操作系统ABl不一样,采用编译方式,需要为不同操作系统编译成相应格式的二进制程序才能运行。

3.3 java实现动态网页功能

① servlet

是Java Servlet 的简称,可以理解为是一个服务连接器,是用 Java 编写的服务器端程序,具有独立于平台和协议的特性, 简单的理解:servlet 就是一个中间件,包含了接口和方法,将客户端和数据库连接,从而实现动态网页的创建。

② jsp

用于将 JSP 动态网页翻译成 Servlet 代码。

全称 Java Server Pages,是一种动态网页开发技术。它使用 JSP 标签在HTML网页中插入 Java 代码。标签通常以 <% 开头,以 %> 结束。也是一种 Java servlet,主要用于实现 Java web 应用程序的用户界面部分。
JSP 通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

优点:架构简单,比较适合小型项目开发

缺点:JSP 职责不单一,职责过重,不便于维护

3.4 jdk

① JDK 和 JRE 关系

  • Java SE APl: Java 基础类库开发接口

  • JRE: Java Runtime Environment 缩写,指Java运行时环境,包含JVM +Java 核心类库

  • JDK: Java Development Kit,即Java语言的软件开发工具包JDK协议基于JRL(JavaResearch License)协议

② JVM 的各种版本

③ Oracle JDK 版本

JDK也就是常说的J2SE,在1999年,正式发布了Java第二代平台,发布了三个版本:

  • J2SE:标准版,适用于桌面平台

  • J2EE:企业版,java在企业级开发所有规范的总和,共有13个大的规范,Servlet、Jsp都包含在JavaEE规范中

  • J2ME:微型版,适用于移动、无线、机顶盒等设备环境

2005年,Java的版本又更名为JavaSE、JavaEE、JavaME

JDK7 JDK8、JDK11是LTS(Long Term Support)

④ OpenJDK

OpenJDK是Sun公司采用GPL v2协议发布的JDK开源版本,于2009年正式发布。

OpenJDK使用GPL v2可以用于商业用途。目前由红帽维护。OpenJDK也有在其基础上的众多发行版,比如阿里的Dragonwell。

相对来说,Oracle jDK具有更好的响应能力和JVM性能,更加稳定

在Centos 中,默认的是openjdk

3.5 安装 oracle官方 JDK

使用 rpm 包安装

修改环境变量

export JAVA_HOME=/usr/java/default
export PATH=$JAVA_HOME/bin:$PATH
#以下两项非必须项
export JRE_HOME=$JAVA_HOME/jre   
export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/

修改完之后刷新配置

使用二进制文件安装

二. Tomcat 基础功能 

1. Tomcat 介绍

Tomcat 服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,Tomcat 具有处理HTML页面的功能,它还是一个 Servlet 和 JSP 容器。

起始于 SUN 公司的一个 Servlet 的参考实现项目Java Web Senver,开发者是James Duncan Davidson,在19年,将项目贡献给了apache 软件基金会(ASF),和ASF现有的项目JServ合并,并开源成为*项目。

Tomcat 仅仅实现了Java EE 规范中与 Servlet、JSP 相关的类库,是 JavaEE 不完整实现。

2. 安装 Tomcat 

二进制安装 Tomcat 

先添加环境变量   同上

[root@localhost data]#tar xf apache-tomcat-9.0.16.tar.gz

[root@localhost data]#cp -r apache-tomcat-9.0.16 /usr/local/


[root@localhost data]#cd /usr/local/


[root@localhost local]#ln -s apache-tomcat-9.0.16/ tomcat

开启 tomcat 

访问页面:

关闭 tomcat

新建用户 tomcat  修改其属主和属组,赋予权限

[root@localhost bin]#useradd -s /sbin/nologin tomcat
#新建用户
[root@localhost local]#chown tomcat:tomcat /usr/local/tomcat/ -R
#修改属主和属组

交给systemd管理

[Unit]
Description=Tomcat
After=syslog.target network.target

[Service]
Type=forking
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
RestartSec=3
PrivateTmp=true
User=tomcat
Group=tomcat

[Install]
WantedBy=multi-user.target

为什么过滤不到 tomcat 

tomcat 是运行在Java虚拟机里面,他只能检测到java程序

打开浏览器访问: 看到这个页面

tomcat 和 catalina 关系

Tomcat 的 servlet 容器在4.X版本中被 Craig McClanahan(Apache Struts项目的创始人,也是Tomcat 的 Catalina 的架构师)重新设计为 Catalina.即 Catalina 就是 servlet 容器。
Tomcat 的核心分为3个部分: 
(1)Web容器:处理静态页面;
(2)JSP容器:把 jsp 页面翻译成一般的 servlet
(3)catalina: 是一个 servlet 容器,用于处理 servlet

3. 配置文件及核心组件

3.1 配置文件

安装目录下文件介绍:

目录名字 功能
bin 存放启动和关闭 Tomcat 的脚本文件,比较常用的是 catalina.sh;startup.sh;shutdown.sh 三个文件
conf 存放 Tomcat 服务器的各种配置文件,比较常用的是 server.xml、context.xml、tomcat-users.xml、web.xml 四个文件。
lib 存放 Tomcat 服务器的 jar 包,一般不作任何改动,除非连接第三方服务,比如 redis,那就需要添加相对应的 jar 包
logs 存放 Tomcat 日志 catalina.out  错误日志
temp 存放 Tomcat 运行时产生的文件
webapps 存放项目资源的目录
work Tomcat 工作目录,一般清除 Tomcat 缓存的时候会使用到(升级版本时注意要删除里面的缓存)

conf 子目录

文件名 说明
server.xml 主配置文件 全局生效
web.xml 每个 webapp 只有“部署"后才能被访问,它的部署方式通常由 web.xml 进行定义,其存放位置为 WEB-INF/ 目录中;此文件为所有的 webapps 提供默认部署相关的配置,每个web应用也可以使用专用配置文件,来覆盖全局文件
context.xml 用于定义所有web应用均需加载的 Context 配置,此文件为所有的 webapps 提供默认配置,每个web应用也可以使用自已专用的配置,它通常由专用的配置文件 context.xml来定义,其存放位置为WEB-INF/目录中,覆盖全局的文件
tomcat-users.xml 用户认证的账号和密码文件
catalina.policy 当使用security选项启动omcat时,用于为tomcat设置安全策略
catalina.properties Tomcat环境变量的配置,用于设定类加载器路径,以及一些与JVM调优相关参数
logging.properties Tomcat日志系统相关的配置,可以修改日志级别和日志路径等

注意配置文件对于大小写敏感 

解释:

主配置文件 server.html 在

Tomcat 子配置文件是针对项目而言的  web.xml 特有的

work 目录  一般清除 Tomcat 缓存的时候会使用到(升级版本时注意要删除里面的缓存)

故障案例:

版本升级升不上去,什么导致的?

原因:可能是因为之前缓存没有删

软件升级

如果不清缓存,他就会一直访问缓存,也就是旧版本,导致升级升不上去!

3.1.1  日志文件
[root@centos7 ~]#ls /usr/local/tomcat/logs/ 
catalina.2024-02-29.log  #tomcat服务日志
catalina.out               #tomcat错误服务日志
host-manager.2024-02-29.log   #host manager管理日志
localhost.2024-02-29.log       #默认主机日志
localhost_access_log.2024-02-29.txt  ##默认主机访问日志
manager.2024-02-29.log        #manager 管理日志

catalina.out              tomcat 错误服务日志

日志格式:

%a - Remote IP address
%A - Local IP address
%b - Bytes sent, excluding HTTP headers, or '-' if zero
%B - Bytes sent, excluding HTTP headers
%h - Remote host name (or IP address if enableLookups for the connector is 
false)
%H - Request protocol
%l - Remote logical username from identd (always returns '-')
%m - Request method (GET, POST, etc.)
%p - Local port on which this request was received. See also %{xxx}p below.
%q - Query string (prepended with a '?' if it exists)
%r - First line of the request (method and request URI)
%s - HTTP status code of the response
%S - User session ID
%t - Date and time, in Common Log Format
%u - Remote user that was authenticated (if any), else '-'
%U - Requested URL path
%v - Local server name
%D - Time taken to process the request in millis. Note: In httpd %D is 
microseconds. Behaviour will be aligned to httpd in Tomcat 10 onwards.
%T - Time taken to process the request, in seconds. Note: This value has 
millisecond resolution whereas in httpd it has second resolution. Behaviour will 
be align to httpd in Tomcat 10 onwards.
%F - Time taken to commit the response, in millis
%I - Current request thread name (can compare later with stacktraces)
%X - Connection status when response is completed:
X = Connection aborted before the response completed.
+ = Connection may be kept alive after the response is sent.
- = Connection will be closed after the response is sent.
There is also support to write information incoming or outgoing headers, cookies, 
session or request attributes and special timestamp formats. It is modeled after 
the Apache HTTP Server log configuration syntax. Each of them can be used 
multiple times with different xxx keys:
%{xxx}i write value of incoming header with name xxx
%{xxx}o write value of outgoing header with name xxx
%{xxx}c write value of cookie with name xxx
%{xxx}r write value of ServletRequest attribute with name xxx
%{xxx}s write value of HttpSession attribute with name xxx
%{xxx}p write local (server) port (xxx==local) or remote (client) port 
(xxx=remote)
%{xxx}t write timestamp at the end of the request formatted using the enhanced 
SimpleDateFormat pattern xxx

3.2 组件

3.2.1 组件分层和分类

*组件

Server,代表整个Tomcat 容器,一台主机可以启动多 tomcat 实例 ,需要确保端口不要产生冲突

服务类组件

Service,实现组织 Engine 和 Connector,建立两者之间关联关系, service 里面只能包含一个Engine

连接器组件

Connector,有 HTTP(默认端口8080/tcp)、HTTPS(默认端口8443/tcp)、AJP(默认端口8009/tcp)协议的连接器,AJP(Apache Jserv protocol)是一种基于TCP的二进制通讯协议。

容器类

Engine、Host(虚拟主机)、Context (上下文件,解决路径映射)都是容器类组件,可以嵌入其它组件,内部配置如何运行应用程序。

内嵌类

可以内嵌到其他组件内,valve、logger、realm、loader、manager等。以 logger 举例,在不同容器组件内分别定义。

集群类组件

listener、cluster

过程:

首先开启 tomcat 进程, 会有 server 产生 ,

然后产生 一个 service 管理组件,管理所有其他组件的

用户发送请求httpd 请求过来

connector 连接器(默认监听)接收到此请求, 会转交给 engine (引擎)

engine (引擎) 会处理请求, 遍历 host (虚拟主机) 会交给 客户访问的 host, 如果找不到交给默认的 host 会根据 上下文 context (上下文) 映射关系 去找相对应的文件

找到文件后, 交给 JSP 生成代码, 再交给 servlet 生成 html

原路返回 反馈给用户

解释:

名称 说明
server 服务器,Tomcat运行的进程实例,一个Server中可以有多个service,但通常就一个
service 服务,用来组织Engine(引擎)和Connector(连接器,端口)的对应关系,一个service中只有一个Engine
connector 连接器,负责客户端的HTTP、HTTPS、AJP等协议连接。一个Connector只属于某一个Engine
Engine 即引擎,用来响应并处理用户请求。一个Engine上可以绑定多个Connector
Host 即虚拟主机,可以实现多虚拟主机,例如使用不同的主机头区分
Context 应用的上下文,配置特定 url 路径映射和目录的映射关系: url => directory
3.2.2 核心组件
  • Tomcat 启动一个 Server 进程。可以启动多个 Server,即 tomcat的多实例, 但一般只启动一个

  • 创建一个Service 提供服务。可以创建多个 Service,但一般也只创建一个

    • 每个Service中,是 Engine 和其连接器 Connector 的关联配置

  • 可以为这个 Service 提供多个连接器 Connector,这些 Connector 使用了不同的协议,绑定了不同的端口。其作用就是处理来自客户端的不同的连接请求或响应

  • Service 内部还定义了 Engine,引擎才是真正的处理请求的入口,其内部定义多个虚拟主机Host

    • Engine 对请求头做了分析,将请求发送给相应的虚拟主机

    • 如果没有匹配,数据就发往Engine上的defaultHost缺省虚拟主机

    • Engine 上的缺省虚拟主机可以修改

  • Host 定义虚拟主机,虚拟主机有name名称,通过名称匹配

  • Context 定义应用程序单独的路径映射和配置

在 conf/server.xml 有以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
  <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
      </Host>
    </Engine>
  </Service>
</Server>
3.2.3 tomcat 处理请求过程
  • 假设来自客户的请求为: http://localhost:8080/test/index.jsp 浏览器端的请求被发送到服务端端口 8080,Tomcat 进程监听在此端口上。通过侦听的 HTTP/1.1Connector 获得此请求。

  • Connector 把该请求交给它所在的 Service 的Engine来处理,并等待 Engine 的响应

  • Engine 获得请求 192.168.44.50:8080/test/index.jsp,遍历它所有虚拟主机 Host

  • Engine 匹配到名为 localhost 的 Host。如果匹配不到,就把请求交给该 Engine 中的defaultHost 处理. localhost Host 获得请求 /test/index.jsp,匹配它所拥有的所有Context

  • Host匹配到路径为/test的 Context

  • path=/test的Context 获得请求 index.jsp,在它的 mapping table 中寻找对应的 servlet

  • Context 匹配到URLPATTERN为*.jsp的Sservlet,对应于 jspServlet 类构造 HtpServletRequest 对象和 HttpServletResponse 对象,作为参数调用) spSer let的doGet或doPost方法。

  • Context 把执行完了之后的 HttpServletResponse 对象返回给 Host

  • Host把HttpServletResponse对象返回给Engine

  • Engine把HttpServletResponse对象返回给Connector

  • Connector把HttpServletResponse对象返回给浏览器端

tomcat 页面访问特别之处:

但是如果你访问 192.168.44.50/index.html  事实上,他的页面在 /usr/local/tomcat/webapps/ROOT/index.html

例如:

直接访问: 默认站点去找

  得写上才能找到:

以项目为站点, ROOT为默认项目的默认站点

主页文件的优先级

如果想特定页面有优先级:

需要修改权限:

4.打包 jar 包实际操作

  • .war:WebApp打包,类zip格式文件,通常包括一个应用的所有资源,比如 jsp,html,配置文件等

  • .jar:EJB类文件的打包压缩类zip格式文件,,包括很多的class文件, 网景公司发明

  • .rar:资源适配器类打包文件,目前已不常用

  • .ear:企业级WebApp打包,目前已不常用

传统应用开发测试后,通常打包为war格式,这种文件部署到Tomcat的webapps目录下,并默认会自动

操作:

将包拷到此目录

过来之后会自动解压:

下线的话要删除 app1 和 app1.war包,否则会再次生成