Tomcat部署Web服务器及基础功能配置

前言

Tomcat作为一款网站服务器,目前市面上Java程序使用的比较多,作为运维工人,有必要了解一款如何去运行Java环境的网站服务。

目录

一、Java相关介绍

1. Java历史

2. Java跨平台服务

3. Java实现动态网页功能

3.1 servelt

3.2 jsp

4. JDK 

4.1 JDK和JRE关系

4.2 虚拟机各种版本

4.2.1 Oracle JDK

4.2.2 OpenJDK

5. Web架构

5.1 web资源和访问

5.2 后台应用架构

二、Tomcat部署

1. 历史介绍

2. 官网地址

3. 架构

4. 部署

4.1 部署Java环境

4.2 安装Tomcat

4.2.1 基于包安装tomcat

4.2.2 二进制安装tomcat

4.3 启动Tomcat

4.4 指定用户管理Tomcat 

5. 配置文件介绍及核心组件

5.1 配置文件

5.1.1 日志文件 

5.2 组件

5.2.1 组件分层和分类

5.2.2 核心组件 

5.2.3 tomcat 处理请求过程

5.3 项目站点访问

5.4 主页文件的优先级 

6. 打包jar包实际操作


一、Java相关介绍

1. Java历史

Java语言最早是在1991年开始设计的,最初叫Oak项目,它初衷是跑在不同机顶盒设备中的。Sun公司第一个Java公开版本1.0发布于1996年。口号是"一次编写,到处运行"(Write once,Run anywhere),跨平台运行。后来被Oracle甲骨文公司收购,他有一款程序叫做java虚拟机,类似我们平时使用的VMware等虚拟机。但是也存在部分区别:

VisualBox、VMware就属于系统虚拟机,用来模拟系统。他们完全是对物理计算机的仿真。提供了一个可以运行完整操作系统的软件平台。

Java虚拟机是典型的程序虚拟机,专门为执行单个计算机程序而设计,在Java虚拟机中执行的指令我们称为Java字节码指令。无论是系统虚拟机还是程序虚拟机,在上面运行的软件都呗限制于虚拟机提供的资源中。

2. Java跨平台服务

同一个JAVA程序(JAVA字节码的集合),通过JAVA虚拟机(JVM)运行于各大主流操作系统平台比如Windows、CentOS、Ubuntu等。程序以虚拟机为中介,来实现跨平台。

图示:

由于各种操作系统ABl不一样,采用编译方式,需要为不同操作系统编译成相应格式的二进制程序才能运行。 java程序写好后,使用java的编译器,编译成字节码(二进制文件),运行在java虚拟机上,再编译成各个系统的的执行文件。  

3. Java实现动态网页功能

3.1 servelt

本质是一段java程序,用于扩展服务器功能,原理就是在java程序中嵌入html语言。其作用就是将java的动态效果和静态页面组合成一个特定的文件,即外面是java语言,里面是html语言。在Web服务器上形成一个静态页面交给Nginx传给代理端最终到达客户端。在Servlet中最大的问题是,HTML输出和java代码混在一起,如果网页布局要调整,Java源代码就需要随之进行调整,对于开发人员来说就是噩梦。

3.2 jsp

为了解决servelt弊端,衍生出了jsp技术,jsp是一种用于开发动态Web内容的Java技术。它允许开发人员在HTML页面中嵌入Java代码,从而能够生成动态内容。果网页布局需要调整,JAVA源代码不需要很大的调整。当然了,最后jsp文件还是要转换成servelt,jsp相当于提供了另外的模板。

综上:

Servlet主要用于处理HTTP请求和生成动态内容;Servlet可以直接与请求和响应对象交互,因此非常适合处理复杂的业务逻辑和动态内容生成。JSP用于创建动态Web页面,JSP页面会被转换成 Servlet,并且在用户请求时动态生成HTML内容。ervlet和JSP通常一起使用以构建完整的 Java Web 应用程序。Servlet处理后端逻辑,而JSP负责前端页面呈现,二者相辅相成,共同构建出功能强大的动态Web应用程序。

4. JDK 

4.1 JDK和JRE关系

Java Development Kit(JDK)是Java编程语言的软件开发工具包。它提供了编译、调试和运行 Java 程序所需的工具和库。JDK包括Java运行时环境(JRE),以及用于开发Java应用程序的编译器、调试器和其他工具。 JDK还包含了许多类库和支持文件。

