04--Tomcat

前言:本章整理tomcat的知识点,tomcat知识点相较nginx比较少,但是也是运维必会的软件,这里结合实际项目整理一下。

1、tomcat简介

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当公司运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

1.1、tomcat主目录介绍

[root@localhost ~]# tree /usr/local/tomcat/ -L 1
/usr/local/tomcat/
├── bin              #存放tomcat管理脚本
├── conf             # tomcat 配置文件存放目录
├── lib              # web应用调用的jar包存放路径
├── LICENSE
├── logs             # tomcat 日志存放目录,catalina.out 为主要输出日志
├── NOTICE
├── RELEASE-NOTES
├── RUNNING.txt
├── temp             # 存放临时文件
├── webapps         # web程序存放目录
└── work             # 存放编译产生的.java 与 .class文件

1.2、webapps目录介绍

[root@localhost ~]# tree /usr/local/tomcat/webapps/ -L 1
├── docs            # tomcat 帮助文档
├── examples       # web应用示例
├── host-manager  # 主机管理
├── manager         # 管理
└── ROOT             # 默认网站的主目录(主页)

 1.3、Tomcat配置文件目录介绍

[root@localhost ~]# tree /usr/local/tomcat/conf/ -L 1
/usr/local/tomcat/conf/
├── Catalina
├── catalina.policy
├── catalina.properties
├── context.xml
├── logging.properties
├── server.xml         #tomcat 主配置文件
├── tomcat-users.xml   # tomcat 管理用户配置文件
└── web.xml

有几个常见的问题,在这里列出:

(1)讲述一下Tomcat8005、8009、8080三个端口的含义?

8005:关闭时使用

8009:为AJP端口,即容器使用,如Apache能通过AJP协议访问Tomcat的8009端口

8080:一般应用使用

(2)tomcat服务于java语言,Java语言具有跨平台特性,JAVA 如何做到跨平台

同一个JAVA程序(JAVA字节码的集合),通过JAVA虚拟机(JVM)运行于各大主流操作系统平台比如Windows、CentOS、Ubuntu等。程序以虚拟机为中介,来实现跨平台。

(3)什么是JAVA虚拟机

所谓虚拟机,就是一台虚拟的计算机。他是一款软件,用来执行一系列虚拟计算机指令。大体上,虚拟机可以分为系统虚拟机和程序虚拟机。大名鼎鼎的VisualBox、VMware就属于系统虚拟机。他们完全是对物理计算机的仿真。提供了一个可以运行完整操作系统的软件平台。 程序虚拟机的典型代表就是Java虚拟机,它专门为执行单个计算机程序而设计,在Java虚拟机中执行的指令我们称为Java字节码指令。无论是系统虚拟机还是程序虚拟机,在上面运行的软件都呗限制于虚拟机提供的资源中。

2、tomcat部署

tomcat下载地址http://tomcat.apache.org/

jdk下载地址:Java 存档下载 — Java SE 8 | Oracle 中国

2.1、java环境部署

[root@localhost ~]# tar xf jdk-8u151-linux-x64.tar.gz -C /usr/local
[root@localhost ~]# ls /usr/local/
bin  etc  games  include  jdk1.8.0_151  lib  lib64  libexec  sbin  share  src
[root@localhost ~]# ln -s /usr/local/jdk1.8.0_151/ /usr/local/java
[root@localhost ~]# echo 'JAVA_HOME=/usr/local/java' >> /etc/profile
[root@localhost ~]# echo 'PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile
[root@localhost ~]# echo 'export JAVA_HOME PATH' >> /etc/profile
[root@localhost ~]# tail -3 /etc/profile
JAVA_HOME=/usr/local/java
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH
[root@localhost ~]# source /etc/profile
[root@localhost ~]# env | grep JAVA
JAVA_HOME=/usr/local/java
[root@localhost ~]# java -version
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

2.2、tomcat安装

[root@localhost ~]# tar xf apache-tomcat-7.0.42.tar.gz -C /usr/local/
[root@localhost ~]# ln -s /usr/local/apache-tomcat-7.0.42/ /usr/local/tomcat
[root@localhost ~]# echo 'CATALINA_HOME=/usr/local/tomcat' >> /etc/profile
[root@localhost ~]# echo 'export CATALINA_HOME' >> /etc/profile
[root@localhost ~]# source /etc/profile

2.3、关闭防火墙

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost ~]# setenforce 0[root@localhost ~]# vi /etc/selinux/config 
[root@localhost ~]# cat /etc/selinux/config SELINUX=disabled

2.4、启动tomcat

[root@localhost ~]# bash /usr/local/tomcat/bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar[root@localhost ~]# netstat -tnlp |grep java
tcp6       0      0 :::8009                 :::*                    LISTEN      9889/java           
tcp6       0      0 :::8080                 :::*                    LISTEN      9889/java           
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      9889/java 

