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.sh
        sleep 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的三篇文章

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

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

相关文章

在线建站流程分析

建站流程是指通过互联网创建一个个人或企业网站的过程。随着互联网的发展&#xff0c;越来越多的人和机构开始意识到网络的重要性&#xff0c;建站成为一种常见的行为。在线建站的流程一般包括以下几个步骤。 首先&#xff0c;选择一个合适的建站平台。目前&#xff0c;有很多在…

英伟达Docker 安装与GPu镜像拉取

获取nvidia_docker压缩包nvidia_docker.tgz将压缩包上传至服务器指定目录解压nvidia_docker.tgz压缩包 tar -zxvf 压缩包执行rpm安装命令&#xff1a; #查看指定rpm包安装情况 rpm -qa | grep libstdc #查看指定rpm包下的依赖包的版本情况 strings /lib64/libstdc |grep GLI…

这才是大模型价格战背后的真相

想必大家今天肯定被各家大模型厂商的降价新闻刷圈了&#xff0c;如果说 Meta Llama 3 的开源是国外大模型市场的搅局者&#xff0c;那 DeepSeek-V2 就是国内大模型市场的鲶鱼&#xff0c;但是价格战背后是大模型基础设施优化带来的物美价廉&#xff0c;还是浑水摸鱼的噱头&…

数据结构——(java版)包装类与泛型

文章目录 一 包装类1.1 包装类的概念1.2 装箱/装包1.3 拆箱/拆包1.4 一个面试题&#xff1a; 二 泛型2.1 什么是泛型&#xff1f;2.2 泛型的使用2.3 泛型的上界2.4 泛型实现Comparable接口2.5 擦除机制另外&#xff1a; 一 包装类 1.1 包装类的概念 在java中基本数据类型并不…

中国自动气象站:现代气象观测的中流砥柱

引言 气象观测是人类认识和预报天气的重要手段。在现代科技的推动下&#xff0c;自动气象站成为气象观测的重要工具&#xff0c;为天气预报、防灾减灾和气候研究提供了宝贵的数据支持。本文将介绍中国自动气象站的发展历程、技术特点及其在气象观测中的重要作用。 中国自动气象…

【Linux】信号(一)

信号我们将从信号产生&#xff0c;信号的保存&#xff0c;信号处理分别进行讲解~ 至少大思路是这样。开始之前还要进行一些基础知识的铺垫。 目录 从生活中提炼一些结论&#xff1a;信号概念的一些储备&#xff1a;信号产生&#xff1a;一、kill指令&#xff1a;二、键盘组合键…

BP 客户主数据-国际贸易条款发生更改

Issue &#xff1a;ECC升级S4后 1&#xff09;客户主数据扩产线时(LHGX03)&#xff0c;国贸条件2变更记录查询时&#xff0c;所扩产线&#xff08;30 1C&#xff09;无变更记录&#xff0c;未变更产线&#xff08;10 1C/1H/1M&#xff09;确认变更记录 20230108新增&#xff1…

生命在于学习——Python人工智能原理(3.2)

三、深度学习 &#xff08;二&#xff09;人工神经网络 人工神经网络是模仿人类大脑神经系统工作原理所创建的数学模型&#xff0c;有并行的分布处理能力、高容错性和自我学习等特征。 1、感知器 感知器由Frank Roseblatt于1957年提出&#xff0c;是一种广泛使用的线性分类…

Matlab解决矩阵微分方程建模(代码开源)

#用matlab解决施密特正交规范化矩阵之后&#xff0c;我又想到矩阵的微分方程计算量真的太大了&#xff0c;来回转化让我头大&#xff0c;于是我尝试了一下用matlab建立模型来解决这类问题。 代码部分如下&#xff1a;注解还挺清晰的&#xff1a; %%%解微分方程组%eg&#xff…

多目标优化-NSGA-II

文章目录 一、前置知识NSGA-II帕累托前沿 二、算法流程1.NSGA2.NSGA-II 一、前置知识 1.NSGA(非支配排序遗传算法):旨在同时优化多个冲突的目标函数&#xff0c;寻找帕累托前沿上的解集。 什么是多个冲突的目标: 比如你看上了一辆车&#xff0c;你既想要它便宜&#xff0c;又…

