tomcat勾连mysql_tomcat9.0启动脚本startup.bat的分析

1、 Apache Tomcat的下载和安装

从Apache官网https://tomcat.apache.org/可以下载各种版本的tomcat软件,下载的文件格式可以是zip/tar.gz/exe形式的。

如下图所示,在64位windows中使用tomcat,我们可以下载"64-bit Windows.zip",直接解压缩就可以使用;或者下载"32-bit/64-bit Windows Service Installer",通过exe安装tomcat后使用。

b27d179f9dd00ea371ac079367467c1d.png

2、 tomcat的bin目录

无论哪种形式获得的tomcat服务器软件,在tomcat的主目录下都有一个bin目录,该bin目录中存在tomcat服务器启动、停止和运行所必须的批处理/SHELL脚本、exe可执行程序和一些jar包。

本文只介绍其中的startup.bat脚本程序,该脚本程序通过调用其他脚本用于启动tomcat服务器。

4a36db28064ac08ad7d1f7f830200f78.png

3、 startup.bat脚本的主要功能

该脚本功能很简单,主要实现两方面的功能:找到catalina.bat脚本,该脚本用于实际启动tomcat服务器;组织参数传递给catalina.bat,调用call该脚本执行。

4、 startup.bat脚本详细执行过程

下面文字删掉了startup.bat脚本文件的英文注释,只保留了脚本中可以实际执行的语句,分析了每一条语句的功能。

另,分析的文字放在了rem注释中。rem注释中多数为汉字,操作系统解释该脚本时有时会和后续行的指令发生勾连,造成脚本执行报错。故,每个rem注释语句的最后添加了一个英文形式的点号,这样脚本能正常执行。

另,下面的脚本在tomcat9.0的startup.bat基础上做了些许修改,确保该脚本不仅仅可以完成tomcat的启动操作,其他如stop操作等都可以正常执行。

------ startup.bat ----

@echo off

rem @echo off从本条命令开始关闭回显,如果是echo off则是从下条命令开始关闭回显.

rem 关闭回显是执行bat文件时,在cmd窗口看不到bat执行的命令,但可以看到输出结果.

rem 打开回显,则执行的命令和输出在cmd窗口都能看到.

rem bat脚本一般第一条指令就是这条.

setlocal

rem 设置局部于setlocal和endlocal之间的变量,没有endlocal就直接到bat文件结尾处.

set "CURRENT_DIR=%cd%"

rem %cd%:脚本执行的当前目录,这里的当前目录有可能和脚本实际所在目录不一致.

rem %~dp0%:脚本文件所在目录,注意,目录的路径为全路径,并且带结尾的\,前者不带\.

rem 上面set语句将脚本执行的当前目录名赋给局部变量CURRENT_DIR.

rem 如果CATALINA_HOME的内容不是空,即变量已经设置好了,则直接跳转,不用再赋值了.

if not "%CATALINA_HOME%" == "" goto gotHome

rem 否则取出变量CURRENT_DIR的值赋给CATALINA_HOME这个环境变量.

set "CATALINA_HOME=%CURRENT_DIR%"

rem 若CATALINA_HOME下面的bin目录下存在catalina.bat文件,则直接跳转,不用再赋值.

if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome

rem 否则向前退一级目录后将目录名赋给CATALINA_HOME,并转到该目录下.

cd ..

set "CATALINA_HOME=%cd%"

cd "%CURRENT_DIR%"

:gotHome

rem 如果找到了catalina.bat,则转到后面执行该批处理文件.

if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome

rem 否则找不到catalina.bat文件,在cmd窗口回显下面的提示,跳转到end,结束脚本执行.

echo The CATALINA_HOME environment variable is not defined correctly

echo This environment variable is needed to run this program

goto end

:okHome

rem 将catalina.bat的全路径名赋给变量EXECUTABLE

set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"

rem 如果EXECUTABLE中的全路径名存在,则转到执行程序的位置执行启动程序.

if exist "%EXECUTABLE%" goto okExec

rem 否则如果全路径名不存在,提示不能执行启动程序,跳转到最后end结束脚本执行.

echo Cannot find "%EXECUTABLE%"

echo This file is needed to run this program

goto end

:okExec

rem 设置startup.bat的命令行参数,初始化参数为空.

set CMD_LINE_ARGS=

:setArgs

rem 将startup.bat文件的命令行参数存储在CM_LINE_ARGS中.

