[Linux] Tomcat

一、Tomcat相关知识

1.1 Tomcat的简介 

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

1.2 Tomcat的组件构成 

(1)Web 容器:完成 Web 服务器的功能。
(2)Servlet 容器:名字为 catalina,用于处理 Servlet 代码。
(3)JSP 容器:用于将 JSP 动态网页翻译成 Servlet 代码。 

         因此 Tomcat 是 Web 应用服务器,也是一个 Servlet/JSP 容器。Tomcat 作为 Servlet 容器,负责处理客户的.jsp动态页面的请求,把请求传送给 Servlet,并将 Servlet 的响应传送回给客户。

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

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

1.3 Tomcat的功能组件结构 

        Tomcat 的核心功能有两个,分别是负责接收和反馈外部请求的连接器 Connector,和负责处理请求的容器 Container。 其中连接器和容器相辅相成,一起构成了基本的 web 服务 Service。每个 Tomcat 服务器可以管理多个 Service。

        Service:对外提供的 Web 服务。主要包含 Connector 和 Container 两个核心组件,以及其他功能组件。Tomcat 可以管理多个 Service,且各 Service 之间相互独立。  

        Connector:负责对外接收和响应请求。它是Tomcat与外界的交通枢纽,监听端口接收外界请求,并将请求处理后传递给容器做业务处理,最后将容器处理后的结果响应给外界。


        Container:负责对内处理业务逻辑。其内部由 Engine、Host、Context和Wrapper 四个容器组成,用于管理和调用 Servlet 相关逻辑。

Container 结构分析:
每个 Service 会包含一个 Container 容器。在 Container 内部包含了 4 个子容器,4个子容器的作用分别是:

        (1)Engine:引擎,用来管理多个虚拟主机,一个 Service 最多只能有一个 Engine;
        (2)Host:代表一个虚拟主机,也可以叫站点,通过配置 Host 就可以添加站点;
        (3)Context:代表一个 Web 应用,包含多个 Servlet 封装器;
        (4)Wrapper:封装器,容器的最底层。每一 Wrapper 封装着一个 Servlet,负责对象实例的创建、执行和销毁功能。

 Engine、Host、Context 和 Wrapper这四个容器之间属于层层递进的父子关系

        容器 由一个引擎(Engine)可以管理多个虚拟主机(Host)每个虚拟主机(Host)可以管理多个 Web 应用(Context)。每个 Web 应用会有多个 Servlet 封装器(Wrapper)。 

1.4 Tomcat的请求过程 

        用户在浏览器中输入网址,请求被发送到本机端口 8080,被在那里监听的 Connector 获得;

        Connector 把该请求交给它所在的 Service 的 Engine(Container)来处理,并等待 Engine 的回应;

        请求在 Engine、Host、Context 和 Wrapper 这四个容器之间层层调用,最后在 Servlet 中执行对应的业务逻辑、数据存储等。

        执行完之后的请求响应在 Context、Host、Engine 容器之间层层返回,最后返回给 Connector,并通过 Connector 返回给客户端。 

二、Tomcat服务的部署 

本次部署准备的版本安装包(版本根据需求): jdk-8u201-linux-x64.rpm(jdk环境包,是tomcat的运行环境)        apache-tomcat-9.0.16.tar.gz(tomcat服务软件包)

步骤一:搭建Tomcat运行环境  

(1)关闭防火墙和selinux,防止其对安装过程的干扰
systemctl stop firewalld
systemctl disable --now firewalld
setenforce 0
(2)将准备好的软件包拖入/opt目录下,进行安装

(3)设置jdk的环境变量 

设置全局的环境变量,一般会有两种方式(本次部署采用第二种方式):

方式一:直接对 /etc/profile(全局变量配置文件进行改变)

方式二:在/etc/profile.d/  目录下创建相关的 .sh 脚本,profile有默认调用的功能。(推荐使用,便于变量的管理)

vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_361-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
 

拓展知识:

CLASSPATH:编译、运行Java程序时,JRE会去该变量指定的路径中搜索所需的类(.class)文件。
JDK :java development kit (java开发工具)
JRE :java runtime environment (java运行时环境)
JVM :java virtuak machine (java虚拟机),使java程序可以在多种平台上运行class文件。

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

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

