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/profile
 78 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.java

10 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.xml
             Documentation at: /docs/config/valve.html
             Note: 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.xml
 30   <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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【排序算法】基数排序

一&#xff1a;基本概念 1.1 基数排序(桶排序)介绍 基数排序&#xff08;radix sort&#xff09;属于“分配式排序”&#xff08;distribution sort&#xff09;&#xff0c;又称“桶子法”&#xff08;bucket sort&#xff09;或bin sort&#xff0c;顾名思义&#xff0c;它是…

2024最新ChatGPT网站源码AI绘画系统:SparkAI系统(Ai智能问答系统和Midjourney绘画系统)

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持GPT…

2.模拟问题——2.使用二维数组输出图形

用二维数组描述图形 首先要计算出整个输出的方框大小&#xff0c;从而判定相应关键循环点 #include <cstdio> char arr[1000][3000]; int main() {int h;//初始化&#xff0c;全部内部填空格while(scanf("%d",&h) ! EOF){for (int i 0; i < h; i) {f…

【JavaEE】_Spring MVC项目之建立连接

目录 1. Spring MVC程序编写流程 2. 建立连接 2.1 RequestMapping注解介绍 2.2 RequestMapping注解使用 2.2.1 仅修饰方法 2.2.2 修饰类与方法 2.3 关于POST请求与GET请求 2.3.1 GET请求 2.3.2 POST请求 2.3.3 限制请求方法 1. Spring MVC程序编写流程 1. 建立连接&…

vmware虚拟机centos中/dev/cl_server8/root 空间不够

在使用vmware时发现自己的虚拟机的/dev/cl_server8/root空间不够了&#xff0c;没办法安装新的服务。所以查了一下改空间的办法。 1.在虚拟机关闭的状态下&#xff0c;选中需要扩容的虚拟机->设置->硬件-> 硬盘->扩展->填写扩大到的值。 2.打开虚拟机&#xff…

力扣SQL50 寻找用户推荐人 查询

Problem: 584. 寻找用户推荐人 思路 null不可以直接与数值类比较 Code select name from Customer where ifnull(referee_id,0) ! 2;

Day08-【Java SE进阶】面向对象高级二——多态、final、抽象类、接口

一、多态 对象多态多态是在继承/实现情况下的一种现象&#xff0c;表现为对象多态和行为多态。 对象多态&#xff1a;一个人可以是学生也可以是老师&#xff0c;学生和老师都是人的子类&#xff0c;创建人对象让其指向不同的对象&#xff0c;称为对象多态&#xff0c;这里是向…

【办公类-25-01】20240304 UIBOT上传 ”班级主页-主题知识“

作品展示&#xff1a; 一、背景需求&#xff1a; 本学期制作了 “信息窗主题说明”合并A4内容 【办公类-22-07】周计划系列&#xff08;3-1&#xff09;“信息窗主题知识&#xff08;提取&#xff09;” &#xff08;2024年调整版本&#xff09;-CSDN博客文章浏览阅读797次&a…

深度学习 精选笔记(9)分布偏移

学习参考&#xff1a; 动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、请联系侵删。 ②已写完的笔记文章会不定时一直修订修改(删、改、增)&#xff0c;以达到集多方教程的精华于一文的目的。 ③非常推荐上面&#xff08;学习参考&#x…

在学习云原生的时候,一直会报错ImagePullBackOff Back-off pulling image

在学习云原生的时候&#xff0c;一直会报错 &#xff08;见最后几张图&#xff09; ImagePullBackOff Back-off pulling image 然后我就在像。这个配置的镜像是不是可以自己直接下载&#xff0c;但是好像不怎么搜索得到 然后就在想&#xff0c;这个lfy_k8s_images到底是个啥玩…

c++面试一

1.#include使用 在C/C中&#xff0c;#include 预处理指令用于包含头文件&#xff0c;这些头文件通常包含了函数声明、宏定义以及其他的声明和定义。#include 指令后面跟着的文件名可以使用双引号 "" 或尖括号 <> 来指定&#xff0c;它们之间有一些区别。 双引…

MyBatis概述

三层架构 表现层&#xff1a;直接和前端交互&#xff0c;接受AJAX请求&#xff0c;返回json数据业务层&#xff1a;一是处理前端的请求&#xff0c;二是返回持久层获取的数据持久层(数据访问层)&#xff1a;直接操作数据库&#xff0c;完成CRUD&#xff0c;返回数据给业务层 …

Tomcat服务部署、优化

一 Tomcat的基本介绍 Tomcat概念 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试 JSP 程序的首选。 当在一台机器上配置好Apache 服务器…

宋Pro 荣耀版10.98万元起,开启“清场”模式!

2024年3月1日&#xff0c;比亚迪荣耀全家桶再添大将&#xff0c;万众期待的宋Pro DM-i荣耀版以10.98万元起的价格震撼推出。新车共推出5款车型&#xff0c;官方指导价10.98万元——13.98万元&#xff0c;重新锚定A级SUV市场新价值&#xff0c;在该细分市场正式拉开“电比油低”…

鼠标失灵怎么办?电脑出现鼠标失灵的详细处理方法介绍

无论是笔记本电脑还是台式机电脑&#xff0c;鼠标是必不可少的外设之一&#xff0c;而我们在使用电脑的过程中&#xff0c;经常回遇到鼠标突然失灵了&#xff0c;不听使唤&#xff0c;控制不了&#xff0c;接下小编来与大家一起分享&#xff0c;遇到这种情况我们该怎么办 有时…

iconv 更改字符串编码操作

概要 在日常开发中&#xff0c;中文字符乱码是一个经常遇到的问题。在解决此问题时&#xff0c;遇到一个比较好用的字符串编码开源库&#xff0c;在此进行总结。 整体思路流程 iconv官网地址&#xff1a;http://www.gnu.org/software/libiconv/ 这里主要使用的相关接口&…

SpringBoot整合Redis及其持久化机制(二)

SpringBoot整合Redis及其持久化机制 1、Redis全局命令1.2、Redis事务 2、Redis持久化2.1、RDB方式2.1.1、客户端触发机制2.1.2、服务端触发机制2.2.3、配置生成快照名称和位置2.2.4、优点2.2.5、缺点 2.2、AOF方式2.2.1、优点2.2.2、缺点 2.3、RDB-AOF混合方式2.4、持久化机制的…

黑马JavaWeb课程中安装vue脚手架出现的问题

1 安装node.js 要想前端工程化&#xff0c;必须安装node.js&#xff0c;前端工程化的环境。 在成功安装node.js后&#xff0c; 修改全局包安装路径为Node.js安装目录&#xff0c; 修改npm镜像源为淘宝镜像源&#xff0c;这里出现第一个问题&#xff0c;视频中给的淘宝镜像为&…

element-plus表格合并

要实现这样的表格&#xff0c; 怎么做呢&#xff1f; 甚至是这种三级的呢&#xff1f; 官网的案例也是通过这个方法进行配置的&#xff0c;也就是说表格长什么样&#xff0c;关键在怎么处理的方法上。 这是官网的方法&#xff0c;可参考拓展&#xff1a; const arraySpanMeth…

sqllibs-第46关

从本关开始&#xff0c;我们开始学习order by 相关注入的知识。 尝试?sort1 desc或者asc&#xff0c;显示结果不同&#xff0c;则表明可以注入。&#xff08;升序or降序排列 sort1时是第一列Id sort2时是第二列 username sort3时是第三列 password 当sort4时报错 相当于使用or…