Tomcat服务

Tomcat服务

安装

  1. 安装java环境
yum install -y java-1.8.0-openjdk
java -version  # 看是否成功
  1. 安装Tomcat,这里以apache-tomcat-8.0.30.tar.gz为例
tar -xvf apache-tomcat-8.0.30.tar.gz -C /usr/local/
mv /usr/local/apache-tomcat-8.0.30 /usr/local/tomcat: << 'EOF'
# 相关目录介绍
tomcat
├── bin  # 存放主程序
├── conf  # 存放配置文件
├── lib  # 存放库文件
├── LICENSE
├── logs  # 存放日志
├── NOTICE
├── RELEASE-NOTES
├── RUNNING.txt
├── temp
├── webapps  # 存放网站页面
└── work  # 存放编译后页面文件EOF
  1. 启动Tomcat
# 在启动tomcat之前,做下面两个方案之一即可,不然有可能会出现8005端口启动非常慢
# 方案一
mv /dev/random /dev/random.bak
ln -s /dev/urandom /dev/random# 方案二
yum install rng-tools
systemctl start rngd && systemctl enable rngd# 启动tomcat
/usr/local/tomcat/bin/startup.sh# 关闭tomcat(如果配置文件有问题,关闭tomcat的时候会提示)
/usr/local/tomcat/bin/shutdown.sh

相关配置

  • 配置文件存放路径:/usr/local/tomcat/conf/server.xml
<?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"><!-- 网页端口,默认是8080 --><Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" /><Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /><Engine name="Catalina" defaultHost="localhost"><Realm className="org.apache.catalina.realm.LockOutRealm"><Realm className="org.apache.catalina.realm.UserDatabaseRealm"resourceName="UserDatabase"/></Realm><!-- 网站配置开始,name:域名、appBase:网站页面位置、unpackWARs:自动解压war、autoDeploy:自动部署 --><Host name="localhost"  appBase="webapps"unpackWARs="true" autoDeploy="true"><!-- 自定义访问路径与页面位置,path:匹配用户访问路径,docBase:定义页面位置 --><Context path="/test" docBase="test_dir" /><!-- 日志配置,className:默认即可、directory:日志存放目录、prefix:日志文件名称前缀、suffix:日志文件名称后缀、pattern:日志格式 --><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>

示例

搭建虚拟主机

环境

  • ip192.168.3.200的web主机

需求

  1. tomcat的默认端口改为80
  2. 访问http://www.a.com/xxx文件,实际命中的是/data/www_a_com/中的xxx文件
  3. 访问http://www.a.com/test/index.html,实际命中的是/var/www/html/index.html,并且给www.a.com虚拟主机添加日志功能,日志存放在/data/www_a_com/logs/www_a_com.log
  4. war包直接丢/usr/local/tomcat/webapps/下,测试会不会自动解压

本示例主要体现的是nameappBaseunpackWARspathdocBase的作用

思考:curl www.a.com/project/index.html实际访问的是服务器上的哪个文件?

  1. tomcat的默认端口改为80
# 修改配置文件
vim /usr/local/tomcat/conf/server.xml
: << 'EOF'
# 这里修改成80
<Connector port="80" protocol="HTTP/1.1"
...
EOF# 重启tomcat
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
  1. 访问http://www.a.com/xxx文件,实际命中的是/data/www_a_com/中的xxx文件
# 修改/etc/hosts文件
echo "192.168.3.200 www.a.com" >> /etc/hosts# 准备测试页面,这里使用index.html为例
mkdir -p /data/www_a_com
echo "/data/index.html" > /data/index.html# 修改配置文件
vim /usr/local/tomcat/conf/server.xml
: << 'EOF'
<Engine name="Catalina" defaultHost="localhost">...<!-- 添加新的虚拟主机 --><Host name="www.a.com" appBase="/data/www_a_com"unpackWARs="true" autoDeploy="true"><!-- 下面这行如果不加,会命中/data/www_a_com/ROOT/xxx --><Context path="" docBase="" /></Host><!-- 默认的不动 --><Host name="localhost"  appBase="webapps"unpackWARs="true" 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>
EOF# 重启tomcat
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh# 测试
curl http://www.a.com/index.html
# 输出: /data/www_a_com/index.html
  1. 访问http://www.a.com/test/index.html,实际命中的是/var/www/html/index.html,并且给www.a.com虚拟主机添加日志功能,日志存放在/data/www_a_com/logs/www_a_com.log
