tomcat总结笔记
文章目录
- Tomcat
- 1、什么是tomcat?
- 2、rpm安装jre环境
- 3、源码安装jdk环境
- 4、安装tomcat --源码安装
- 5、相关目录文件
- webapps
- Tomcat 配置文件目录介绍(conf)
- tomcat的相关管理命令在$prefix/bin目录下
- 实战1、:配置nginx动静分离
- 实战2、配置基于tomcat的虚拟主机配置
- 实战3、配置jforum论坛部署
- 配置tomcat服务启动脚本
- 基于域名访问的host配置
- 服务器状态查看
- 二进制升级
Tomcat
1、什么是tomcat?
Tomcat是用于发布和解析JSP(Java Server Page)网页(基于JAVA语言开发的代码),将Tomcat称为JAVA容器,Tomcat软件本身基于JAVA语言开发。
端口号:8080
主配置文件:/usr/local/tomcat/conf/server.xml
三个端口:
8080 – 默认tomcat访问端口
8005 – 用于关闭tomcat的(SHUTDOWN 必须要大写,小写不管用)
8009 – AJP端口 用于Apache和Tomcat内部通讯端口
2、rpm安装jre环境
# rpm -ivh jdk-8u301-linux-x64.rpm
在/etc/profile下写入
export JAVA_HOME=/usr/java/jdk1.8.0_301-amd64 #这里安装路径自动定位在这里
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/fre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HMOE/jre/bin:$PATH
[root@hd2 ~]# source /etc/profile
#查看java版本
[root@hd2 ~]# java -version
3、源码安装jdk环境
1、安装JDK—源码安装
1、系统环境说明
# cat /etc/redhat-release 系统信息
# uname -a 查看系统信息
# getenforce
# systemctl status firewalld.service
2 、安装 JDK
# mkdir /usr/local/java 安装工作目录
# tar xzf jdk-8u60-linux-x64.tar.gz
# mv jdk1.8.0_192 /usr/local/java/jdk
# 设置环境变量
# vim /etc/profile
export JAVA_HOME=/usr/local/java/jdk #指定java安装目录
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH #用于指定java系统查找命令的路径
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar #类的路径,在编译运行java程序时,如果有调用到其他类的时候,在classpath中寻找需要的类。
# source /etc/profile #让环境变量生效
2、测试jdk是否安装成功
# java -version
4、安装tomcat --源码安装
# tar xvf apache-tomcat-9.0.11.tar.gz
# mkdir /usr/local/tomcat
# mv apache-tomcat-9.0.11 /usr/local/tomcat
# 设置环境变量
# echo 'export TOMCAT_HOME=/usr/local/tomcat'>>/etc/profile
# source /etc/profile
# chown -R root.root /usr/java/jdk1.8.0_301-amd64/ /usr/local/tomcat/ # 注意授权,统一权限
2、检查tomcat是否安装成功
# /usr/local/tomcat/apache-tomcat-9.0.11/bin/startup.sh
# netstat -naput | grep tomcat(8080)
5、相关目录文件
*├── bin #存放tomcat管理脚本 (操作命令)
*├── conf # tomcat 配置文件
├── lib # web应用调用的jar包存放路径
├── LICENSE
*├── logs # tomcat 日志存放目录,catalina.out 为主要输出日志
├── NOTICE
├── RELEASE-NOTES
├── RUNNING.txt
├── temp # 存放临时文件
*├── webapps # web程序存放目录
└── work # 存放编译产生的.java 与 .class文件
webapps
├── docs # tomcat 帮助文档
├── examples # web应用实例
├── host-manager # 主机管理
├── manager # 管理
└── ROOT # 默认站点根目录
Tomcat 配置文件目录介绍(conf)
├── Catalina
├── catalina.policy 配置tomcat对文件系统中目录或文件的读、写执行等权限,及对一些内存,session等的管理权限
├── catalina.properties 配置tomcat的classpath等
├── context.xml tomcat的默认context容器
├── logging.properties 配置tomcat的日志输出方式
├── logs
*├── server.xml # tomcat 主配置文件
├── server.xml.bak
├── server.xml.bak2
*├── tomcat-users.xml # tomcat 管理用户配置文件
├── tomcat-users.xsd
└── web.xml tomcat的应用程序的部署描述符文件
tomcat的相关管理命令在$prefix/bin目录下
/usr/local/tomcat/bin
catalina.sh 主命令脚本
configtest.sh 检测配置文件
shutdown.sh 关闭
startup.sh 启动
version.sh 查看版本
netstat -naput | grep 8080 查看tomcat
实战1、:配置nginx动静分离
192.168.1.12 -- Tomcat1 & Tomcat2
192.168.1.11 -- Nginx
多实例
[root@hd2 ~]# mv /usr/local/tomcat /usr/local/tomcat1
[root@hd2 ~]# cp -a /usr/local/tomcat1/ /usr/local/tomcat2
主配置文件
[root@hd2 ~]# vim /usr/local/tomcat2/apache-tomcat-9.0.11/conf/server.xml<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />
改为<Connector port="8081" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" /><Server port="8005" shutdown="SHUTDOWN">
改为<Server port="8006" shutdown="SHUTDOWN">
开启两个tomcat
[root@hd2 ~]# /usr/local/tomcat1/apache-tomcat-9.0.11/bin/startup.sh
Tomcat started.
[root@hd2 ~]# /usr/local/tomcat2/apache-tomcat-9.0.11/bin/startup.sh
Tomcat started.
查看
[root@hd2 ~]# ps -ef | grep tomcat
tomcat默认访问目录
/usr/local/tomcat2/webapps下 ROOT目录
建立index.jsp测试代码
<html>
<body>
<h1>JSP Test Page tomcat2 </h1>
<%=new java.util.Date()%>
</body>
</html>安装Nginx 并创建虚拟主机
[root@hd1~]# wget http://www.nginx.org/download/nginx-1.14.2.tar.gz
[root@hd1 ~]# yum -y install openssl-devel
[root@hd1 ~]# useradd www
[root@hd1 ~]# tar -xvf nginx-1.14.2.tar.gz
[root@hd1 ~]# cd nginx-1.14.2
[root@hd1 ~]# ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_ssl_module
[root@Hd2-LB nginx-1.14.2]#make && make install
修改配置文件,创建虚拟主机
[root@hd1 ~]# cd /usr/local/nginx/conf/
[root@hd1 ~]# mv nginx.conf nginx.conf.bak
[root@hd1 ~]# egrep -v "#|^$" nginx.conf.bak > nginx.conf
[root@hd1 ~]# vim nginx.conf
worker_processes 1;
events {worker_connections 1024;
}
http {include mime.types;default_type application/octet-stream;sendfile on;
keepalive_timeout 65;
#这是我们自己添加的一个子配置文件路径include /usr/local/domain/*;
}
[root@hd1 ~]# mkdir /usr/local/domain
[root@hd1 ~]# vim /usr/local/domain/bbs.a.conf
upstream tomcat_web {server 192.168.1.12:8080 weight=1 max_fails=2 fail_timeout=15;server 192.168.1.12:8081 weight=1 max_fails=2 fail_timeout=15;}
server {listen 80;server_name bbs.a.com;location / {root html;index index.html index.htm;proxy_set_header Host $host;proxy_pass http://tomcat_web;}location ~* .*\.(html|htm|js|png|jpg|gif|css|jpeg|txt|gz|bz2|zip|bmp|doc|xls|docx)$ {root /var/www/html;expires 30d;}
}
#location ~* 表示不区分大小写匹配 .*\.(html|htm)$ 正则表达式表示以.html或htm结尾的所有网页
启动nginx
[root@hd1 ~]# /usr/local/nginx/sbin/nginx
[root@hd1 ~]# mkdir /var/www/html -p
[root@hd1 ~]# cd /var/www/html
[root@hd1 ~]# echo "wo shi nginx web" >index.html
重启tomcat
[root@hd2 ~]# /usr/local/tomcat1/bin/shutdown.sh
[root@hd2 ~]# /usr/local/tomcat1/bin/startup.sh
[root@hd2 ~]# /usr/local/tomcat2/bin/shutdown.sh
[root@hd2 ~]# /usr/local/tomcat2/bin/startup.sh测试一下负载均衡集群
这里的ip是nginx的ip
[root@hd1 ~]# curl 192.168.8.139/index.jsp
<html>
<body>
<h1>JSP Test Page tomcat1 </h1>
Thu Jul 29 21:47:01 CST 2021
</body>
</html>
[root@hd1 ~]# curl 192.168.8.139/index.html
wo shi nginx web
实战2、配置基于tomcat的虚拟主机配置
Tomcat配置文件,一对Host标签就是一个虚拟主机,即相当于一个nginx中的server模块
基于tomcat1的多虚拟主机配置 两个网站分别是:www.a.com 和www.b.com
#autoDeploy=true 表示自动部署(jvm)
#unpackWARs=true 表示自动解压war包
#"表示双引号[root@hd2 ~]# vim /usr/local/tomcat1/conf/server.xml<Host name="www.a.com" appBase="webapps/a"unpackWARs="true" autoDeploy="true"><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t "%r" %s %b" /></Host><Host name="www.b.com" appBase="webapps/b"unpackWARs="true" autoDeploy="true"><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t "%r" %s %b" /></Host>
#日志格式对比(重要)
含义 tomcat nginx
客户端ip地址 %h $remote_addr
时间 %t $time_local
请求 %r $request
状态码 %S $status
资源大小 %b $body_bytes_sent
跳转 %{Referer}i $http_referer
客户端 %{User-Agent}i $http_user_agent
真实客户端ip %{X-Forwarded-For} $http_x_forwarded_for配置两个虚拟站点的环境
[root@hd2 ]# cd /usr/local/tomcat1/webapps/
[root@hd2 webapps]# mkdir a/ROOT b/ROOT -p
[root@Hd2 webapps]# echo "wo shi t a" >a/ROOT/index.html
[root@Hd2 webapps]# echo "wo shi t b" >b/ROOT/index.html
[root@Hd2 webapps]# /usr/local/tomcat1/bin/shutdown.sh
[root@Hd2 webapps]# /usr/local/tomcat1/bin/startup.sh
配置windows主机的hosts文件设置内容如下:
/windows/system32/drivers/etc/hosts
192.168.0.12 www.a.com www.b.com
测试
curl 192.168.8.138:8080
curl www.a.com:8080
实战3、配置jforum论坛部署
#将war包上传到/root目录之下
[root@hd2 ROOT]# pwd
/usr/local/tomcat1/webapps/a/ROOT
[root@hd2 ROOT]# mv /root/jforum-2.7.0.war .
[root@hd2 ROOT]# jar xf jforum-2.6.2.war重启tomcat
[root@hd2 ~]# /usr/local/tomcat1/bin/shutdown.sh
[root@hd2 ~]#/usr/local/tomcat1/bin/startup.sh
配置tomcat服务启动脚本
tomcat提供了方便的启动命令脚本,但是却没有提供服务器中经常管理使用的service脚本。可以自行编写服务管理脚
本
1.编辑启动脚本,生成tomcat.pid
# cd /usr/local/tomcat1/apache-tomcat-9.0.11/bin/
# vim catalina.sh
137gg 跳转到137行
在PRGDIR下面添加
CATALINA_PID=/var/run/tomcat.pid
2.
基于域名访问的host配置
1、建立项目目录并写入测试文件
# cd /usr/local/tomcat/webapps/
# mkdir devops/ROOT -p
# cd /devops/ROOT
# touch index.html
# echo "this is tomcat.devops.com"
2、编辑/usr/local/tomcat/conf/server.xml
# vim /usr/local/tomcat/conf/server.xml
添加
<Host name="localhost" appBase="webapps/devops">
</Host>
name可以写成域名
<Host name="tomcat.devops.com" appBase="webapps/devops">
</Host>
3、检测配置并重启
# service tomcat configtest
# service tomcat restart
4、访问主机解析域名
# vim /etc/hosts
192.168.8.138 tomcat.devops.com
5、测试
服务器状态查看
1.去掉访问ip限制
vim /usr/local/tomcat1/apache-tomcat-9.0.11/webapps/manager/META-INF/context.xml
注释掉
2、创建用户和密码开启访问权限
vim /usr/local/tomcat/conf/tomcat-users.xml
加入
二进制升级
TERM, INT(快速退出,当前的请求不执行完成就退出) -s stop
QUIT (优雅退出,执行完当前的请求后退出) -s quit
HUP (重新加载配置文件,用新的配置文件启动新worker进程,并优雅的关闭旧的worker进程) -s reload
USR1 (重新打开日志文件) -s reopen
USR2 (平滑的升级nginx二进制文件 拉起一个新的主进程 旧主进程不停止)
WINCH (优雅的关闭worker进程)1、nginx的升级
# ps -ef | grep 80(nginx)
# kill -USR2 nginx主进程号 平滑的启动一个进程 升级操作
# kill -WINCH nginx子进程号 优雅的关闭子进程
# kill -QUIT nginx主进程 优雅的关闭主进程
#修改路由
echo "1" >/proc/sys/net/ipv4/ip forward①编译安装新版本
# shell > tar xvf nginx-1.16.0.tar.gz
# shell > cd nginx-1.16.0
# shell > ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module
# shell > make && make install
②新旧版本同时运行
# shell > kill -USR2 主进程号
③停止掉旧进程
# shell > kill -WINCH 旧的工作进程号
# shell > kill -QUIT 旧的主进程号
在nginx中,默认提供了平滑升级的操作,只需要执行以下命令
#注意先configure 在nginx源码包执行
# shell > make install && make upgrade
相关文章:
tomcat总结笔记
文章目录 Tomcat1、什么是tomcat?2、rpm安装jre环境3、源码安装jdk环境4、安装tomcat --源码安装5、相关目录文件webappsTomcat 配置文件目录介绍(conf)tomcat的相关管理命令在$prefix/bin目录下 实战1、:配置nginx动静分离实战2、配置基于t…...
中断向量控制器(NVIC)
1. 什么是中断 在处理器中,中断是一个过程,即CPU在正常执行程序的过程中,遇到外部/内部的紧急事件需要处理,暂时中止当前程序的执行,转而去为处理紧急的事件,待处理完毕后再返回被打断的程序处继续往下执行…...
QT配置FFmpeg出现错误原因
文章目录 QT配置ffmpeg出现: undefined reference to "avcodec_version"没有配置环境变量QT和FFmpeg的版本不对应直接添加FFmpeg的头文件没有在.pro文件添加路径 QT 程序异常退出没有在debug文件里面存放dll库 QT配置ffmpeg出现: undefined re…...
列出使用Typescript的一些优点?
使用Typescript有以下优点: 类型安全:Typescript是一种静态类型语言,它要求在编码阶段明确定义变量和函数的类型。这种类型安全可以减少在运行时出现错误的可能性,并提高代码的可读性和可维护性。代码可读性和可维护性࿱…...
如何做好测试?(四)集成测试(Integration Testing, IT)
1. 集成测试的详细介绍: 集成测试(Integration Testing, IT),是一种软件测试方法,旨在验证不同组件、模块或子系统之间的交互和集成是否正常工作。它侧重于测试系统的组件之间的接口和数据传递,以确保它们…...
二叉树前序、中序、后序遍历(递归法、迭代法)
前序遍历:(练习题) 迭代法一: int TreeSize(struct TreeNode* root){return rootNULL?0:TreeSize(root->left)TreeSize(root->right)1; }int* preorderTraversal(struct TreeNode* root, int* returnSize){if(rootNULL){*…...
npm ,yarn 更换使用国内镜像源,淘宝源
背景 文章首发地址 在平时开发当中,我们经常会使用 Npm,yarn 来构建 web 项目。但是npm默认的源的服务器是在国外的,如果没有梯子的话。下载速度会特别慢。那有没有方法解决呢? 其实是有的,设置国内镜像即可&#x…...
真正理解浏览器渲染更新流程
浏览器渲染更新过程 文章目录 浏览器渲染更新过程帧维度解释帧渲染过程一些名词解释Renderer进程GPU进程rendering(渲染) vs painting(绘制)⭐位图纹理Rasterize(光栅化) 1. 浏览器的某一帧开始:vsync2. Input event handlers3. requestAnimationFrame4. 强制重排(可…...
市场调研的步骤与技巧:助你了解市场需求
在当今快速发展的市场中,进行有效的市场研究对于了解消费者的行为、偏好和趋势至关重要。适当的市场研究可以帮助公司获得对目标受众的有价值的见解,创造更好的产品和服务,并提高客户满意度。今天,小编和大家一起讨论一下怎么做市…...
ansible的个人笔记使用记录-个人心得总结
1.shell模块使用,shell模块------执行命令,支持特殊符 ansible all -m shell -a yum -y install nginx ansible all -m shell -a systemctl restart nginx ansible all -m shell -a systemctl stop nginx && yum -y remove nginx2. file模块…...
相机数据恢复!详细步骤解析(2023新版)
和朋友在外面旅游用相机拍了好多有意义的照片和视频,但是导入电脑后不知道是被我删除了还是什么原因,这些照片都不见了,请问有方法恢复吗?” 在数字摄影时代,我们依赖相机记录珍贵的瞬间。然而,相机数据丢失…...
LNK2001: unresolved external symbol __imp___std_init_once_begin_initialize 问题解决
LNK2001: unresolved external symbol __imp___std_init_once_begin_initialize 解决 文章目录 问题背景方法一:使用预编译指令方法二:使用相同的环境 参考链接附录 问题背景 Visual Studio 2019 对 CMakeLists.txt 的支持不是很好,使用 “文…...
修改switch Nand无线区码 以支持高频5G 信道
环境:NS switch 问题:日版,港版无法连接大于44信道的5G WIFI 解决办法:修改PRODINFO.dec的WIFI 区域码 背景:我的switch是最早买的港版的一批,WIFI 只能连接日本的信道,家里的路由器是国行的&am…...
基于SpringBoot的课程答疑系统
目录 前言 一、技术栈 二、系统功能介绍 学生信息管理 科目类型管理 老师回答管理 我的收藏管理 学生问题 留言反馈 交流区 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息互联网信息的飞速发展,无纸化作业变成了一种趋势&#x…...
JAVA中的泛型
一、泛型的概念 泛型是JAVA中的一个重要的概念,它允许你在编译时指定数据类型,从而使得代码更加灵活,更加通用。通过泛型,你可以在通用代码上操作不同数据类型,使得代码更加具有通用性。 二、泛型的使用场景 1、泛型…...
日撸代码300行:第73天(固定激活函数的BP神经网络,训练与测试过程理解)
进一步梳理理解了一下正向和反向传播。Forward 是利用当前网络对一条数据进行预测的过程,BackPropagation 是根据误差进行网络权重调节的过程。 完整的代码在72天,这里只粘贴Forward和BackPropagation两个方法。 /*** *********************************…...
css中常用单位辨析
辨析 px:像素;css中最普遍最常用的单位,不管在何种设备或分辨率上,1px始终代表屏幕上的一个像素。 %:百分比;基于父元素相对属性的百分比。 em:当前字体大小的倍数;基于父元素字体…...
Unity 一些常用特性收集
常用的类的特性 特性效果[Serializable]可序列化,作为一个子属性显示在Inspector面板[RequireComponent(typeof(CoomponnetName))]该类挂载的游戏物体,需要要有对应的组件[DisallowMultipleComponent]不允许挂载多个该类或其子类[ExecuteInEditMode]允许…...
select实现服务器并发
select的TCP服务器代码 #include <stdio.h> #include <unistd.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h> #include <sys/select.h> #include…...
【Spring底层原理】BeanFactory的实现
🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 Redis 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 容器实现 一、BeanFactory实现的特点1.1 Be…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