一个思维狂赚20万+?揭秘电商平台隐藏的流量认知!

你想要的流量&#xff0c;资源&#xff0c;人脉&#xff0c;都已经有人为你准备&#xff0c;你只需要找到拥有这些资源的人。对于流量和信息&#xff0c;也是一样&#xff0c;你想找的客户和产品&#xff0c;都已经有人为你准备在淘宝、拼多多等电商平台&#xff0c;你只需要找…

掌握Postman,轻松调试POST与GET接口:详细安装与实战教程,让你的API测试更高效

0.前言 在确保数据接口的稳定性和可访问性方面&#xff0c;使用专业的接口测试工具至关重要。这些工具不仅简化了测试流程&#xff0c;还提供了无需编写额外代码即可轻松调用和调试接口的能力&#xff0c;从而大大提高了测试效率和准确性。 0.1 Postman 背景介绍 用户在开发或…

遭遇Device Association Service占用CPU和内存过高异常

1.异常描述 在蓝牙设备搜索和配对过后&#xff0c;系统界面卡住了&#xff0c;查找了下任务管理器&#xff0c;发现有一个主机服务占用了过多的CPU和内存&#xff0c;且不断的在增长。截图如下&#xff1a; 百度查了下&#xff0c;Device Association Service是一个Win10系统服…

HCIP-Datacom-ARST自选题库_10_多种协议多选【24道题】

1.如图所示&#xff0c;PE1和PE2之间通过LoopbackO接口建立MP-BGP邻居关系&#xff0c;在配完成之后&#xff0c;发现CE1和CE2之间无法互相学习路由&#xff0c;下列哪些选项会造成该问题的出现? PE1或PE2未在BGP-VPNV4单播地址族视图使能邻居A PE1或PE2上的VPN实例参数配置错…

JVM的内存结构

JVM 内存结构 方法区: 方法区主要用于存储虚拟机加载的类信息、常量、静态变量&#xff0c;以及编译器编译后的代码等数据。 程序计数器 由于在JVM中&#xff0c;多线程是通过线程轮流切换来获得CPU执行时间的&#xff0c;因此&#xff0c;在任一具体时刻&#xff0c;一个CP…

2.1.3 采用接口方式使用MyBatis

实战概述&#xff1a;使用MyBatis的接口方式进行数据库操作 环境准备 确保项目中已经集成了MyBatis框架。 创建用户映射器接口 在net.huawei.mybatis.mapper包中创建UserMapper接口。定义方法findById(int id)用于按编号查询用户。定义方法findAll()用于查询全部用户。定义方法…

[沫忘录]MySQL InnoDB引擎

[沫忘录]MySQL InnoDB引擎 逻辑存储结构 InnoDB采用 “表、段&#xff0c;区&#xff0c; 页、行” 这样的层级结构进行存储。 **表空间(tablespace)**ibd文件&#xff0c;主要用于存储记录、索引等数据&#xff0c;一个mysql实例可有多个表空间&#xff0c;甚至能通过innodb…

代理IP科普:IP黑名单与IP白名单的机制与作用

在IP代理使用中&#xff0c;我们经常听到黑名单与白名单两个名词&#xff0c;它们不仅提供了强大的防御机制&#xff0c;还可以灵活应对不同的安全威胁。本文将详细探讨IP黑名单和白名单在网络安全中的双重屏障作用。 一、IP黑名单和白名单定义 IP黑名单与IP白名单是网络安全中…

WPF中Window的外观实现及常用属性

文章目录 1. 概要2. Window的外观2.1 Window的外观组成2.2 Window的实现2.3 Window外观配置2.4 Window 的其他常用属性1. AllowsTransparency 2. WindowStartupLocation3. ShowInTaskbar4. ShowActivated5. SizeToContent6. Topmost7. WindowStyle 1. 概要 和 Android 类似, W…

C语言笔记第13篇:自定义类型(联合union和枚举enum)

1、联合体 1.1 联合体类型的声明 像结构体一样&#xff0c;联合体也是由一个或多个成员构成&#xff0c;这些成员可以是不同的类型。 但是编译器只为最大的成员分配足够的内存空间&#xff0c;联合体的特点是所有成员共用一块内存空间&#xff0c;所以联合体也叫&#xff1a…