使用浏览器访问

2.5、关闭tomcat

[root@localhost ~]# bash /usr/local/tomcat/bin/shutdown.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

3、搭建简易电商网站

继续上面的环境

3.1、安装mysql

[root@localhost ~]# yum install -y mariadb-server mariadb
[root@localhost ~]# systemctl start mariadb[root@localhost ~]# mysqladmin -u root password 123 'Liumuquan@123'create database jspgou character set = utf8;
Query OK, 1 row affected, 1 warning (0.01 sec)

3.2、部署电商平台

[root@localhost ~]# unzip jspgouV6-ROOT.zip
[root@localhost ~]# vim ROOT/WEB-INF/config/jdbc.properties
# 修改后台数据库连接参数,如下图

3.3、将自带的数据库导入mysql

[root@localhost ~]# mysql -uroot -pLiumuquan@123 -D jspgou < DB/jspgou.sql 
mysql: [Warning] Using a password on the command line interface can be insecure.

 这里会有一个问题

自带的数据库,datatime字段默认值无效

可以通过如下办法排错

# 进入数据库mysql> show session variables like '%sql_mode%';
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value                                                                                                                 |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| sql_mode      | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)#将sql_mode复制出来,删除其中NO_ZERO_IN_DATE,NO_ZERO_DATE两个字段#退出数据库
vim my.cnf
添加
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION重启数据库重新导入

3.4、网站代码部署

[root@localhost ~]# \cp -r ROOT /usr/local/tomcat/webapps/\cp用ROOt替换webapps下的ROOT

3.5、启动网站

[root@localhost ~]# bash /usr/local/tomcat/bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

使用浏览器访问

这个位置给看文档的说一下,系统环境为centos7,这个网站直接部署在centos9上会出现无法连接数据库的问题。

4、tomcat多实例

Tomcat多实例是指在同一台服务器上运行多个独立的Tomcat服务器实例。每个Tomcat实例都有自己的配置、日志、应用程序和端口号,它们彼此独立,互不影响。这种部署方式通常用于在同一台服务器上运行多个独立的Web应用程序,每个应用程序使用独立的Tomcat实例来提供服务。

继续使用上面的环境,演示如下:

4.1、关闭网站

[root@localhost ~]# bash /usr/local/tomcat/bin/shutdown.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

4.2、准备多实例主目录

[root@localhost ~]# mkdir /usr/local/tomcat/instance{1..3}
[root@localhost ~]# ls /usr/local/tomcat/
bin   instance1  instance3  LICENSE  NOTICE         RUNNING.txt  webapps
conf  instance2  lib        logs     RELEASE-NOTES  temp         work

4.3、制作实例工作目录

[root@localhost ~]# cp -r /usr/local/tomcat/{conf,logs,temp,work} /usr/local/tomcat/instance1
[root@localhost ~]# cp -r /usr/local/tomcat/{conf,logs,temp,work} /usr/local/tomcat/instance2
[root@localhost ~]# cp -r /usr/local/tomcat/{conf,logs,temp,work} /usr/local/tomcat/instance3

4.4、修改端口

[root@localhost ~]# vi /usr/local/tomcat/instance1/conf/server.xml

修改这个文件三处地方,分别是服务端口,程序工作端口,网站目录

#服务端口 8080 替换成 8081<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000"redirectPort="8443" />#程序工作端口:8005替换成 8091<Server port="8091" shutdown="SHUTDOWN">#网站目录:webapps 替换成另一个目录
appBase="/webapps"
#拷贝修改好的文件到其余两个实例,这里是为了偷懒不改主目录,实际中不同的实例主目录也不同[root@localhost ~]# cp /usr/local/tomcat/instance1/conf/server.xml  /usr/local/tomcat/instance2/conf/
cp:是否覆盖"/usr/local/tomcat/instance2/conf/server.xml"? yes编辑拷过去的文件
服务端口 8081替换成 8082
程序工作端口:8091替换成 8092[root@localhost ~]# cp /usr/local/tomcat/instance1/conf/server.xml  /usr/local/tomcat/instance3/conf/
cp:是否覆盖"/usr/local/tomcat/instance3/conf/server.xml"? yes编辑拷过去的文件
服务端口 8081替换成 8083
程序工作端口:8091替换成 8093

4.5、编写启动脚本

