Tomcat顶层架构、服务部署、虚拟主机配置

news2024/11/24 5:20:56

Tomcat顶层架构、服务部署、虚拟主机配置

  • 一、Tomcat概述
    • 1、Tomcat介绍
    • 2、Tomcat三个核心组件
    • 3、Java Servlet
    • 4、JSP
  • 二、Tomcat顶层架构
  • 三、Tomcat请求过程
  • 四、Tomcat服务部署
    • 1、关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下
    • 2、安装JDK
    • 3、设置JDK环境变量
    • 4、安装启动Tomcat
    • 5、优化tomcat启动速度
  • 五、Tomcat 虚拟主机配置
    • 1、创建 xc 和 benet 项目目录和文件
    • 2、修改 Tomcat 主配置文件
    • 3、客户端浏览器访问验证

一、Tomcat概述

  • Tomcat 是 Java 语言开发的,Tomcat服务器是一个免费的开放的源代码的 Web 应用服务器,是Apache软件基金会的 Jakarta 项目中的一个核心项目,由 Apache、Sun 和其他一些公司及个人共同开发而成。
  • Tomcat 属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP程序的首选。
  • 一般来说,Tomcat 虽然和 Apzche或者 Nginx这些Web服务器一样,具有处理HTML页面的功能,然而由于其处理静态 HTML 的能力远不及 Apache或者 Nginx,所以 Tomcat 通常是作为一个 Servlet 和 JSP 容器,单独运行在后端。

1、Tomcat介绍

  • 免费的、开放源代码的Web应用服务器
  • Apache软件基金会(Apache Software Foundation)Jakarta项目中的一个核心项目
  • 由Apache、Sun和一些公司及个人共同开发而成
  • 深受Java爱好者的喜爱,并得到部分软件开发商的认可
  • 目前比较流行的Web应用服务器

2、Tomcat三个核心组件

  • Tomcat 由一系列的组件构成,其中核心的组件有三个
名称功能
Web 容器完成 Web 服务器的功能
Servlet 容器名字为 catalina,用于处理 Servlet 代码
JSP 容器用于将 JSP 动态网页翻译成 Servlet 代码

在这里插入图片描述

3、Java Servlet

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

4、JSP

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

二、Tomcat顶层架构

  • 1、Tomcat中最顶层的容器是Tomcat, 代表着整个服务器,一 个Tomcat可以包含至少一 个Service,用于具体提供服务。
  • 2、**Service主要包含两个部分:Connector和Container。**Tomcat的心脏就是这两个组件,这两个组件的作用: Connector用于处理连接相关的事情,并提供Socket与Request和Response相关的转化;Container用于封装和管理Servlet,以及具体处理Request请求。
  • 3、一个Tomcat中只有一个Server,一个Server可以包含多个Service,一个Service只有一个Container,但是可以有多个Connectors,因为一个服务可以有多个连接,如同时提供Http和Https链接,也可以提供向相同协议不同端口的连接。
  • 4、多个Connector 和一个Container 就形成了一个Service,有了Service 就可以对外提供服务了,但是Service还要一个生存的环境,必须要有人能够给她生命、掌握其生死大权,那就非Server 莫属了!所以整个Tomcat的生命周期由Server控制。另外,上述的包含关系或者说是父子关系,都可以在tomcat的conf目录下的server.xml配置文件(主配置文件)中看出。
  • 5、server.xml中定义
    这会让Tomcat6启动一 个server实例(即一 个JVM),它监听在8005端口以接收“SHUTDOWN"命令,如果接收到了就会关闭Tomcat。各Server的定义不能使用同一个端口,这意味着如果在同一个物理机上启动了多个Server实例,必须配置它们使用不同的端口。

在这里插入图片描述

Container容器

  • Container 用于封装和管理 Servlet,以及具体处理 Reques t请求,在 Connector 内部把喊了4个子容器。
  • 4个子容器的作用分别是:
子容器名称作用
Engine引擎,用来管理多个站点,一个Service最多只能由一个Engine
Host代表一个站点,也可以叫虚拟主机,通过配置Host就可以添加站点
Context代表一个应用程序,对应着平时开发的一套程序, 或者一个WEB-INE目录以及下面的web. xml文件
Wrapper每一Wrapper封装着一 个Servlet

三、Tomcat请求过程