#编译源代码
javac Hello.java
#运行源代码
java Hello

步骤二:安装启动tomcat 

(1)安装Tomcat
cd /opt
#解压tomcat软件包
tar zxvf apache-tomcat-8.5.16.tar.gz
 
#移动至服务软件包统一管理目录中,并且简易其名称
mv apache-tomcat-8.5.16 /usr/local/tomcat

 (2)启动Tomcat 

 注意:Tomcat服务启动时会占用8080端口

#后台启动
/usr/local/tomcat/bin/startup.sh 
或
/usr/local/tomcat/bin/catalina.sh start	
	

#前台启动
/usr/local/tomcat/bin/catalina.sh run	

 

#关闭后台运行的tomcat
/usr/local/tomcat/bin/shutdown.sh 
(3)开启tomcat服务,测试访问tomcat的默认首页 

Tomcat的主要目录说明

bin:存放启动和关闭 Tomcat 的脚本文件,如 catalina.sh、startup.sh、shutdown.sh 
conf:存放 Tomcat 服务器的各种配置文件,如主配置文件 server.xml 和 应用默认的部署描述文件 web.xml 
lib:存放 Tomcat 运行需要的库文件的 jar 包,一般不作任何改动
logs:存放 Tomcat 执行时的日志
temp:存放 Tomcat 运行时产生的文件
webapps:存放 Tomcat 默认的 Web 应用项目资源的目录
work:Tomcat 的工作目录,存放 Web 应用代码生成和编译文件

 Tomcat服务使用拓展:优化启动速度 

vim /usr/local/jdk1.8.0_361/jre/lib/security
 
--117行--修改
securerandom.source=file:/dev/urandom

原理说明:

         tomcat 启动慢的原因是随机数(产生随机数的函数 random)产生遭到阻塞,遭到阻塞的原因是 熵池大小 。


        /dev/random:阻塞型,读取它就会产生随机数据,但该数据取决于熵池噪声,当熵池空了,对/dev/random 的读操作也将会被阻塞。


        /dev/urandom:非阻塞的随机数产生器,它会重复使用熵池中的数据以产生伪随机数据。这表示对/dev/urandom的读取操作不会产生阻塞,但其输出的熵可能小于/dev/random的。它可以作为生成较低强度密码的伪随机数生成器,不建议用于生成高强度长期密码。

三、Tomcat的虚拟主机配置 

3.1 实验目的

 现在新增两个域名 www.cxk.com 和 www.xhz.com, 希望通过这两个域名访问到不同的项目内容。

3.2 实验前准备

搭建好相关的的jdk环境,并且保证tomcat的能够正常运行使用

3.3 实验步骤  

(1)创建 yang 和 wang 项目目录和文件
mkdir /usr/local/tomcat/webapps/cxk
mkdir /usr/local/tomcat/webapps/xhz
cd /usr/local/tomcat/webapps
echo "this is cxk.test web" > xhz/index.jsp
echo "this is xhz.test web" > cxk/index.jsp
    (2)修改 Tomcat 主配置文件 server.xml 
vim /usr/local/tomcat/conf/server.xml
--165行前--插入
<Host name="www.yang.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/webapps/yang" path="" reloadable="true" />
</Host>
 
<Host name="www.wang.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/webapps/wang" path="" reloadable="true" />
</Host>

虚拟主机中的配置标签说明: 

<Host>标签中的配置项作用
name主机名
appBaseTomcat程序工作目录,即存放web应用程序的目录;相对路径为webapps,绝对路径为 /usr/local/tomcat/webapps
unpackWARs在启用此webapps时是否对WAR格式的归档文件先进行展开;默认为true
autoDeploy在Tomcat处于运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy;默认为true
xmlValidation是否验证xml文件执行有效性检验的标志
xmlNamespaceAware是否启用xml命名空间,设置该值与xmlValidation为true,表示对web.xml文件执行有效性检验
<Context>标签中的配置项作用
docBase相应的Web应用程序的存放位置;也可以使用相对路径,起始路径为此Context所属Host中appBase定义的路径;
path相对于Web服务器根路径而言的URI;如果为空"",则表示为此webapp的根路径 / ;
reloadable是否允许重新加载此context相关的Web应用程序的类;默认为false

