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

news2024/11/16 5:37:39

前言

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

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

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

相关文章

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

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

适配器模式 详解 设计模式

适配器模式 适配器模式是一种结构型设计模式&#xff0c;其主要作用是解决两个不兼容接口之间的兼容性问题。适配器模式通过引入一个适配器来将一个类的接口转换成客户端所期望的另一个接口&#xff0c;从而让原本由于接口不匹配而无法协同工作的类能够协同工作。 结构 适配…

Python环境下一种改进的基于梯度下降的自适应短时傅里叶变换

在数字信号处理技术中&#xff0c;傅里叶变换及其逆变换是一种信号时频分析方法。该方法将信号的时域描述及频域描述联系在一起&#xff0c;时域信号可通过正变换转变为频域信号&#xff0c;频域信号可通过逆变换转变为时域信号进行分析。但傅里叶变换及其逆变换是一种信号的整…

Linux 学习笔记(8)

八、 启动引导 1 、 Linux 的启动流程 1) BIOS 自检 2) 启动 GRUB/LILO 3) 运行 Linux kernel 并检测硬件 4) 挂载根文件系统 5) 运行 Linux 系统的第一个进程 init( 其 PID 永远为 1 &#xff0c;是所有其它进程的父进程 ) 6) init 读取系统引导配置文件…

前端导出word文件的多种方式、前端导出excel文件

文章目录 纯前借助word模板端导出word文件 &#xff08;推荐&#xff09;使用模板导出 前端通过模板字符串导出word文件前端导出 excel文件&#xff0c;node-xlsx导出文件&#xff0c;行列合并 纯前借助word模板端导出word文件 &#xff08;推荐&#xff09; 先看效果&#xf…

官封弼马心何足,名注齐天意未宁

解法一&#xff1a; 设left为多&#xff0c;right为少 每次分裂满足; 所以; 定义函数num(n,k)&#xff0c;子问题为num(l,k&#xff09;和num(r,k)。 递归结束&#xff1a;不可以精确分裂 #include<iostream> #include<vector> #include<algorithm> us…

24款奔驰C260L升级原厂360全景影像 高清环绕的视野

360全景影像影像系统提升行车时的便利&#xff0c;不管是新手或是老司机都将是一个不错的配置&#xff0c;无论是在倒车&#xff0c;挪车以及拐弯转角的时候都能及时关注车辆所处的环境状况&#xff0c;避免盲区事故发生&#xff0c;提升行车出入安全性。星骏汇小许Xjh15863 3…

计算机网络——22TCP拥塞

TCP拥塞 TCP拥塞控制机制 端到端的拥塞控制机制 路由器不向主机有关拥塞的反馈信息 路由器的负担较轻符合网络核心简单的TCP/IP架构原则 端系统根据自身得到的信息&#xff0c;判断是否发生拥塞&#xff0c;从而采取动作 拥塞控制的几个问题 如何检测拥塞 轻微拥塞拥塞 控…

项目解决方案:社会视频资源接入平台解决方案

目 录 一、项目背景 二、方案简述 1、监控功能 2、视频录像 三、系统构架 四、产品功能及特点 1、实时图像点播 2. 远程控制 3. 存储和备份 4. 历史图像的检索和回放 5、报警管理 &#xff08;1&#xff09;报警配置 &#xff08;2&#xff09;报警的…

Linux中systemv共享内存

目录 1.原理 2.接口 1.shmget(share_memory_get获得共享内存) 2.ftok 3.shmat(share_memory_attaintion挂接到物理内存上) 4.key和shmid的区别 5.ipc 指令 6.shmdt函数&#xff08;share_memory_detach取消挂接&#xff09; 7.shmctl函数&#xff08;share_memory_cont…

Dell R730 2U服务器实践3:安装英伟达上代专业AI训练Nvidia P4计算卡

Dell R730是一款非常流行的服务器&#xff0c;2U的机箱可以放入两张显卡&#xff0c;这次先用一张英伟达上代专业级AI训练卡&#xff1a;P4卡做实验&#xff0c;本文记录安装过程。 简洁步骤&#xff1a; 打开机箱将P4显卡插在4号槽位关闭机箱安装驱动 详细步骤&#xff1a; 对…

Ubuntu服务器fail2ban的使用

作用&#xff1a;限制ssh远程登录&#xff0c;防止被人爆破服务器&#xff0c;封禁登录ip 使用lastb命令可查看到登录失败的用户及ip&#xff0c;无时无刻的不在爆破服务器 目录 一、安装fail2ban 二&#xff0c;配置fail2ban封禁ip的规则 1&#xff0c;进入目录并创建ssh…

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类非成员函…

在线上传解压PHP文件代码,压缩/压缩(网站一键打包)支持密码登录

在线上传解压PHP文件代码&#xff0c;压缩/压缩(网站一键打包)支持密码登录 资源宝分享&#xff1a;www.httple.net 如果你没有主机控制面板这个是最好选择&#xff0c;不需要数据库&#xff0c;上传当控制面板使用&#xff0c;无需安装任何扩展&#xff0c;安全高&#xff0c;…

算法刷题day20:二分系列

目录 引言一、借教室二、分巧克力三、管道四、技能升级五、冶炼金属六、数的范围七、最佳牛围栏 引言 这几天一直在做二分的题&#xff0c;都是上了难度的题目&#xff0c;本来以为自己的二分水平已经非常熟悉了&#xff0c;没想到还是糊涂了一两天才重新想清楚&#xff0c;想…

Redis主从复制+Redis哨兵模式+Redis群集模式

Redis主从复制Redis哨兵模式Redis群集模式一、Redis主从复制1、主从复制的作用2、主从复制过程3、搭建Redis主从复制3.1 所有节点服务器安装redis3.2 修改Redis配置文件(Master节点操作)3.3 修改Redis配置文件(Slave节点操作)3.4 验证主从效果 二、Redis哨兵模式1、哨兵模式的作…

2024最详细的接口测试用例设计教程

一、接口测试流程 1、需求讨论 2、需求评审 3、场景设计 4、数据准备 5、测试执行 二、分析接口文档元素 1、接口名称 2、接口地址 3、支持格式 4、请求方式 5、请求参数&#xff08;参数名称、类型、是否必填、参数说明等&#xff09; 6、返回参数&#xff08;返回…

博途PLC 面向对象系列之“双通气缸功能块“(SCL代码)

1、面向对象系列之找对象 https://rxxw-control.blog.csdn.net/article/details/136150027https://rxxw-control.blog.csdn.net/article/details/1361500272、博途PLC 面向对象系列之"单通气缸功能块" https://rxxw-control.blog.csdn.net/article/details/1363399…

DB-GPT:大模型 + 数据库,全流程自动化

DB-GPT&#xff1a;大模型 数据库&#xff0c;全流程自动化 提出背景DB-GPT 结构具体问题与解法背景分析对比其他工具DB-GPT系统设计 提出背景 论文&#xff1a;https://arxiv.org/pdf/2312.17449.pdf 代码&#xff1a;https://github.com/eosphoros-ai/DB-GPT 本文介绍了D…

pytorch --反向传播和优化器

1. 反向传播 计算当前张量的梯度 Tensor.backward(gradientNone, retain_graphNone, create_graphFalse, inputsNone)计算当前张量相对于图中叶子节点的梯度。 使用反向传播&#xff0c;每个节点的梯度&#xff0c;根据梯度进行参数优化&#xff0c;最后使得损失最小化 代码…