JDK 的核心组件包括:

  • Java 编译器(javac):用于将 Java 源代码编译成 Java 字节码文件。
  • Java 运行时环境(JRE):用于执行 Java 应用程序的运行时环境。
  • 开发工具(如调试器、性能分析器等):用于开发和调试 Java 应用程序。
  • Java 类库:包括标准的 Java 类和接口,以及支持文件,可帮助开发人员构建各种类型的应用程序。

架构图示: 

4.2 虚拟机各种版本

4.2.1 Oracle JDK

安装oracle官方JDK:

官方下载链接:

#注意需要注册登录后,才能下载JDK,这里只能下载8版本的,后面版本收费
https://www.oracle.com/java/technologies/downloads/#java8

(1) Oracle JDK的rpm安装: 

① 准备rpm包,yum安装

[root@localhost data]# ls
jdk-8u291-linux-x64.rpm
[root@localhost data]# yum install jdk-8u291-linux-x64.rpm -y
已安装:jdk1.8.x86_64 2000:1.8.0_291-fcs 
[root@localhost data]# rpm -q jdk1.8.x86_64
jdk1.8-1.8.0_291-fcs.x86_64

② 查看当前系统中Java的版本信息

[root@localhost data]# java -version
openjdk version "1.8.0_402"
OpenJDK Runtime Environment (build 1.8.0_402-b06)
OpenJDK 64-Bit Server VM (build 25.402-b06, mixed mode)

③ 设置环境变量

将默认环境变量openjdk修改为oraclejdk,Oracle JDK相较于OpenJDK更加稳定。

[root@localhost data]# which java
/usr/bin/java
[root@localhost data]# ll /usr/bin/java
lrwxrwxrwx. 1 root root 22 3月   1 12:10 /usr/bin/java -> /etc/alternatives/java
#系统自带的java不是刚刚安装的java,所以需要修改环境变量[root@localhost data]# find / -name javac
/var/lib/alternatives/javac
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.402.b06-1.el7_9.x86_64/bin/javac
/usr/java/jdk1.8.0_291-amd64/bin/javac
[root@localhost data]# cd /usr/java/jdk1.8.0_291-amd64/bin/
#查看执行文件[root@localhost ~]# vim /etc/profile78 export JAVA_HOME=/usr/java/default               #指明变量,java程序目录79 export PATH=$JAVA_HOME/bin:$PATH                 #指明PATH路径变量80 export JRE_HOME=$JAVA_HOME/jre                   #指向Java运行时环境(JRE)的安装目录,非必要项81 export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/  #层级目录,非必要项[root@localhost ~]# . /etc/profile
[root@localhost ~]# java -version
java version "1.8.0_291"
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)
#后期所有安装的jdk将变成oraclejdk

(2) Oracle JDK的二进制文件安装:

二进制安装属于编译安装的一种,只是没有执行make install。

① 准备二进制包解压

[root@localhost data]# ls
jdk-8u291-linux-x64.tar.gz
[root@localhost data]# tar xf jdk-8u291-linux-x64.tar.gz -C /usr/local/

② 创建软链接,设置环境变量

[root@localhost data]# cd /usr/local/
[root@localhost local]# ls
bin  etc  games  include  jdk1.8.0_291  lib  lib64  libexec  sbin  share  src
[root@localhost local]# ln -s jdk1.8.0_291/ jdk[root@localhost local]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
export JRE_HOME=$JAVA_HOME/jre 
export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/
[root@localhost local]# . /etc/profile

③ 查看当前系统中Java的版本信息

[root@localhost local]# java -version
java version "1.8.0_291"
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)
[root@localhost local]# which java
/usr/local/jdk/bin/java
4.2.2 OpenJDK

在CentOS中,可以使用yum仓库安装openjdk:

[root@localhost ~]# yum list "*jdk*"
#查看可以安装哪些版本[root@localhost ~]# yum -y install java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel.x86_64
#安装jdk环境[root@localhost ~]# java -version
openjdk version "1.8.0_402"
OpenJDK Runtime Environment (build 1.8.0_402-b06)
OpenJDK 64-Bit Server VM (build 25.402-b06, mixed mode)
#查看版本

5. Web架构

在Tomcat的Web架构中,资源是指Web应用程序中的组件,例如HTML、CSS、JavaScript文件、图像、Servlet和JSP等。这些资源在Tomcat中存储在特定目录结构中,以供访问和处理。