HTTP 请求过程:

  1. Connector 连接器监听的端口是 8080。由于请求的端口和监听的端口一致,连接器接受了该请求。
  2. 因为引擎的默认虚拟主机是 www.yang.com,并且虚拟主机的目录是webapps。所以请求找到了 tomcat/webapps 目录。
     
  3. 访问的路径为根路径,URI 为空,即空是 Web 程序的应用名,也就是 context。此时请求找到 /usr/local/tomcat/webapps/yang 目录,解析 index.jsp 并返回。 
(3)重启Tomcat服务  
#关闭Tomcat服务
/usr/local/tomcat/bin/shutdown.sh
#启动Tomcat服务
/usr/local/tomcat/bin/startup.sh
 (4) 进行本地域名IP映射导入 ,测试访问
echo "192.168.136.100 www.cxk.com www.xhz.com" >/etc/hosts

访问测试:

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

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

相关文章

防职业掉坑必看,电商设计主要做什么?

今年双十一刚结束&#xff0c;各电商平台不公布总销售额的新闻就上了热搜。外行人乍一看可能觉得消费意愿下降&#xff0c;消费水平降级&#xff0c;电商行业不景气&#xff0c;但实际上电商领域在国内突飞猛进了10几年后&#xff0c;仍然还有很大的上升空间。很多人说&#xf…

shiro入门demo(二)授权

在前面认证的基础上&#xff0c;认证通过后一般还有个授权的操作。授权根据业务需求有两种维度&#xff0c;基于角色的授权和基于资源的授权。 一、授权-基于角色授权&#xff1a; shiro中授权实现方式&#xff1a;有三种 1、编程式 Subject subject SecurityUtils.getSubje…

电路中的repeater是什么?

最近在看interlaken协议&#xff0c;有一个单词&#xff0c;repeater&#xff0c;不知道是什么含义&#xff0c;查了一下发现它的功能是提高数据的完整性&#xff0c;要么是修复时钟&#xff0c;要么是提高信号裕量等。总之是让信号变好的一个东西。 具体可以参见TI的说明。 【…

企业资产负债表API:获取企业资产负债表数据的重要工具

前言 在当今的数字化时代&#xff0c;信息的获取和整合对于企业的决策和规划至关重要。企业资产负债表API是一种强大的工具&#xff0c;可以帮助企业快速、准确地获取资产负债表数据&#xff0c;从而更好地分析财务状况、做出投资决策以及评估经营绩效。本文将介绍企业资产负债…

【Linux | C++ 】生产者消费者模型(Linux系统下C++ 代码模拟实现)

阅读导航 引言一、生产者消费者问题&#x1f341;将生产者消费者模型比喻为超市的顾客和供货商 二、C queue模拟阻塞队列的生产消费模型&#xff08;伪代码&#xff09;三、RAII风格的加锁方式1. 简介2. 示例 四、基于Linux操作系统使用C代码&#xff0c;采用RAII风格的加锁方式…

flutter的ListView和SingleChildScrollView有什么区别?他们的使用场景有什么不一样?

文章目录 简介ListViewSingleChildScrollView使用场景的不同 简介 ListView和SingleChildScrollView都是在Flutter中用于处理滚动内容的组件&#xff0c;但它们有一些关键的区别。 ListView 多个子元素&#xff1a; ListView是一个滚动的可滚动组件&#xff0c;通常用于包含多…

写字基本功 - 正确握笔姿势

写字基本功 - 正确握笔姿势 1. 写字基本功 郑文彬 (布衣) 先生 2. 正确握笔步骤 握笔姿势教学 http://www.bebosspen.com/index.php/correct 3. 正确握笔姿势 - 重点解说图 握笔姿势教学 http://www.bebosspen.com/index.php/correct 3.1. 食指 食指低于拇指 两段弯曲勿三…

【价值几十万的仿抖音直播电商系统源码共享】

当下&#xff0c;传统的图文电商模式已经走向没落&#xff0c;以抖音为首的直播电商模式备受用户追捧&#xff0c;它具有实时直播和强互动的特点&#xff0c;是传统电商所不具备的优势。而且&#xff0c;当前正是直播电商的红利期&#xff0c;很多主播和品牌商都通过直播电商业…