[root@localhost ~]# vi /usr/local/tomcat/instance1/ins1.sh
#!/bin/bash
#instance1
. /etc/init.d/functions
export CATALINA_BASE="/usr/local/tomcat/instance1"case "$1" in
start)$CATALINA_HOME/bin/startup.sh;;
stop)$CATALINA_HOME/bin/shutdown.sh;;
restart)$CATALINA_HOME/bin/shutdown.shsleep 5$CATALINA_HOME/bin/startup.sh;;
esac
export JAVA_OPTS='-Xms64m -Xmx128m'#2,3的脚本只需要修改export CATALINA_BASE="/usr/local/tomcat/instance?"#记得对启动脚本进行赋权[root@localhost ~]# chmod +x /usr/local/tomcat/instance1/ins1.sh
[root@localhost ~]# chmod +x /usr/local/tomcat/instance2/ins2.sh
[root@localhost ~]# chmod +x /usr/local/tomcat/instance3/ins3.sh

4.6、填充网站目录

[root@localhost ~]# mkdir /webapps
[root@localhost ~]# cp -r /usr/local/tomcat/webapps/ROOT/ /webapps/

4.7、启动

[root@localhost ~]# /usr/local/tomcat/instance1/ins1.sh start
Using CATALINA_BASE:   /usr/local/tomcat/instance1
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/instance1/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@localhost ~]# /usr/local/tomcat/instance2/ins2.sh start
Using CATALINA_BASE:   /usr/local/tomcat/instance2
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/instance2/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@localhost ~]# /usr/local/tomcat/instance3/ins3.sh start
Using CATALINA_BASE:   /usr/local/tomcat/instance3
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/instance3/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

使用浏览器访问不同端口

 

 

 tomcat其实很多地方与nginx相同,只是一些细节有差别,概念类的可以去翻看nginx的三篇文章

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

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

相关文章

强烈安利10款手机App!

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ 1.听书神器——昊昊听书 昊昊听书app是一款专门为用户提供有声读物的应用程序。它不仅提供了各种类型的有声书籍&#xff0c;还有各种知名的电…

pw命令1

1、查看集群状态命令 gs_om -t status --detail 2、备节点升主&#xff08;本例子升2节点为主&#xff09; date && time cm_ctl switchover -n 2 -D /database/panweidb/data 3、cm_ctl是全局的&#xff0c;在一个节点运行 cm_ctl stop && cm_ctl start 就重…

铸铁机械5G智能工厂工业物联数字孪生平台,推进制造业数字化转型

铸铁机械5G智能工厂工业物联数字孪生平台&#xff0c;推进制造业数字化转型。工业物联数字孪生平台以5G技术为基础&#xff0c;通过工业物联网连接铸铁机械生产过程中的各个环节&#xff0c;运用数字孪生技术构建虚拟工厂&#xff0c;实现生产过程的实时监测、模拟与优化&#…

垃圾回收算法

垃圾回收基于“对象不再使用”的原则&#xff0c;自动检测并回收不再被引用的对象。JVM通过跟踪对象的引用关系来判断对象是否仍在使用中。当一个对象没有任何引用指向它时&#xff0c;垃圾回收器就会将其标记为可回收对象。 垃圾回收的工作机制 标记-清除&#xff08;Mark-S…

ros与硬件的交互

&#xff08;一&#xff09; 与usb相机的交互 第一个链接是 先从usb中拿到图像&#xff0c;然后再发布和订阅 【C】ROS&#xff1a;cv_bridge包使用与图像转换示例_cvbridge-CSDN博客 第二个链接是使用方法 ROS学习笔记--cv_bridge_cvbridge-CSDN博客 第三个链接是&#xff0c;…

C语言的printf输出问题

看到这段代码的时候&#xff0c;想到这个printf输出的值是多少? 若您想到的答案是1-2&#xff0c;真的是这样吗&#xff1f; #include <stdio.h>int main(int argc, char *argv[]) {int i 1;printf("%d-%d\r\n", i, i);return 0; }先了解一个知识点&#xf…

2024.6.05总结1102

今天刷到一个视频&#xff0c;话题非常沉重&#xff0c;看完后感觉整个人特别压抑。 这个话题是&#xff1a;“高考能改变一个人的命运吗&#xff1f;”在这个视频中&#xff0c;主持人采访了很多个人&#xff0c;但很多人的观点是今时不同往日&#xff0c;想要靠高考改变命运很…

I.MX6ULL UART 串口通信实验

系列文章目录 I.MX6ULL UART 串口通信实验 I.MX6ULL UART 串口通信实验 系列文章目录一、前言二、I.MX6U 串口简介2.1 UART 简介2.2 I.MX6U UART 简介 三、硬件原理分析四、实验程序编写五、编译下载验证5.1编写 Makefile 和链接脚本5.2 编译下载 一、前言 不管是单片机开发还…

解锁用Mermaid绘制图表的神奇力量

