# 利刃出鞘_Tomcat 核心原理解析(七)

news2024/11/22 16:09:29

利刃出鞘_Tomcat 核心原理解析(七)

一、Tomcat专题 - Tomcat管理配置 - host-manager

1、Tomcat 管理配置

从早期的Tomcat版本开始,就提供了Web版的管理控制台,他们是两个独立的Web应用,位于webapps目录下。Tomcat 提供的管理应用有用于管理的Host的host-manager和用于管理Web应用的manager。

2、host-manager

Tomcat启动之后,可以通过 http://localhost:8080/host-manager/html 访问该Web应用。 host-manager 默认添加了访问权限控制,当打开网址时,需要输入用户名和密码(conf/tomcat-users.xml中配置) 。所以要想访问该页面,需要在conf/tomcat-users.xml 中配置,并分配对应的角色:

1) admin-gui:用于控制页面访问权限。

2) admin-script:用于控制以简单文本的形式进行访问。

…\apache-tomcat-8.5.42\conf\tomcat-users.xml 配置如下:


<?xml version="1.0" encoding="UTF-8"?>

<tomcat-users xmlns="http://tomcat.apache.org/xml"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
              version="1.0">

<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="dzs168" password="dzs168" roles="admin-script,admin-gui"/>

</tomcat-users>

3、 在 apache-tomcat-8.5.42\conf\server.xml 配置文件里配置2个虚拟主机。


<?xml version="1.0" encoding="UTF-8"?>

<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
 
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
 
  <GlobalNamingResources>
   
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>
 
  <Service name="Catalina">

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
  
    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

   <!--  默认引擎 标签的虚拟主机,配置为 www.tomcat.com  -->
   <Engine name="Catalina" defaultHost="www.tomcat.com">
    
      <Realm className="org.apache.catalina.realm.LockOutRealm">
     
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>
	  
	  <!--1个虚拟主机 -->
      <Host name="www.tomcat.com"  appBase="webapps" unpackWARs="false" autoDeploy="true">

        <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" />

      </Host>
	  
	   <!--2个虚拟主机 -->
      <Host name="oa.tomcat.com"  appBase="webapps2" unpackWARs="false" autoDeploy="true">

        <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" />

      </Host>	  
	  
    </Engine>
  </Service>
</Server>

4、修改本地 hosts 文件。C:\Windows\System32\drivers\etc\hosts


127.0.0.1   www.tomcat.com
127.0.0.1   oa.tomcat.com

5、复制 …\apache-tomcat-8.5.42\webapps\ 文件夹,更名为…\apache-tomcat-8.5.42\webapps2\

1)修改 …\apache-tomcat-8.5.42\webapps\ROOT\index.jsp 区别标识。


	<body>
        <div id="wrapper">
            <div id="navigation" class="curved container">
                <span id="nav-home"><a href="${tomcatUrl}">Home-01</a></span>
				......

2)修改 …\apache-tomcat-8.5.42\webapps2\ROOT\index.jsp 区别标识。


	<body>
        <div id="wrapper">
            <div id="navigation" class="curved container">
                <span id="nav-home"><a href="${tomcatUrl}">Home-02</a></span>
				......

6、启动 tomcat 服务(…\apache-tomcat-8.5.42\bin\startup.bat)进行测试。

1)浏览器地址栏输入:http://127.0.0.1:8080/ 正常访问。index.jsp( Home-01 页面 )

2)浏览器地址栏输入:http://www.tomcat.com:8080/ 可正常访问。index.jsp( Home-01 页面 )

3)浏览器地址栏输入:http://oa.tomcat.com:8080/ 可正常访问。index.jsp( Home-02 页面 )

4)当在 …\apache-tomcat-8.5.42\conf\tomcat-users.xml 配置下,没有设置 admin-gui 和 admin-script 时,

如下:


<?xml version="1.0" encoding="UTF-8"?>

<tomcat-users xmlns="http://tomcat.apache.org/xml"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
              version="1.0">

<!-- 
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="dzs168" password="dzs168" roles="admin-script,admin-gui"/>
-->

</tomcat-users>

5)点击 【Host Manager】,会提示输入用户名、密码,点击【取消】,弹出如下界面。

tomcat-32.png