1、用户在浏览器中输入该网址,请求被发送到本机端口8080,被在那里监听的CoyoteHTTP/1.1Connector获得;
2、Connector把该请求交给它所在的Service的Engine (Container) 来处理,并等待Engine的回应;
3、Engine获得请求localhost/test/ index. jsp, 匹配所有的虚拟主机Host;
4、Engine匹配到名为localhost的Host (即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机),名为localhost的Host获得请求/ test/ index. jsp, 匹配它所拥有的所有Context。Host匹配到路径为/test的Context (如果匹配不到就把该请求交给路
径名为“”的Context去处理) ; .
5、path="/test"的Context获得请求/ index. jsp, 在它的mapping table中寻找出对应的Servlet。 Context匹配到URL
Pattern为* . j sp的Servlet, 对应于JspServlet类;
6、构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet ()或doPost(),执行业务逻辑、数据存储等
7、Context把执行完之后的HttpServletResponse对象返回给Host;
8、Host把HttpServletResponse对象返回给Engine;
9、Engine把HttpServletResponse对象返回Connector;
10、Connector把HttpServletResponse对象返回给客户Browser

四、Tomcat服务部署

1、下载并安装JDK
2、安装并启动Tomcat
3、配置虚拟主机
在部署 Tomcat 之前必须安装好 jdk,因为 jdk 是 Tomcat 运行的必要环境。

1、关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

在这里插入图片描述

2、安装JDK

cd /opt
rpm -qpl jdk-8u201-linux-x64.rpm 
rpm -ivh jdk-8u201-linux-x64.rpm 
java -version

在这里插入图片描述

3、设置JDK环境变量

/etc/profile.d/  是/etc/profile/配置目录的子目录

vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64    #java的工作目录
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar   #java的运行的编译环境
export PATH=$JAVA_HOME/bin:$PATH   #

source /etc/profile.d/java.sh
java -version

在这里插入图片描述
在这里插入图片描述

CLASSPATH编译、运行Java程序时,JRE会去该变量指定的路径中搜索所需的类(.class)文件
dt.jar是关于运行环境的类库,主要是可视化的 swing 的包
tools.jar主要是一些jdk工具的类库,包括javac、java、javap(jdk自带的一个反编译工具)、javadoc等。
JDKjava development kit (java开发工具)
JREjava runtime environment (java运行时环境)
JVMjava virtuak machine (java虚拟机),使java程序可以在多种平台上运行class文件。
首先使用文本工具编写java源代码,比如 Hello.java ;
在命令行中,输入命令:javac Hello.java,对源代码进行编译,生成 class 字节码文件;
编译完成后,如果没有报错信息,输入命令:java Hello,运行 class 字节码文件,由 JVM 对字节码进行解释和运行,打印 “Hello World”。

vim Hello.java
#类名、接口名命令:英文大小写字母、数字字符、$和_,不能使用关键字和数字开头;
一个单词命名时第一个单词的首字母要大写;多单词组成时,所有单词的首字母大写:XxxYyyZzz(大驼峰命名法)
public class Hello {
        public static void main(String[] args){
                System.out.println("Hello world!!!");
        }
}

javac Hello.java
java Hello

在这里插入图片描述
在这里插入图片描述

4、安装启动Tomcat

cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
##启动tomcat ##
#后台启动
/usr/local/tomcat/bin/startup.sh 
或
/usr/local/tomcat/bin/catalina.sh start	
	
#前台启动
/usr/local/tomcat/bin/catalina.sh run		

netstat -natp | grep 8080
浏览器访问Tomcat的默认主页 http://192.168.92.11:8080

在这里插入图片描述
在这里插入图片描述

5、优化tomcat启动速度

第一次启动tomcat可能会发现 Tomcat 启动很慢,默认情况下可能会需要几十秒,可以修改jdk参数进行改。
vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security
--117行--修改
securerandom.source=file:/dev/urandom

-------------说明-------------
/dev/urandom是/dev/random的非阻塞版本,即当熵池中没有可取的随机数时,读取/dev/urandom设备仍然会返回一个随机数,只是该随机数的安全性理论上不高。如果应用对安全性要求很高,那么应该使用/dev/random。


/usr/local/tomcat/bin/shutdown.sh 
/usr/local/tomcat/bin/startup.sh 

ll /usr/local/tomcat/

在这里插入图片描述

主要目录说明

目录说明
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 日志
temp存放 Tomcat 运行时产生的文件
webapps存放项目资源的目录
workTomcat 工作目录,一般清除 Tomcat 缓存的时候会使用到

五、Tomcat 虚拟主机配置

  • 很多时候公司会有多个项目需要运行,那么肯定不可能是一台服务器上运行多个Tomcat服务,这样会消耗太多的系统资源。此时,就需要使用到 Tomcat 虚拟主机。例如现在新增两个域名 www.lic.com 和 www.accp.com,希望通过这两个域名访问到不同的项目内容。

1、创建 xc 和 benet 项目目录和文件

mkdir /usr/local/tomcat/webapps/xc
mkdir /usr/local/tomcat/webapps/benet
echo "This is xc page\!" > /usr/local/tomcat/webapps/xc/index.jsp
echo "This is benet page\!" > /usr/local/tomcat/webapps/benet/index.jsp