5.1 web资源和访问

图示:

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

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

5.2 后台应用架构

图示:

① 单体应用架构

传统架构(单机系统)。一个项目一个工程:比如商品、订单、支付、库存、登录、注册等等,统一部署,一个进程。即所有的服务部署在一台服务器上,并且代码存放在一起,这样缺点显然很明显,一个板块完成度很慢会影响整个项目上线,同时项目完成打包成一个文件夹,这个文件夹会非常臃肿;另外,只要有一个板块故障,会影响全部架构。

  • all in one的架构方式,把所有的功能单元放在一 个应用里。然后把整个应用部署到一台服务器上。如果负载能力不行,将整个应用进行水平复制,进行扩展,然后通过负载均衡实现访问
  • Java实现: JSP、 Servlet,打包成一个jar. war部署
  • 易于开发和测试:也十分方便部署:当需要扩展时,只需要将war复制多份,然后放到多个服务器上,再做个负载均衡就可以了
  • 如果某个功能模块出问题,有可能全站不可访问,修改Bug后、某模块功能修改或升级后,需要停掉整个服务,重新整体重新打包、部署这个应用war包,功能模块相互之间耦合度高,相互影响,不适合当今互联网业务功能的快速迭代
  • 特别是对于一个大型应用,我们不可能吧所有内容都放在一个应用里面,我们如何维护、如何分工合作都是问题。如果项目庞大,管理难度大
  • web应用服务器:开源的tomcat. jetty. glassfish。 商用的有weblogic、websphere. Jboss

② 微服务与soa基本理念差不多,只是微服务更细  

SOA:拆分功能模块,比如支付、订单、库存、登录进行拆分,这样就需要四台服务器支持。最根本的是,这些模块之间的联动、数据如何交互成为了开发的难题,自然成本也将升高。所以逐渐被市场淘汰。 

Microservice:一台服务器软件系统被划分为一组小型、独立部署的服务,归功于容器技术的兴盛,给微服务带来了极大的便利。微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底去掉耦合,每一个微服务提供单个业务功能,一个服务只做一件事。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。从技术角度讲就是一种小而独立的处理过程,类似与进程的概念,能够自行单独启动或销毁;分布式系统中,不同的服务可以使用各自独立的数据库。

二、Tomcat部署

1. 历史介绍

Apache Tomcat,通常简称为Tomcat,是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,Tomcat具有处理HTML页面的功能,它还是一个Servlet和JSP容器 ,由Apache软件基金会开发和维护。Tomcat的主要功能是实现和提供Java Servlet和JavaServer Pages(JSP)的运行环境。

2. 官网地址

官网: Apache Tomcat® - Welcome!

官网文档: Apache Tomcat 8 (8.5.99) - Documentation Index

帮助文档:

Apache Tomcat Home - Apache Tomcat - Apache Software Foundation

FAQ - Apache Tomcat - Apache Software Foundation

3. 架构

4. 部署

4.1 部署Java环境

部署tomcat首先要安装jdk,环境部署在前文已经介绍,这里就不过多赘述,可以参考4.2.1 Oracle JDK,总体步骤如下:

① 解压安装包

② 创建软链接,设置环境变量

③ 测试java(java -version)

4.2 安装Tomcat

4.2.1 基于包安装tomcat
[root@localhost ~]# yum list tomca
可安装的软件包
tomcat.noarch                                       7.0.76-16.el7_9
#这里版本太老了,不建议使用yum安装
4.2.2 二进制安装tomcat

CentOS 7 的yum源的tomcat版本老旧,而CentOS8 yum源里无tomcat。目前比较主流的Tomcat是8和9版本,推荐从Apache官网下载二进制tomcat包进行安装,此为生产常用方式。

官方和镜像站点下载:

https://tomcat.apache.org/download-80.cgi
https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/

① 解压安装包

[root@localhost data]# ls
apache-tomcat-9.0.16.tar.gz  jdk-8u291-linux-x64.tar.gz
[root@localhost data]# tar xf apache-tomcat-9.0.16.tar.gz 
[root@localhost data]# ls
apache-tomcat-9.0.16  apache-tomcat-9.0.16.tar.gz  jdk-8u291-linux-x64.tar.gz
[root@localhost data]# cp -r apache-tomcat-9.0.16 /usr/local/