7、当在 …\apache-tomcat-8.5.42\conf\tomcat-users.xml 配置下,设置好 admin-gui 和 admin-script ,

重新启动 tomcat 服务( …\apache-tomcat-8.5.42\bin\startup.bat )


<?xml version="1.0" encoding="UTF-8"?>

<tomcat-users xmlns="http://tomcat.apache.org/xml"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
              version="1.0">

<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="dzs168" password="dzs168" roles="admin-script,admin-gui"/>

</tomcat-users>

8、浏览器地址栏输入:http://127.0.0.1:8080/ 正常访问。index.jsp( Home-01 页面 )

点击 【Host Manager】,输入用户名:dzs168 、密码:dzs168,点击【登录】。会看到两个虚拟主机。

tomcat-33.png

tomcat-34.png

tomcat-35.png

二、Tomcat专题 - Tomcat管理配置 - manager

1、manager 的访问地址为 http://localhost:8080/manager, 同样, manager 也添加了页面访问控制,因此我们需要为登录用户分配角色为:

<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="dzs168" password="dzs168" roles="admin-script,admin-gui,manager-gui,manager-script"/>

2、在 …\apache-tomcat-8.5.42\conf\tomcat-users.xml 配置下,设置好 manager-gui 和 manager-script ,


<?xml version="1.0" encoding="UTF-8"?>

<tomcat-users xmlns="http://tomcat.apache.org/xml"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
              version="1.0">

<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<!--  <user username="dzs168" password="dzs168" roles="admin-script,admin-gui"/>  -->

<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="dzs168" password="dzs168" roles="admin-script,admin-gui,manager-gui,manager-script"/>

</tomcat-users>

3、重新启动 tomcat 服务( …\apache-tomcat-8.5.42\bin\startup.bat ),浏览器地址栏输入:http://127.0.0.1:8080/ 正常访问。index.jsp( Home-01 页面 )

点击 【Manager App】,输入用户名:dzs168 、密码:dzs168,点击【登录】。

tomcat-36.png

tomcat-37.png

4、Server Status 服务状态。

tomcat-38.png

三、Tomcat专题 - JVM配置 - 内存参数配置

1、JVM 配置

最常见的JVM配置当属内存分配,因为在绝大多数情况下,JVM默认分配的内存可能不能够满足我们的需求,特别是在生产环境,此时需要手动修改Tomcat启动时的内存参数分配。

2、 JVM 内存模型图

tomcat-39.png

3、JVM 配置选项

1)windows 平台( …\apache-tomcat-8.5.42\bin\catalina.bat ):

set JAVA_OPTS=‐server  ‐Xms2048mXmx2048mXX:MetaspaceSize=256m ‐XX:MaxMetaspaceSize=256m ‐XX:SurvivorRatio=8

2)linux 平台( …\apache-tomcat-8.5.42\bin\catalina.sh ):

JAVA_OPTS="‐server ‐Xms1024m ‐Xmx2048m ‐XX:MetaspaceSize=256m ‐XX:MaxMetaspaceSize=512m  ‐XX:SurvivorRatio=8"

4、JVM 配置选项 参数说明 :

序号参数含义
1-Xms堆内存的初始大小
2-Xmx堆内存的最大大小
3-Xmn新生代的内存大小,官方建议是整个堆得 3/8。
4-XX:MetaspaceSize元空间内存初始大小, 在JDK1.8版本之前配置为 -XX:PermSize(永久代)
8-XX:MaxMetaspaceSize元空间内存最大大小, 在JDK1.8版本之前配置为 -XX:MaxPermSize(永久代)
6-XX:InitialCodeCacheSize -XX:ReservedCodeCacheSize代码缓存区大小
7-XX:NewRatio设置新生代和老年代的相对大小比例。这种方式的优点是新生代大小会随着整个堆大小动态扩展。如 -XX:NewRatio=3 指定老年代 / 新生代为 3/1。 老年代占堆大小的 3/4,新生代占 1/4 。
8-XX:SurvivorRatio指定伊甸园区 (Eden) 与幸存区大小比例。如-XX:SurvivorRatio=10 表示伊甸园区 (Eden) 是 幸存区 To 大小的 10 倍 (也是幸存区 From的 10 倍)。 所以, 伊甸园区 (Eden) 占新生代大小的 10/12, 幸存区 From 和幸存区 To 每个占新生代的 1/12 。 注意, 两个幸存区永