在这个快节奏、信息爆炸的时代&#xff0c;我们迫切需要一种简单、高效且美观的方式来表达复杂的思想和流程。 幸运的是&#xff0c;Mermaid就是这样一种工具。无论你是开发者、项目经理还是设计师&#xff0c;Mermaid都能帮助你轻松绘制各种类型的图表&#xff0c;让你的文档…

充电桩软硬件,赚钱新招数!-慧哥充电桩开源系统

慧哥充电桩开源平台V2.5.2_----- SpringCloud 汽车 电动自行车 云快充1.5、云快充1.6 https://liwenhui.blog.csdn.net/article/details/134773779?spm1001.2014.3001.5502 充电桩软件和硬件一体化的盈利方向可以清晰地归纳为以下几个主要方面&#xff1a; 充电服务收费&…

代码随想录算法训练营第五十天|198.打家劫舍、213.打家劫舍II、337.打家劫舍III

代码随想录算法训练营第五十天 198.打家劫舍 题目链接&#xff1a;198.打家劫舍 确定dp数组以及下标的含义&#xff1a;dp[i]&#xff1a;考虑下标i&#xff08;包括i&#xff09;以内的房屋&#xff0c;最多可以偷窃的金额为dp[i]。确定递推公式&#xff1a;max(dp[i - 1],…

开个新专栏,叫吾日三醒吾身,这个我打算得到了感悟就更新

打算开个新专栏&#xff0c;还有4年就30岁了。人生如梦啊&#xff0c;过的真快&#xff0c;家里的宝宝也还有2个月就出生了&#xff0c;都快要当父亲啦&#xff0c;感觉这辈子还没做啥很牛的事情。所以就立个flag吧。 自考还没考过&#xff0c;就3门了&#xff0c;考了3年了&a…

阻性负载和感性负载的区别

1.阻性负载&#xff1a; 阻性负载是指电路中只包含电阻元件的情况。这种负载会使得电流与电压之间呈现出线性关系&#xff0c;即满足欧姆定律。 当负载电流负载电压没有相位差时负载为阻性(如负载为白炽灯、电炉)。 2.感性负载&#xff1a; 感性负载指的是电路中含有电感元…

SVN在Linux服务器下部署过程

svn server 基于 ubuntu22.04 的 svn server 安装 refer&#xff1a;https://developer.aliyun.com/article/1431862#:~:text%E5%A6%82%E4%BD%95%E5%9C%A8Ubuntu%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AESVN%E6%9C%8D%E5%8A%A1%E7%AB%AF%E5%B9%B6%E5%AE%9E%E7%8E%B0%E6%97%A0%E5…

ARM功耗管理之功耗状态及功耗模式

安全之安全(security)博客目录导读 目录 一、功耗状态定义 ​编辑二、功耗模式定义 三、功耗状态和功耗模式区别<

6月05日,每日信息差

第一、特斯拉在碳博会上展示了其全品类的可持续能源解决方案&#xff0c;包括首次在国内展出的超大型电化学商用储能系统 Megapack 和家庭储能系统 Powerwall。此外&#xff0c;特斯拉还展示了电动汽车三电系统的解构和电池回收技术产品 第二、2024 年第一季度&#xff0c;全球…

用增之Appsflyer(一)

目录 简介 一、Appsflyer开发 指南 二、SDK集成 注意点: 代码部分: Step 1:代码仓库配置 Step 2:添加依赖项 Step 3:添加权限 Step 4:添加混淆 Step 5:facebook兼容 Step 6:java代码部分 1、初始化 一、AppsFlyerConversionListener

免费开源图片转文字识别软件:Umi-OCR

目录 1.介绍 2.项目亮点 3.项目功能&#xff08;已实现&#xff09; 4.功能体验 5.项目集成&#xff08;调用接口&#xff09; 6.项目地址 1.介绍 Umi-OCR&#xff1a;免费&#xff0c;开源&#xff0c;可批量的离线OCR软件&#xff0c;目前适用于 Windows7 x64 及以上。…

自动化办公02 用openpyxl库操作excel.xlsx文件(新版本)

目录 一、文件读操作 二、文件写操作 三、修改单元格样式 openpyxl 是一个处理Excel表格的第三方库。openpyxl 库可以处理Excel2010以后的电子表格格式&#xff0c;包括&#xff1a;xlsx/xlsm/xltx/xltm。 openpyxl教程 一、文件读操作 工作簿(workbook): excel文件 工作表…

word自带公式编辑器技巧

1.实现多行公式换行且对齐 1.1 准备阶段&#xff08;默认Unicode模式&#xff09; 进入公式编辑模式&#xff0c;输入\eqarray&#xff0c;紧接着按下空格键输入空格&#xff0c;如下 1.2 实现换行和对齐 将要编辑的公式输入到括号内 &&#xff1a;实现位置对齐 &…