② 创建软链接,后期可多版本部署tomcat

[root@localhost data]# cd /usr/local/
[root@localhost local]# ln -s apache-tomcat-9.0.16/ tomcat
[root@localhost local]# ls
apache-tomcat-9.0.16  bin  etc  games  include  jdk  jdk1.8.0_291  lib  lib64  libexec  sbin  share  src  tomcat

③ 定义环境变量

[root@localhost local]# vim /etc/profile
83 export CATALINA_HOME=/usr/local/tomcat
[root@localhost local]# . /etc/profile

注意:如果已经设置了JAVA_HOME环境变量,那么在安装Tomcat时,按需设置CATALINA_HOME环境变量即可。 

4.3 启动Tomcat

① 启动tomcat

[root@localhost local]# cd tomcat/
[root@localhost tomcat]# ls
bin           conf             lib      logs    README.md      RUNNING.txt  webapps
BUILDING.txt  CONTRIBUTING.md  LICENSE  NOTICE  RELEASE-NOTES  temp         work
[root@localhost tomcat]# cd bin/
[root@localhost bin]# ls
bootstrap.jar       commons-daemon.jar            digest.sh         shutdown.sh           tool-wrapper.sh
catalina.bat        commons-daemon-native.tar.gz  makebase.bat      startup.bat           version.bat
catalina.sh         configtest.bat                makebase.sh       startup.sh            version.sh
catalina-tasks.xml  configtest.sh                 setclasspath.bat  tomcat-juli.jar
ciphers.bat         daemon.sh                     setclasspath.sh   tomcat-native.tar.gz
ciphers.sh          digest.bat                    shutdown.bat      tool-wrapper.bat[root@localhost bin]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.

② 检查端口

[root@localhost local]# ss -natp | grep java
LISTEN     0      100         :::8080                    :::*                   users:(("java",pid=2370,fd=57))
LISTEN     0      1         ::ffff:127.0.0.1:8005                    :::*                   users:(("java",pid=2370,fd=82))
LISTEN     0      100         :::8009                    :::*                   users:(("java",pid=2370,fd=62))

关于端口: 

  • 8080:默认接收http请求的端口
  • 8005:安全端口,可以关闭tomcat
  • 8009:apache和tomcat联动ajp协议

③ 访问8080

页面地址:/usr/local/tomcat/webapps/ROOT/index.jsp

注意:当目录下存在index.html,访问页面会优先识别index.html。

④ 关闭tomcat

[root@localhost bin]# pwd
/usr/local/tomcat/bin
[root@localhost bin]# bash shutdown.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

4.4 指定用户管理Tomcat 

① 新建用户

[root@localhost bin]# useradd -s /sbin/nologin tomcat
[root@localhost bin]# chown -R tomcat:tomcat /usr/local/tomcat
[root@localhost bin]# ll /usr/local/tomcat
lrwxrwxrwx. 1 tomcat tomcat 21 3月   1 14:47 /usr/local/tomcat -> apache-tomcat-9.0.16/
#修改属主属组

② 修改systemd服务的配置文件 