# 准备index.html
echo "/var/www/html/index.html" > /var/www/html/index.html# 准备日志存放目录
mkdir /data/www_a_com/logs# 修改配置文件
vim /usr/local/tomcat/conf/server.xml
: << 'EOF'<Host name="www.a.com" appBase="/data/www_a_com"unpackWARs="true" autoDeploy="true"><Context path="" docBase="" /><!-- 添加下面几行,这里的directory需要配置绝对路径才行,不然会出现/usr/local/tomcat/logs/中 --><Context path="/test" docBase="/var/www/html" /><Valve className="org.apache.catalina.valves.AccessLogValve" directory="/data/www_a_com/logs"prefix="www_a_com" suffix=".log"pattern="%h %l %u %t &quot;%r&quot; %s %b" /></Host>
EOF# 重启tomcat
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh# 测试
curl www.a.com/test/index.html
# 输出: /var/www/html/index.html
  1. war包直接丢/usr/local/tomcat/webapps/下,测试会不会自动解压
# 准备war包
echo "test war" > index.html
yum install -y  java-1.8.0-openjdk-devel  # 安装jar,使用方法跟tar类似
jar -cf project.war index.html# 将war包复制到/usr/local/tomcat/webapps下
cp project.war /usr/local/tomcat/webapps/# 查看是否自动解压(此时如果删除war包,相应的目录也会自动删除)
ls /usr/local/tomcat/webapps/
# 其中包含: project project.war# 编辑配置文件,测试是否能够正常访问
vim /usr/local/tomcat/conf/server.xml
: << 'EOF'<!-- 这里使用的是默认的进行测试 --><Host name="localhost"  appBase="webapps"unpackWARs="true" autoDeploy="true"><!-- 只需添加这一行即可,这样访问localhost的会自动命中project目录,不会使用ROOT --><Context path="" docBase="project" /><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>
EOF# 重启tomcat
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh# 测试
curl 192.168.3.200/index.html
# 输出: test war

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

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

相关文章

萝卜大杂烩 | 10 个杀手级的 Python 自动化脚本

本文来源公众号“萝卜大杂烩”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;10 个杀手级的 Python 自动化脚本 重复性任务总是耗时且无聊&#xff0c;想一想你想要一张一张地裁剪 100 张照片或 Fetch API、纠正拼写和语法等工作…

ELK日志

​​​​​​​

HJ53 杨辉三角的变形(基础数学,生成数组不行,会越界,使用规律)

第一种方法&#xff1a; 生成杨辉三角的方法不行&#xff0c;会出现越界&#xff0c; 数组从[0][0]开始&#xff0c;i行j列 只看列 每一行的最右侧坐标为2*i,下坐标为 0&#xff0c; 0&#xff0c;1&#xff0c;2 0&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;4 … …

MongoDB聚合运算符:$not

文章目录 语法使用举例 $not聚合运算符用于将指定布尔表达式的值取反&#xff0c;比如&#xff0c;表达式的值为 true&#xff0c; $not返回 false&#xff1b;表达式的值为 false&#xff0c; $not则返回 true。 语法 { $not: [ <expression> ] }使用 除false外…

革命性突破:Stability AI发布全新12B参数Stable LM 2模型,颠覆AI界!

Stability AI已推出其Stable LM 2语言模型系列的最新成员&#xff1a;一个120亿参数的基础模型和一个经过指令调优的变体。这些模型在七种语言上训练&#xff0c;包括英语、西班牙语、德语、意大利语、法语、葡萄牙语和荷兰语&#xff0c;训练数据达到了令人印象深刻的两万亿个…

Linux:动态库加载、编址

目录 一、库的概念 二、动静态库的加载 2.1绝对编址与相对编址 2.1一般程序的加载 三、动态库的加载 一、库的概念 库默认就是一个磁盘级文件&#xff0c;所以在执行代码时&#xff0c;库和可执行程序都会被加载到内存中&#xff0c;从原理上&#xff0c;库函数的调用依旧…

结构型模式--1.适配器模式【托尼托尼·乔巴】

1. 翻译家 在海贼王中&#xff0c;托尼托尼乔巴&#xff08;Tony Tony Chopper&#xff09;是草帽海贼团的船医&#xff0c;它本来是一头驯鹿&#xff0c;但是误食了动物系人人果实之后可以变成人的形态。 乔巴吃了恶魔果实之后的战斗力暂且抛开不谈&#xff0c;说说它掌握的第…

[C++][算法基础]树的重心(树图DFS)

给定一颗树&#xff0c;树中包含 n 个结点&#xff08;编号 1∼n&#xff09;和 n−1 条无向边。 请你找到树的重心&#xff0c;并输出将重心删除后&#xff0c;剩余各个连通块中点数的最大值。 重心定义&#xff1a;重心是指树中的一个结点&#xff0c;如果将这个点删除后&a…