在这里插入图片描述

2、修改 Tomcat 主配置文件

vim /usr/local/tomcat/conf/server.xml
--165行前--插入
<Host name="www.xc.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/webapps/xc" path="" reloadable="true" />
</Host>

<Host name="www.benet.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/webapps/benet" path="" reloadable="true" />
</Host>

/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh

在这里插入图片描述
在这里插入图片描述

Host name主机名
appBaseTomcat程序工作目录,相对路径为webapps,绝对路径为/usr/local/tomcat/webapps
unpackWARs是否解压war包
autoDeploy指示Tomcat运行时,如有新的WEB应用是否允许自动部署
xmlValidation是否验证xml文件执行有效性检验的标志
xmlNamespaceAware是否启用xml命名空间,设置该值与xmlValidation为true,表示对web.xml文件执行有效性检验
docBaseWEB应用的目录
path设置访问的URI为WEB应用的根目录
reloadable是否在程序有改动时重新载入

3、客户端浏览器访问验证

echo "192.168.92.11 www.xc.com www.benet.com" >> /etc/hosts

浏览器访问 http://www.xc.com:8080   页面显示this is xc test web\! 
浏览器访问 http://www.benet.com:8080   页面显示this is benet test web\! 

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

Java中导出Excel步骤总结(案例学习)

【辰兮要努力】&#xff1a;hello你好我是辰兮&#xff0c;很高兴你能来阅读&#xff0c;昵称是希望自己能不断精进&#xff0c;向着优秀程序员前行&#xff01; 博客来源于项目以及编程中遇到的问题总结&#xff0c;偶尔会有读书分享&#xff0c;我会陆续更新Java前端、后台、…

怎么把伴奏提取出来?分享两个方法给大家~

对于音乐制作人和音乐爱好者而言&#xff0c;创作个人音乐作品是一项令人兴奋的体验。然而&#xff0c;有时我们希望使用一首现有歌曲的伴奏来创作自己的音乐作品&#xff0c;但却无法找到原版伴奏。为了解决这一难题&#xff0c;现在可以使用记灵在线工具来提取音频伴奏。本文…

瞬息全宇宙:苹果发布虚拟现实头显Vision Pro

WWDC23巅峰时刻 熬夜看了WWDC苹果发布会&#xff0c;传闻了N年的苹果MR&#xff08;增强现实&#xff09;产品&#xff0c;终于来了。 One More Thing&#xff0c;库克说出了这句话&#xff0c;巅峰时刻终于到来&#xff01; 新的交互 名字叫Vision Pro&#xff0c;虽然这名…

《计算机网络——自顶向下方法》精炼——4.1-4.3.0

书读得越多而不假思索&#xff0c;你就会觉得你知道的很多&#xff1b;而当你读书而思考的越多的时候&#xff0c;你就会越清楚的看到&#xff0c;你知道的还很少——伏尔泰 文章目录 概述转发、路由选择网络服务模型 虚电路和数据报网络虚电路网络数据报网络 路由器工作原理 概…

chatgpt赋能python:Python如何出图

Python如何出图 作为一种广泛使用的编程语言&#xff0c;Python不仅仅可以用于数据分析、机器学习等领域&#xff0c;还可以用来生成图像。在这篇文章中&#xff0c;我们将介绍Python如何出图&#xff0c;并将重点放在与SEO相关的方面。 1. Python出图的基本原理 Python有多…

刷题记录:哈希 | leetcode-2352. 相等行列对 2023/6/6

2352. 相等行列对 这题还是非常简单的。如果用模拟的方法&#xff0c;时间复杂度要达到O(n^3)了&#xff0c;感觉不太可。 这回学聪明了&#xff0c;没有一上来就想着暴力模拟。用哈希的办法&#xff0c;可以把时间复杂度降为O(n^2)。 我的思路是先转置矩阵&#xff0c;再用…

Matlab论文插图绘制模板第99期—正负柱状图

在之前的文章中&#xff0c;分享了很多Matlab柱状图的绘制模板&#xff1a; 进一步&#xff0c;再来分享一种特殊的柱状图&#xff1a;正负柱状图。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&#xff0c;加群的朋友请自行下载…

HTML+JS 实现手机号码归属地查询功能

手机号码归属地 API 是一种提供号码归属地信息的接口&#xff0c;它通过与运营商和电信数据库交互&#xff0c;根据手机号码查询相关归属地信息并返回结果。通过使用手机号码归属地API&#xff0c;开发者可以轻松地集成号码归属地查询功能到他们的应用程序和服务中&#xff0c;…

简介- 谷粒商城项目微服务架构图