[Halcon模块] Halcon13.0查询算子模块归属

&#x1f4e2;博客主页&#xff1a;https://loewen.blog.csdn.net&#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;本文由 丶布布原创&#xff0c;首发于 CSDN&#xff0c;转载注明出处&#x1f649;&#x1f4e2;现…

【C语言 | 指针】数组参数 和 指针参数

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

IDEA利用插件完成properties与yml的互相转换(mac与wins通用)

步骤一、插件安装 点击屏幕左上方的IDEA&#xff0c;然后点击Preferences(相当于wins里的settings) 进入后点击Plugins&#xff0c;在插件商城中搜索并安装 Convert YAML and Properties File 这个插件 二、使用 右键选择你需要转换的配置文件&#xff0c;选择Convert YAML …

解决高风险代码:Mass Assignment: Insecure Binder Configuration

Abstract 用于将 HTTP 请求参数绑定到模型类的框架绑定器未显式配置为允许或禁止特定属性 Explanation 为便于开发和提高生产率&#xff0c;现代框架允许自动实例化一个对象&#xff0c;并使用名称与要绑定的类的属性相匹配的 HTTP 请求参数填充该对象。对象的自动实例化和填充…

安装Anaconda和pytorch

首先看下自己电脑是否有英伟达的显卡&#xff0c;如果有的话可以安装GPU版本&#xff0c;没有的话可以安装CPU版本。 CPU版本 1.安装Anaconda 首先去官网下载Anaconda。 点击download&#xff0c;下载的就是最新版本的。 下载完成后&#xff0c;直接运行下步就行 注意到路径…

Chrome更新

Chrome无法通过360软件管家升级&#xff0c;最方便的升级方法应该是通过Chrome本身进行升级&#xff0c;但可能需要自备梯子。 点击Chrome右上角三个点 点击帮助 点击关于Google Chrome 在弹出的页面中查看是否是最新版本&#xff0c;如果不是最新版本会有一个升级的按钮&a…

开题PPT答辩复盘

目录 总体思路加粗和红体字使用研究现状之后主要研究内容讨论 总体思路 分为五个部分&#xff0c;规定在10分钟以内讲完。这次开题答辩&#xff0c;主要是要讲清楚研究背景和意义&#xff0c;国内外研究现状。因此前两部分需要花大概6分钟重点解释&#xff0c;主要研究内容用2…

【Linux】进程周边003之进程优先级

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.基本概念 2.PRI与NI 3.利…

使用护眼台灯能不能有效预防近视?分享高品质的护眼台灯

在近几年&#xff0c;儿童青少年近视率非常高。很多家长认为孩子近视的原因是没有养成正确的用眼习惯&#xff0c;例如经常趴桌子写作业、眯眼看书等&#xff0c;但实际上这些坏习惯是因为没有合适的光线而导致的。所以安排一盏合适的台灯给孩子学习是非常重要的。 目前而言最好…

图片压缩软件4K Image Compressor Pro mac特点介绍

4K Image Compressor Pro mac是一款专业的图片压缩软件&#xff0c;它可以在不损失图像质量的前提下&#xff0c;优化图片文件的大小&#xff0c;从而节省存储空间&#xff0c;方便在社交媒体上共享图片&#xff0c;并优化网站加载速度。 4K Image Compressor Pro mac软件特点 …

29、Windows安全配置

文章目录 一、Windows安全配置简介二、账户策略2.1 密码策略2.2 账户锁定策略 三、本地策略3.1 用户权限分配 四、安全设置4.1 账户4.2 审核4.3 设备4.4交互式登录4.5 网络访问4.6 网络安全4.7 用户账户控制4.8 防火墙配置 五、高级审核策略设置5.1 账户登录5.2 账户管理5.3 对…

MDM主数据平台如何实现质量管控

当企业业务以及信息化建设发展到一定阶段后&#xff0c;都不可避免地要进行信息化和数据的治理工作&#xff0c;而主数据治理则是数据治理的基础。随着信息系统和业务的增加&#xff0c;系统打通与数据集成共享必然会成为企业信息化建设的瓶颈&#xff0c;而要实现系统集成&…