PostgreSQL入门到实战-第十四弹

PostgreSQL入门到实战 PostgreSQL数据过滤(七)官网地址PostgreSQL概述PostgreSQL中BETWEEN 命令理论PostgreSQL中BETWEEN 命令实战更新计划 PostgreSQL数据过滤(七) BETWEEN运算符允许您检查值是否在值的范围内。 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容…

嵌入式网线连接——笔记本电脑设置

一、需求 我们调试很多设备经常需要用到网线去调试&#xff0c;当然主流是USB&#xff0c;和网线。 二、笔记本电脑端设备 有网口的&#xff0c;非常方便&#xff0c;如果没有网口&#xff0c;则需要用到USB转网口 连接指示灯&#xff1a; 绿色&#xff1a;灯亮表示连接正常…

风险评估在应对网络安全威胁中扮演着重要的角色

如今&#xff0c;IT 安全专家面临各种重大威胁&#xff0c;从勒索软件、网络钓鱼&#xff0c;到对基础设施的攻击&#xff0c;再到对知识产权、客户数据的窃取&#xff1b;从不安全的供应链合作伙伴&#xff0c;再到组织内部人员的恶意行为。同时&#xff0c;随着云计算、远程工…

Springboot上传集合,集合超过256直接下标越界

Springboot上传集合&#xff0c;集合超过256直接下标越界 解决方法一 单个controller生效解决方法二 全局controller生效 org.springframework.beans.InvalidPropertyException: Invalid property files[256] of bean class [analysis.vo.wcase.InsertCase]: Invalid list inde…

顺序存储结构的读取、插入与删除

顺序线性表--L已经存在&#xff0c;且1 < index < ListLength(L) 一、获得元素操作--GetElem 含义&#xff1a;将线性表L中的第 index 个位置元素值返回 思路&#xff1a;只要 index 的数值在数组下标值范围内&#xff0c;把数组第 index-1下标的值返回即可 二、插入…

最近公共祖先(LCA)

题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。 输入格式 第一行包含三个正整数 N,M,S,分别表示树的结点个数、询问的个数和树根结点的序号。 接下来 N−1 行每行包含两个正整数x,y,表示 x 结点和 y 结点之间有一条直接连接的边(数据保证可以…

WPF —— 动画缩放变换

ScaleTransform:在二维x-y坐标系统内缩放对象; 在故事板中依赖的属性为RenderTransform.ScaleX或RenderTransform.ScaleY,这要根据你要沿哪个轴进行缩放,X代表x轴,Y代表y轴; key属性当我们使用静态资源访问时候--> <!--TargetType"{x:Type Button} 直接应用…

从零开始做自动驾驶定位(十三)_ 关于建图的讨论

从零开始做自动驾驶定位(十三): 关于建图的讨论 配套代码和测试数据&#xff1a;联系作者获取 附赠自动驾驶学习资料和量产经验&#xff1a;链接 代码在后续可能会有调整&#xff0c;如和文章有出入&#xff0c;以实际代码为准 系列文章进行到这里&#xff0c;建图部分算是基…

详细分析Vuex中的mapGetters

目录 1. 基本知识2. Demo13. Demo2 1. 基本知识 优势和用途 简化代码&#xff1a;用 mapGetters 和 mapState&#xff0c;可以简化组件中对于 Vuex 中状态和 getter 的映射工作&#xff0c;减少了重复的代码书写更易读&#xff1a;组件中直接使用映射的计算属性&#xff0c;使…

Objective-C学习笔记(NSString,NSMutableString,NSArray)4.11

1.框架&#xff1a;系统/第三方写好的类&#xff0c;这些类的集合就是框架。 2.NSString方法&#xff1a;①拼接&#xff1a;stringWithFormat&#xff1a;参数。 ②长度&#xff1a;str.length ③字符串指定下标的字符&#xff1a;characterAtIndex&#xff1a;参数:&#xf…

CSS设置文本

目录 概述&#xff1a; text-aling: text-decoration: text-transform: text-indent: line-height: letter-spacing: word-spacing: text-shadow: vertical-align: white-space: direction: 概述&#xff1a; 在CSS中我们可以设置文本的属性&#xff0c;就像Word文…

20 Games101 - 笔记 - 光场、颜色与感知

**20 ** 光场、颜色与感知 光场 眼睛成像 眼睛成像&#xff1a;我们看到这个三维世界&#xff0c;在眼睛里类似就是一幅二维的图。如果直接看到一幅记录了看到的光线信息的图&#xff0c;也能得到同样效果&#xff08;虚拟现实&#xff09;。 全光函数 全光函数可以描述…