5、配置之后, 重新启动Tomcat ,访问 http://localhost:8080/manager/status 查看 JVM 内存情况。

上一节关联链接请点击
# 利刃出鞘_Tomcat 核心原理解析(六)

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

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

相关文章

C语言典型例题40

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 题目 例题3.8 运输公司对用户计算运费。路程&#xff08;以s表示&#xff0c;单位为千米&#xff09;&#xff0c;吨/千米运费越低。标准如下&#xff1a; s<250 没…

C:每日一题:逆序字符串(牛客)

一、题目来源 字符逆序__牛客网 (nowcoder.com) 二、题目介绍 将一个字符串str的内容颠倒过来&#xff0c;并输出。 三、思路分析 要将字符串str存储起来&#xff0c;可以使用字符数组或者字符指针的方式存储起来&#xff1b;从题目中我们知道该题需要我们自己输入字符串&a…

C++优先级队列priority_queue(容器适配器)

目录 一、优先级队列简述 二、优先级队列的大堆、小堆&#xff08;仿函数控制&#xff09; 三、优先级队列与sort函数中仿函数区别 四、优先级队列的接口 一、优先级队列简述 priority_queue是一个类模板 二、优先级队列的大堆、小堆&#xff08;仿函数控制&#xff09; p…

LLM 量化算法AutoRound 0.3 发布及原理浅析

这里写自定义目录标题 AutoRound V0.3 特性原理浅析其他工作AutoRound 原理 AutoRound&#xff08;https://github.com/intel/auto-round&#xff09;在Llama3.1-8B-Instruct上效果明显优于AWQ/GPTQ等方法&#xff0c;在10个任务的平均准确率上我们以63.93%由于AWQ的63.15%和GP…