rem 如果第一个位置的命令行参数为空,则结束拼装命令行参数.

if ""%1""=="""" goto doneSetArgs

rem 将第一个参数并入命令行参数变量中.

set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1

rem 命令行参数中参数左移一位,即将第二个参数移到第一个参数的位置.

rem 第三个参数移到第二个参数的位置等等.

shift

rem 跳转到:setArgs处,完成当前参数拼装,当参数为空时跳出setArgs循环.

goto setArgs

:doneSetArgs

rem 执行该startup.bat文件可以有如下的一些参数.

rem C>startup.bat

rem C>startup.bat start

rem C>startup.bat stop

rem C>startup.bat debug

rem C>startup.bat start -security

rem C>startup.bat run

rem C>startup.bat run -security

rem 只运行了startup.bat文件,没有指定命令行参数,默认就当成启动操作.

rem 拼装start参数给批处理程序.

if "%CMD_LINE_ARGS%" == "" set CMD_LINE_ARGS=start

echo 调用catalina.bat的命令:%EXECUTABLE% %CMD_LINE_ARGS%

rem 调用catalina.bat批处理脚本文件

call "%EXECUTABLE%" %CMD_LINE_ARGS%

:end

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

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

相关文章

安卓能硬改的手机机型_【每日新闻】小米11部分镜头参数爆料;华为重新采购手机零部件 重启4G手机生产...

数据铸造影响力关注每日行业热点资讯,掌握业界动态趋势,以下是今天的精彩内容:1、小米11部分镜头参数爆料:超大底50MP主摄,长焦达12MP或48MP2、华为重新采购手机零部件 重启4G手机生产1、小米11部分镜头参数爆料&#…

kafka集群为什么需要三个节点_大白话带你认识 Kafka

前言应大部分的小伙伴的要求,在Yarn之前先来一个kafka的小插曲,轻松愉快。一、Kafka基础消息系统的作用应该大部份小伙伴都清楚,用机油装箱举个例子所以消息系统就是如上图我们所说的仓库,能在中间过程作为缓存,并且实…

mysql对日期的操作_MySql对日期的操作

1、计算俩个日期之间所差的天数select datediff(2018-09-18,2018-09-01)2、计算日期是这周的星期几select dayofweek(2018-09-18)1.因为外国一般都是把星期天认为是一周的开始,所以用这种方法一般都得减去一天才是这周的星期几select date_format(2018-09-17,"…

sql移动加权计算利润_计算机视觉中的半监督学习

作者:Amit Chaudhary编译:ronghuaiyang导读图解半监督的各种方法的关键思想。计算机视觉的半监督学习方法在过去几年得到了快速发展。目前最先进的方法是在结构和损失函数方面对之前的工作进行了简化,以及引入了通过混合不同方案的混合方法。…

.net 启动mysql数据库连接_[ASP.net教程]mysql数据库连接方式(.net)

[ASP.net教程]mysql数据库连接方式(.net)0 2014-07-17 18:01:001.通过ado.net连接(数据库连接串中为中文貌似无法使用)需要添加MySql.Data.dll(可通过安装mysql-connector-net-6.8.3.mis获得)引用MySql.Data.dll调用方式string connectionString “serverlocalhost;port3306;da…

overflowhidden把内容遮住了怎么办_图片有水印怎么办?不用PS,有这4招就够了!...

图片是我们在做 PPT 时经常会使用到的高频元素。往往会在搜索引擎中搜到很多带有水印的图片,怎么办呢?固然 PS 等软件去水印很给力,但是对于连 PPT 都还没有用得很熟悉的同学,让他们再去下载安装 Photoshop 软件,仅仅只…

mysql开窗函数over_oracle分析函数技术详解(配上开窗函数over())

一、Oracle分析函数入门 分析函数是什么? 分析函数是Oracle专门用于 解决复杂报表统计需求 的功能强大的函数, 它可以在数据中进行分组然后计算基于组的某种统计 ,并且每一组的每一行都可以返回一个统计。 分析函数和聚合函数的不同之处是什么…

传递给系统调用的数据区域太小怎么解决_一口气说出“分布式追踪系统”原理!...

“ 在微服务架构中,一次请求往往涉及到多个模块,多个中间件,多台机器的相互协作才能完成。图片来自 Pexels这一系列调用请求中,有些是串行的,有些是并行的,那么如何确定这个请求背后调用了哪些应用&#xf…

combinations java_[LeetCode][Java] Combinations

题目:Given two integers n and k, return all possible combinations of k numbers out of 1 ... n.For example, If n 4 and k 2, a solution is:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]题意:给定两个整数 n 和 k,返回1 ...n中k个数字的所有的组合。…

java将对象 缓存_ehcache java 对象缓存怎么实现

展开全部1.技术背景:系统缓存是32313133353236313431303231363533e4b893e5b19e31333337396236位于应用程序与物理数据源之间,用于临时存放复制数据的内存区域,目的是为减少应用程序对物理数据源访问的次数,从而提高应用程序的运行…

语义分割和实例分割_一文读懂语义分割与实例分割

以人工智能为导向的现代计算机视觉技术,在过去的十年中发生了巨大的变化。今天,它被广泛用于图像分类、人脸识别、物体检测、视频分析以及机器人及自动驾驶汽车中的图像处理等领域。图像分割技术是目前预测图像领域最热门的一项技术,原因在于…

游戏自审自查报告_开发的射箭小游戏上线了,分享一下我在开发过程中遇到的问题...

利用业余时间开发的微信小游戏-射箭救人质上线了,主要玩法就是操作弓箭射断绳子把人救下来就可以了。图片资源是我找一个朋友做的。开发过程不算太顺利。磕磕绊绊做了12关。希望大家支持下。谢谢。分享一下我在开发中遇到的问题和部分解决方案、希望对大家有所帮助。…

java float 存储方式_java-解析以字符串形式存储的float会抛出异...

在相关的源代码中可以看到,该值将被修剪:static FloatingDecimal.ASCIIToBinaryConverter readJavaFormatString(String arg) throws NumberFormatException {boolean arg0 false;boolean arg1 false;try {arg arg.trim();....因此,在转换为floatValue之前将删除…

java 抛出异常的目的_Java实验八,异常

一.实验目的1. 掌握自定义异常类的编写;2. 掌握使用try-catch语句来处理异常。二.实验内容及要求车站检查危险品的设备,如果发现危险品会发出警告。编程模拟设备发现危险品:1. 编写一个Exception的子类DangerException,该子类可以…

pythongui显示图片_opencv2.4.13+python2.7学习笔记--opencv中的Gui特性--图片:读图像,显示图像,保存图像...

#-*- coding: utf-8 -*-"""Created on Tue Mar 14 19:39:11 2017author: Thinkpad"""2.opencv中的Gui特性2.1图片:读图像,显示图像,保存图像读图像cv2.imread(a,b)a:图像所在的路径b:如何读取图片cv2.IMREAD_C…

postmapping注解_Swagger常用注解

在使用swagger时候如果掌握一些注解的使用,则在开发过程中测试的时候可以事半功倍,尤其在与前端技术进行联调,前端技术在访问swagger中的每个api时,可以很清楚的知道每个url对应的请求类型、参数类型、参数是否非必输、参数个数等…

java map 多个值_java 一个函数EnumMap返回多个值

在开发过程中,经常会有这种情况,就是一个函数需要返回多个值,这是一个问题!!网上这个问题的解决方法:1、使用map返回值;这个方法问题是,你并不知道如何返回值的key是什么&#xff0c…

python pandas 日期_python+pandas+时间、日期以及时间序列处理方法

pythonpandas时间、日期以及时间序列处理方法先简单的了解下日期和时间数据类型及工具 python标准库包含于日期(date)和时间(time)数据的数据类型,datetime、time以及calendar模块会被经常用到。 datetime以毫秒形式存储日期和时间,datetime.timedelta表…

java程序怎么都不是一个_java运行的流程-怎么运行java程序编了一个程序不知道怎么运行郁闷啊后缀文件名是 爱问知识人...

在初学java编程语言时,痛苦的事莫过于跟着示例一步步做,总是得不到想要的结果,这是很多初学者都会碰到的问题。下面详细教你运行第一个java应用程序(环境windows xp jdk 6。0):第一步:下载并安装JDK 6。0,…

调用别的方法的返回值_Spring boot如何实现异步调用

Spring boot如何实现异步调用异步调用:一个可以无需等待被调用函数的返回值就让操作继续进行的方法举个例子异步调用就是你 喊 你朋友吃饭 ,你朋友说知道了 ,待会忙完去找你 ,你就去做别的了。同步调用就是你 喊 你朋友吃饭 ,你朋…