[root@localhost bin]# vim /usr/lib/systemd/system/tomcat.service
[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[root@localhost bin]# systemctl daemon-reload  #重新加载配置

③ 文件夹授权,启动tomcat并查看端口号

[root@localhost local]# chown tomcat:tomcat /usr/local/tomcat/ -R
[root@localhost local]# systemctl start tomcat
[root@localhost local]# ss -natp | grep tomcat
#由于tomcat运行在java虚拟机内,所以无法过滤
[root@localhost local]# ss -natp | grep 8080
LISTEN     0      100         :::8080                    :::*                   users:(("java",pid=39410,fd=54))

5. 配置文件介绍及核心组件

5.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存放项目资源的目录
workTomcat 工作目录,一般清除 Tomcat 缓存的时候会使用到(升级版本时注意要删除里面的缓存)

work工作目录结构:

[root@localhost ~]# cd /usr/local/tomcat/work/
[root@localhost work]# ls
Catalina
[root@localhost work]# tree
.
└── Catalina└── localhost├── docs├── examples├── host-manager├── manager└── ROOT└── org└── apache└── jsp├── index_jsp.class    #字节码└── index_jsp.java     #java程序

浏览器访问192.168.190.102:8080/test.jsp ,再次查看查看目录结构:

[root@localhost work]# tree
.
└── Catalina└── localhost├── docs├── examples├── host-manager├── manager└── ROOT└── org└── apache└── jsp├── index_jsp.class├── index_jsp.java├── test_jsp.class└── test_jsp.java10 directories, 4 files

由此看到jsp缓存目录多了两个文件,当java运行动态程序的时候,需要先转成class码再去执行java程序。如果执行过一次页面访问,会把所需的文件缓存在jsp这个文件夹中,从而加速二次访问。

当升级tomcat失败,如:a1版本升级到a2版本后,依然是a1,会是什么原因?

在a1版本是,每次运行会在缓存目录形成类似于a1.java和a1.class文件;如果没有清理缓存,当拿到a2升级包将其放入到webapps中,运行后依然访问原来的页面,将原来的缓存文件删除即可。当升级上线前,可以预热访问生成新的缓存文件,加入用户访问速度。最后定义覆盖原来的软链接。

conf子目录 :

文件名说明
server.xml主配置文件,全局生效。/usr/local/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.propertiesTomcat环境变量的配置,用于设定类加载器路径,以及一些与JVM调优相关参数
logging.propertiesTomcat日志系统相关的配置,可以修改日志级别和日志路径等
5.1.1 日志文件 

参考文档: https://cwiki.apache.org/confluence/display/TOMCAT/Logging

日志格式: Apache Tomcat 9 Configuration Reference (9.0.86) - The Valve Component

日志目录:

[root@localhost ~]# cd /usr/local/tomcat/logs/
[root@localhost logs]# ls
catalina.2024-03-01.log              #tomcat服务日志
host-manager.2024-03-01.log          #host manager管理日志
localhost_access_log.2024-03-01.txt  #默认主机访问日志
catalina.out                         #tomcat服务日志    
localhost.2024-03-01.log             #默认主机日志
manager.2024-03-01.log               #manager管理日志

查看访问日志格式:

[root@localhost ~]# tail /usr/local/tomcat/conf/server.xmlDocumentation at: /docs/config/valve.htmlNote: The pattern used is equivalent to using pattern="common" --><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" />   #说明: &quot;在html
中表示双引号"符号,此行可以修改日志格式</Host></Engine></Service>
</Server>

5.2 组件

Tomcat本身是由多个组件组成的。

5.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举例,在不同容器组件内分别定义。
  • 集群类组件:istener、cluster

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

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

③ 用户发送请求httpd请求过来,connector连接器(默认监听)接收到此请求, 会转交给engine (引擎)

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

⑤ 找到文件后,交给JSP生成代码, 再交给servlet生成html,原路返回反馈给用户

5.2.2 核心组件 
名称说明
serverTomcat中的Server代表整个Tomcat服务器实例。它可以包含多个Service,并负责启动和停止整个Tomcat服务器
service服务,用来组织Engine(引擎)和Connector(连接器,端口)的对应关系,一个service中只有一个Engine;Service是Tomcat中的一个抽象概念,它代表了一个具体的服务,通常对应于一个网络连接器(如HTTP)。每个Service可以包含多个Connector,用于处理不同协议或端口的连接。
connector连接器,负责客户端的HTTP、HTTPS、AJP等协议连接。一个Connector只属于某一个Engine。它负责监听特定的网络端口,并将传入的请求传递给Engine进行处理。Tomcat支持多种类型的Connector,包括基于HTTP/1.1、基于HTTP/2以及基于AJP协议的Connector。
Engine即引擎,用来响应并处理用户请求。一个Engine上可以绑定多个Connector,一个Tomcat实例通常只有一个Engine,它可以包含多个虚拟主机(Host)。
HostHost代表Tomcat中的虚拟主机,每个Host可以包含多个Web应用程序。它允许在单个Tomcat实例上托管多个域名或主机名对应的应用程序。
Context配置特定url路径映射和目录的映射关系: url => directory;Context代表了Web应用程序的上下文,它定义了一个Web应用程序的运行环境。每个Web应用程序都有自己的Context,其中包含了该应用程序的配置信息、Servlet映射、会话管理等。
5.2.3 tomcat 处理请求过程

① 接收请求:当Tomcat服务器接收到来自客户端的HTTP请求时,它会将请求传递给适当的组件进行处理。
② Web容器处理:请求首先被传递给Tomcat的Web容器。Web容器根据请求的URL确定是哪个应用程序的请求,并将其传递给该应用程序。
③ Servlet处理:如果请求是针对Servlet的,Web容器会在部署的应用程序中查找匹配的Servlet,并将请求传递给该Servlet进行处理。
④ JSP处理:如果请求是针对JSP页面的,Web容器会将其编译为Servlet,然后按照Servlet的处理方式进行处理。
⑤ 请求处理:Servlet或JSP页面处理请求并生成响应。这可能包括从数据库检索数据、执行业务逻辑等。
⑥ 响应返回:生成的响应被发送回Tomcat服务器。
⑦ 发送响应:Tomcat服务器将响应发送回给客户端,完成整个请求-响应周期。

5.3 项目站点访问

Tomcat中,"ROOT"是默认的上下文路径(context path)。当用户访问Tomcat服务器的根目录时,实际上是在访问部署在名为"ROOT"的默认Web应用程序。

疑问:新建项目文件夹,访问路径是否要发生变化?

① 默认项目ROOT新建web文件,webapps文件夹新建test目录,新建web文件,

[root@localhost ~]# cd /usr/local/tomcat/webapps/
[root@localhost webapps]# ls
docs  examples  host-manager  manager  ROOT[root@localhost webapps]# cd ROOT/
[root@localhost ROOT]# ls
asf-logo-wide.svg  bg-nav.png    index.jsp          tomcat.css  tomcat-power.gif
bg-button.png      bg-upper.png  RELEASE-NOTES.txt  tomcat.gif  tomcat.svg
bg-middle.png      favicon.ico   test.jsp           tomcat.png  WEB-INF
[root@localhost ROOT]# echo ROOT > index.html[root@localhost webapps]# mkdir test
[root@localhost webapps]# cd test/
[root@localhost test]# echo test > index.html
[root@localhost test]# ls
index.html

② 访问网页

 

③ 小结

从上面访问结果来看,ROOT是默认站点目录,可以省略。以项目为站点,webapps中每个文件夹代表一个站点,当不指明站点时,会直接去默认站点找web文件;如果指定站点目录,将去该站点目录下寻找匹配文件。

5.4 主页文件的优先级 

在Tomcat中,主页文件的优先级规定了服务器在用户访问Web应用程序时应该加载哪个文件作为默认页面。这种优先级顺序的设定有助于确保用户能够快速地找到并浏览网站的内容,同时也提供了一种灵活的方式来组织和展示Web应用程序的内容。

默认优先级:

[root@localhost ~]# vim /usr/local/tomcat/conf/web.xml
4704     <welcome-file-list>
4705         <welcome-file>index.html</welcome-file>
4706         <welcome-file>index.htm</welcome-file>
4707         <welcome-file>index.jsp</welcome-file>
4708     </welcome-file-list>

示例:自定义test项目主页文件优先级

① 复制WEB-INF至test项目中

[root@localhost ROOT]# cd
[root@localhost ~]# cd /usr/local/tomcat/webapps/ROOT/
[root@localhost ROOT]# ls
asf-logo-wide.svg  bg-nav.png    index.html         test.jsp    tomcat.png        WEB-INF
bg-button.png      bg-upper.png  index.jsp          tomcat.css  tomcat-power.gif
bg-middle.png      favicon.ico   RELEASE-NOTES.txt  tomcat.gif  tomcat.svg
[root@localhost ROOT]# cp -r WEB-INF/ /usr/local/tomcat/webapps/test/

② 编辑模板配置文件

[root@localhost WEB-INF]# vim /usr/local/tomcat/webapps/test/WEB-INF/web.xml30   <welcome-file-list>31      <welcome-file>index.jsp</welcome-file>32      <welcome-file>index.html</welcome-file>33      <welcome-file>index.htm</welcome-file>34    </welcome-file-list>

③ 新建jsp文件,修改文件夹WEB-INF属性

[root@localhost test]# ls
index.html  WEB-INF
[root@localhost test]# echo jsp > index.jsp
[root@localhost test]# chown tomcat:tomcat WEB-INF/ -R

④ 访问站点目录

6. 打包jar包实际操作

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

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

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

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

在实际生产中,我们不需要写jar包,只需要将jar包放到webapps文件夹下某一个项目内即可,并且jar包放在这里后会自动解压,自动部署项目,不需要额外操作。

示例:模拟jar包

① 模拟文件打包成jar包

[root@localhost fql]# echo jsp > test.jsp
[root@localhost fql]# echo html > test.html
[root@localhost fql]# ls
test.html  test.jsp
[root@localhost fql]# jar cvf /fql/app1.war *        ##打包
已添加清单
正在添加: test.html(输入 = 5) (输出 = 7)(压缩了 -40%)
正在添加: test.jsp(输入 = 4) (输出 = 6)(压缩了 -50%)
[root@localhost fql]# ls
app1.war  test.html  test.jsp

② 拷贝jar包至webapps文件夹

[root@localhost fql]# cd /usr/local/tomcat/webapps/
[root@localhost webapps]# ls
docs  examples  host-manager  manager  ROOT  test
[root@localhost webapps]# cp /fql/app1.war .
[root@localhost webapps]# ls
app1.war  docs  examples  host-manager  manager  ROOT  test
[root@localhost webapps]# ls
app1  app1.war  docs  examples  host-manager  manager  ROOT  test
#不需要新建项目app1,jar包自动部署

③ 查看项目站点文件

[root@localhost webapps]# ls app1
META-INF  test.html  test.jsp

④ 下线只要删除war包直接自动删除 

[root@localhost webapps]# rm -rf app1.war 
[root@localhost webapps]# ls
app1  docs  examples  host-manager  manager  ROOT  test
[root@localhost webapps]# ls
docs  examples  host-manager  manager  ROOT  test

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

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

相关文章

Revit-二开之创建TextNote-(1)

Revit二开之创建TextNote TextNode在Revit注释模块中&#xff0c;具体位置如图所示 图中是Revit2018版本 【Revit中的使用】 Revit 中的操作是点击上图中的按钮在平面视图中点击任意放置放置就行&#xff0c; 在属性中可以修改文字 代码实现 创建TextNode ExternalComm…

Web Tomcat

目录 1 前言2 Tomcat的安装3 Tomcat文件的构成4 Tomcat的使用步骤 1 前言 Tomcat是一个 http(web)的容器&#xff0c;笼统的理解一下所有的网站都叫做web。这个web容器可以把我们的前端(htmlcssjs)和后端(servlet)代码都运行起来。 Tomcat是一个免费的开源的Servlet容器&#…

Flutter中的三棵树

Widget Tree&#xff1a; 页面配置信息。 Element Tree&#xff1a; Widget tree的实例化对象&#xff0c;创建出renderObject&#xff0c;并关联到element.renderobject属性上&#xff0c;最后完成RenderObject Tree的创建。 RenderObject Tree&#xff1a;完成布局和图层绘制…

【嵌入式学习】网络编程day03.02

一、项目 1、TCP机械臂测试 #include <myhead.h> #define SER_IP "192.168.126.32" #define SER_PORT 8888 #define CER_IP "192.168.126.42" #define CER_PORT 9891 int main(int argc, const char *argv[]) {int wfd-1;//创建套接字if((wfdsocke…

《TCP/IP详解 卷一》第8章 ICMPv4 和 ICMPv6

目录 8.1 引言 8.1.1 在IPv4和IPv6中的封装 8.2 ICMP 报文 8.2.1 ICMPv4 报文 8.2.2 ICMPv6 报文 8.2.3 处理ICMP报文 8.3 ICMP差错报文 8.3.1 扩展的ICMP和多部报文 8.3.2 目的不可达和数据包太大 8.3.3 重定向 8.3.4 ICMP 超时 8.3.5 参数问题 8.4 ICMP查询/信息…

划分开始结束位置设置标记

划分开始结束位置 初始音轨如下图所示 在想开始地方单击左键&#xff0c;长按直到你想要的结束位置松开。就可以划分开始和结束位置 设置标记 方式1 &#xff1a;直接点击该图标 方式二&#xff1a;使用快捷键M 设置标记点可以自定义名称方便检索标记点

javaWebssh酒店客房管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh酒店客房管理系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0…

STL容器之string类

文章目录 STL容器之string类1、 什么是STL2、STL的六大组件3、string类3.1、string类介绍3.2、string类的常用接口说明3.2.1、string类对象的常见构造3.2.2、string类对象的容量操作3.2.3、string类对象的访问及遍历操作3.2.4、 string类对象的修改操作3.2.5、 string类非成员函…

车辆维护和燃油里程跟踪器LubeLogger

什么是 LubeLogger &#xff1f; LubeLogger 是一个自托管、开源、基于网络的车辆维护和燃油里程跟踪器。 LubeLogger 比较适合用来跟踪管理您的汽车的维修、保养、加油的历史记录&#xff0c;比用 Excel 强多了 官方提供了在线试用&#xff0c;可以使用用户名 test 和密码 123…

机器学习-4

文章目录 前言数组创建切片索引索引遍历切片编程练习 总结 前言 本篇将介绍数据处理 Numpy 库的一些基本使用技巧&#xff0c;主要内容包括 Numpy 数组的创建、切片与索引、基本运算、堆叠等等。 数组创建 在 Python 中创建数组有许多的方法&#xff0c;这里我们使用 Numpy 中…

14.最长公共前缀

题目&#xff1a;编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串""。 解题思路&#xff1a;横向扫描&#xff0c;依次遍历每个字符串&#xff0c;更新最长公共前缀。另一种方法是纵向扫描。纵向扫描时&#xff0c;从前…

基于tomcat的JavaWeb实现

Tomcat服务器 免费&#xff0c;性能一般的服务器 安装配置 基于Java&#xff0c;故需要配置环境变量&#xff0c;新加系统路径JAVA_HOME&#xff0c;路径为jdk的主目录。 而后打开bin目录下的startup.bat文件出现如下窗口说明配置成功 idea继承tomcat服务器 使用java开发…

Linux 之压缩与解压相关命令的基础用法

目录 1、zip 与 unzip 2、gzip 命令 3、tar 命令 1、zip 与 unzip 在桌面新建一个文件和文件夹用于测试 在 test 目录下有一个 1.txt 文件 我们使用 zip 命令对其压缩 用法&#xff1a; zip 自定义压缩包名 被压缩文件路径位置 zip myon.zip 1.txt 因为我们这里就是在 …

linux_day04

大纲&#xff1a;命令&#xff0c;vim&#xff0c;gcc&#xff0c;编译工具&#xff0c;生成代码&#xff0c;调试&#xff0c;库makefile&#xff0c;系统编程 文件系统&#xff1a;文件属性&#xff0c;文件内容&#xff0c;万物皆文件&#xff08;不在内存中的是文件&#…

ProtoBuf 是什么?

1. 序列化概念 序列化和反序列化 序列化&#xff1a;把对象转换为字节序列的过程称为对象的序列化。 反序列化&#xff1a;把字节序列恢复为对象的过程称为对象的反序列化。 什么情况下需要序列化 存储数据&#xff1a;当你想把的内存中的对象状态保存到⼀个⽂件中或者存到数…

怎么压缩成mp4视频?

在数字化时代&#xff0c;视频已经成为我们日常生活中不可或缺的一部分。然而&#xff0c;有时候我们可能会遇到视频文件太大的问题&#xff0c;不便于传输、存储或分享。那么&#xff0c;如何将视频压缩成MP4格式&#xff0c;以减小文件大小呢&#xff1f;本文将为您介绍几种简…

docker学习第一步:基于Linux安装docker!

要求Linux下的CentOS 7.0 以上的版本 01、安装docker版本仓库 1、设置仓库 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 2、稳定仓库 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 现在我也找了很…

医学大数据|文献阅读|有关“胃癌+机器学习”的研究记录

目录 1.基于32基因特征构建的机器学习模型可有效预测胃癌患者的预后和治疗反应 2.胃癌患者术后90天死亡率的机器学习风险预测模型 3.使用机器学习模型预测幽门螺杆菌根除患者胃癌患病风险 4.利用初始内窥镜检查和组织学结果进行个性化胃癌发病率预测 1.基于32基因特征构建的…

查看网络连接的netstat

netstat是一个监控TCP/IP网络的非常有用的工具&#xff0c;可以显示路由表、实际的网络连接&#xff0c;以及每一个网络接口设备的状态信息&#xff0c;可以让用户得知目前都有哪些网络连接正在运作。netstat用户显示与IP、TCP、UDP和ICMP协议相关的统计数据&#xff0c;一般用…

【Vue3】PostCss 适配

px 固定的单位&#xff0c;不会进行自适应。rem r root font-size16px 1rem16px&#xff0c;但是需要手动进行单位的换算vw vh 相对于视口的尺寸&#xff0c;不同于百分比&#xff08;相对于父元素的尺寸&#xff09;375屏幕 1vw 3.75px 利用插件进行 px&#xff08;设计稿&…