Qt登录窗口

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget),btn(new QPushButton("取消", this)),login_btn(new QPushButton("登录", this)) { ui->setupUi(this);thi…

R 语言学习教程,从入门到精通,R 数据重塑(15)

1、R 数据重塑 合并数据框 R 语言合并数据框使用 merge() 函数。 merge() 函数语法格式如下&#xff1a; # S3 方法 merge(x, y, …) # data.frame 的 S3 方法 merge(x, y, by intersect(names(x), names(y)),by.x by, by.y by, all FALSE, all.x all, all.y all,sort…

【JS逆向学习】AES加密文本如何在python中自我解密

一、查看解密后的内容 二、未解密前的内容 三、分析网页 import requestsheaders = {Accept: application/json, text/plain, */*,Accept-Language: zh-CN,zh;q=0.9,Cache-Control: no-cache,Connection: keep-alive,Origin: https://www.swguancha.com,Pragma: no-cache,Ref…

喷淋温湿度氙灯老化试验箱

氙灯试验箱是一种模拟全阳光光谱的试验设备&#xff0c;主要用于测试材料在紫外光、可见光和红外光等不同光谱环境下的耐候性能。它采用氙弧灯作为光源&#xff0c;通过设定各种试验参数&#xff0c;如温度、湿度和辐照度等&#xff0c;来模拟自然环境中的光照条件&#xff0c;…

使用排名前三的华为解锁工具来绕过忘记的华为锁屏密码

如果您在未使用“设置”应用的情况下将华为手机恢复出厂设置&#xff0c;同时启用了出厂重置保护 (FRP) 安全功能&#xff0c;您的华为设备将卡在帐户验证界面。您可以使用帐户凭据轻松绕过此锁定。但是&#xff0c;假设您无法回忆起旧的帐户信息。在这种情况下&#xff0c;您应…

Apache Flink中TaskManager,SubTask,TaskSlot,并行度之间的关系

Apache Flink 中Application 与 Job 一个完整的Flink Application 一般组成如下&#xff1a; Source 数据来源Transformation 数据转换处理等Sink 数据传输 Flink 中一个或者多个Operator&#xff08;算子&#xff09;组合对数据进行转换形成一个 Transformation&#xff0c;一…

优化业务流程的关键:深入探讨BPA流程设计

在当前竞争激烈的商业环境中&#xff0c;业务流程自动化&#xff08;BPA&#xff09;已经成为企业提升效率、减少成本和提高业务灵活性的关键工具。今天&#xff0c;我们将深入探讨BPA流程设计的重要性及其实施步骤&#xff0c;为企业提供实用的指南。 什么是BPA&#xff1f; …

spring揭秘00-ioc定义与ioc容器及集成工厂模式

文章目录 【README】【1】IOC概述【1.1】ioc定义【1.2】IOC三种依赖注入方式 【2】ioc服务提供者【2.1】 ioc服务提供者职责【2.2】ioc服务提供者如何管理对象间依赖关系 【3】IOC容器【3.1】BeanFactory 【4】集成工厂模式创建bean【4.1】静态工厂方法【4.2】非静态工厂方法【…

QT+CUDA 同时编译Qt和CUDA代码

工作需要把cuda的代码移植到QT中&#xff0c;和Qt项目一起编译&#xff0c;这里记录一下。 前期准备 1.安装CUDA 电脑需要安装好 CUDA&#xff0c;可以看我的这篇文章安装&#xff1a;Windows和WSL安装CUDA-CSDN博客 使用命令 nvcc --version 查看安装的 CUDA 版本。 CUDA 的默…

通过API构建开放式外卖系统平台:合作伙伴的集成与管理

随着外卖行业的迅速发展&#xff0c;外卖系统平台的开放性和可扩展性变得尤为重要。通过API构建一个开放式的外卖系统平台&#xff0c;企业可以更轻松地与合作伙伴进行集成和管理。本文将探讨如何通过API构建开放式外卖系统平台&#xff0c;并通过代码示例展示与合作伙伴的集成…

md-editor-v3适配VUE3的MarkDown编辑器-好用-简单-免费

官方文档&#xff1a; https://imzbf.github.io/md-editor-v3/zh-CN/indexhttps://imzbf.github.io/md-editor-v3/zh-CN/index 效果演示&#xff1a;&#xff08;支持黑暗模式切换&#xff09; toolbar包括&#xff1a; [bold,underline,italic,strikeThrough,title,sub,sup…

系统编程 day13 进程5

前提&#xff1a; 信息量&#xff1a;线程间有序的进行工作 资源的个数 机制&#xff1a;描述可使用资源的个数 操作&#xff1a; p操作&#xff1a;使用这个资源&#xff0c;表示资源个数减1 v操作&#xff1a;产生这个资源&#xff0c;表示资源个数加1 p操作逻辑&…

CoCoOp(论文解读):Conditional Prompt Learning for Vision-Language Models

摘要 随着预训练的视觉语言模型&#xff08;如 CLIP&#xff09;的兴起&#xff0c;研究使这些模型适应下游数据集的方法变得至关重要。最近CoOp方法将NLP领域中的提示学习引入到视觉领域中&#xff0c;来调整预训练的视觉语言模型。具体来说&#xff0c;CoOp 将提示中的上下文…

DataGridView用法合集(9):添加控件

目录 45. DataGridView列中显示选择框CheckBox 46. DataGridView中显示下拉框ComboBox 47. DataGridView单击打开下拉框 48. DataGridView中显示按钮 49. DataGridView中显示链接 50. DataGridView中显示图像 45. DataGridView列中显示选择框CheckBox [VB.NET] 添加Chec…

MySQL5.7数据库---入门教程(小白教程)

一、MySQL安装 本文以MySQL5.7安装为例。在设置完root密码和添加一个用户后&#xff0c;一路默认。 1、 2、通过点击红圈里的箭头选择对应的版本。 3、 4、端口&#xff08;Port&#xff09;一般默认不需要更改。 5、 二、配置环境变量 配置环境变量可以方便在win系统中cmd…

HarmonyOS 端云一体化 -- 项目初始化

HarmonyOS 端云一体化 – 项目初始化 端云一体化官方简介 本文档基于 api9 编写本来我想用最新版的api搞&#xff0c;但是在 AppFallery Connect 上创建项目的时候有bug&#xff0c;没没办法成功创建应用&#xff0c;无奈只能切换到 api9 版本。 1.新建项目 1.1 登录华为官…