目录 项目前置知识一、前后端分离开发&#xff0c;分为 内网部署 和 外网部署。二、用户是通过使用 客户端 来完成各种的功能三、网关的作用四、Sentiel组件五、Feign组件六、OAuth2.0认证中心七、SpringSecurity组件八、关于数据存储的解决方案九、定位bug十、注册中心十一、配…

Java 进阶 -- Lambda 表达式

Lambda Expressions 匿名类&#xff08;anonymous classes&#xff09;的一个问题是&#xff0c;如果匿名类的实现非常简单&#xff0c;比如一个只包含一个方法的接口&#xff0c;那么匿名类的语法可能会显得笨拙和不清晰。在这些情况下&#xff0c;您通常试图将功能作为参数传…

Spark RDD计算总分与平均分

文章目录 一&#xff0c;提出任务二&#xff0c;实现思路三&#xff0c;准备工作1、启动HDFS服务2、启动Spark服务3、在本地创建成绩文件4、将成绩文件上传到HDFS 四&#xff0c;完成任务1、在Spark Shell里完成任务&#xff08;1&#xff09;读取成绩文件&#xff0c;生成RDD&…

从Java BIO到NIO再到多路复用,看这篇就够了

从一次优化说起 近期优化了一个老的网关系统&#xff0c;在dubbo调用接口rt1000ms时吞吐量提升了25倍&#xff0c;而线程数却由64改到8。其他的优化手段不做展开&#xff0c;比较有意思的是为什么线程数减少&#xff0c;吞吐量却可以大幅提升&#xff1f;这就得从IO模型说起&a…

消息队列kafka使用技巧和常见问题

目录 【消息队列概述】 【kafka】 消息丢失问题 消息重复问题 消费顺序问题 消息积压问题 kafka集群部署 【消息队列概述】 消息队列主要解决应用耦合、异步消息、流量削锋等问题&#xff0c;是大型分布式系统不可缺少的中间件。消息生产者 只管把消息发布到 MQ 中而不…

【CMake 入门与进阶(4)】 CMakeLists.txt 语法规则基础及部分常用指令-续(附使用代码)

由于篇幅问题本篇接着上文继续介绍 CMakeLists.txt 语法规则基础及常用指令。 aux_source_directory aux_source_directory 命令会查找目录中的所有源文件&#xff0c;其命令定义如下&#xff1a; aux_source_directory(<dir> <variable>)从指定的目录中查找所有…

开发者工具调试

Console控制台 F12打开控制台 选择其他tab面板时&#xff0c;ESC打开Console面板enter直接执行Console的代码&#xff0c;shiftEnter输入多行代码 Source面板 左键单机行号设置断点&#xff0c;或在代码中添加debugger;右键单机行号设置条件断点&#xff08;条件表达式为tr…

PowerShell install 一键部署mariadb10.11

mariadb MariaDB数据库管理系统是MySQL的一个分支&#xff0c;主要由开源社区在维护&#xff0c;采用GPL授权许可 MariaDB的目的是完全兼容MySQL&#xff0c;包括API和命令行&#xff0c;使之能轻松成为MySQL的代替品。在存储引擎方面&#xff0c;使用XtraDB来代替MySQL的Inno…

ChatGPT 国内镜像网站大全(含GPT-4.0版本)之什么年代还在写传统文章。

前言&#xff1a; 临近期末&#xff0c;大量水课的节课作业都是论文&#xff0c;一篇就是几千字&#xff0c;这对于还要复习专业课的我们可以说是压力巨大&#xff1a;心理健康论文&#xff0c;安全教育论文&#xff0c;大学语文论文&#xff0c;书法赏析论文&#xff0c;劳动…

小议C++函数签名与模板返回类型

题记&#xff1a;什么事情都要追问一个为什么&#xff0c;真正理解了为什么&#xff0c;才能活学活用。 代码1 下面的代码能编译通过吗&#xff1f; #include <stdio.h> #include <stdlib.h>class X { public:int *get() { return new int(); }double *get() { r…

MATLAB矩阵的分解函数与案例举例

系列文章目录 MATLAB当中线性方程组、不定方程组、奇异方程组、超定方程组的介绍 MATLAB语句实现方阵性质的验证 MATLAB绘图函数的相关介绍——海底测量、二维与三维图形绘制​​​​​​ MATLAB求函数极限的简单介绍 文章目录 前言 1. 奇异值分解&#xff08;SVD&#x…

C++类和对象-4

在上篇C类和对象的博客中&#xff0c;我们讲述了析构函数、拷贝构造函数、浅拷贝和深拷贝的内容&#xff0c;我们紧接上文&#xff0c;开始讲述接下来的文章。 目录 1.this指针 1.1引入 1.2内容 1.3特征 1.4用法 2.静态成员 2.1内容 2.2静态数据成员 2.3静态成员函数…