Tomcat(七)
tomcat服务
java基础知识
java组成:
语法:(Java 编写规则)-
源代码(.java 人工编写)-
字节码(.class 编译生成,跨平台中间文件)-
jvm(虚拟机,运行字节码)
java环境体系:JVM - JRE - JDK【oracle、open】
JVM:Java 虚拟机,只负责运行字节码
JRE:运行环境 = JVM + 核心类库,只用来跑程序
JDK:开发工具包 = JRE + 编译 / 调试工具,写代码必备
java web:servlet 、jsp
Servlet: Java 编写的后端程序,处理请求、业务逻辑、控制跳转,纯 Java 代码。
JSP 页面模板,HTML 嵌套 Java 代码,本质是 Servlet,负责展示页面数据。
二者关系 JSP 最终会被容器编译成 Servlet; Servlet 侧重后台逻辑,JSP 侧重前台页面。
tomcat基础知识
tomcat 和 java 存在版本兼容性的问题
当前版本:9.x、10.x、11.x
tomcat 配置结构
server - service 【connector,Engine[host,host2,host3,... ]】
Connector:对外端口监听,负责接收浏览器请求
Engine:引擎容器,统一管理所有虚拟主机
Host:每一个对应一个网站域名,多站点就配多个 Host
Engine属性:defaulthost(默认虚拟主机)
host:
name(虚拟主机域名)、appbase(项目存放目录)、unpackwars(是否自动解压 war 包)、
autodeploy(是否热部署,自动发布更新项目)
定制功能
两个目录:METE_INF/context.xml(当前项目专属配置) 、
WEB_INF/web.xml(项目核心部署描述符)
三个端口:8080(访问端口,浏览器项目对外访问)/8005(关闭端口,Tomcat 内部监听,远程关闭服务)/8009(通信端口,和 Nginx/Apache 做反向代理、负载均衡通信)
项目部署
应用目录的属性权限一定要对(Tomcat 对webapps、项目文件夹、文件必须有读写权限)
样式1:war包(压缩包丢 webapps,自动解压部署)
样式2:子应用(项目文件夹直接放 webapps,目录名 = 访问路径)
样式3:webapps下创建目录(不在 webapps,通过 Context 配置任意路径部署)
tomcat应用部署
样式:直接访问、本地nginx反向代理、多机nginx反向代理【反向代理的时候,主机名的转发】
1.直接访问 浏览器直接 IP:8080/项目名 直连 Tomcat
2.本机 Nginx 反向代理 Nginx 和 Tomcat 同机,Nginx 监听 80,转发给本地 8080
3.多机 Nginx 反向代理 Nginx 一台、多台 Tomcat 节点;代理转发时携带主机名,保持域名、会话一致性
会话管理:
会话绑定 - nginx的调度算法(ip_pash):同一 IP 始终访问同一 Tomcat
会话复制 - tomcat的配置(会话数据多节点同步复制集群) + web.xml
注:server.xml 集群配置 + web.xml 开启分布式
会话共享 - tomcat的上下文 + redisson的模块 + redis环境
注:会话统一存 Redis,所有 Tomcat 共享
bin:启停脚本(启动、关闭 tomcat)
conf:所有配置文件
lib:公共依赖 jar 包
webapps:存放部署的 web 项目
logs:运行日志、错误日志
work:JSP 编译缓存
temp:临时文件
server.xml(最重要):修改端口、连接端口、虚拟主机
web.xml:全局 web 配置,欢迎页、session 超时、编码
tomcat-users.xml:配置管理账号密码权限
context.xml:配置连接池、数据源
注意流程:改端口→server.xml;部署项目→webapps;查报错→logs;改账号→tomcat-users.xml
tomcat服务
jvm基础
流程:源代码-编译-字节码-类加载器-jvm运行环境-执行引擎
组成:类加载器
运行时环境
公共区域 heap、方法区
私有区域 java线程栈、本地方法栈、程序计数器
执行引擎
即使编译 JIT
垃圾收集器
本地方法接口
堆结构:老年代、年轻代【Eden区、Survivor1、Survivor2】
容量控制:-Xmx -Xms -Xmn -XX:NewRatio -XX:SurvivorRatio ...
垃圾:
确定垃圾的方式:根搜索可达、统计计数
处理垃圾的方法:标记清除、标记压缩、标记复制
垃圾回收的触发条件:
年轻代:Eden满了,MinorGC
老年代:空间满了,MajorGC 【MinorGC】 == FullGC
导致程序中止 -- STW
回收的落脚点:
降低STW的发生频率【增加容量空间、降低对象代码大小】
减少STW的执行时间【垃圾回收器的类型】
垃圾回收器的类型:
串行-并行、独占-并发
老年代、年轻代、混合【G1】
tomcat的性能优化
连接器属性、hosts属性、日志数据、类加载的策略
java项目构建
流程:
研发提交代码到代码仓库
构建服务器通过git|svn 获取代码到本地【工作目录】
准备构建环境
maven软件安装、maven环境配置
项目构建
进入项目目录【pom.xml文件所在的位置】
mvn clean package 打包命令
- 根据配置到模块仓库里面获取模块
- 项目源代码编译
- 打包生成文件
提交代码到制品库
配置体系:
全局配置 /etc/maven/settings.xml
用户配置 ~/.m2/settings.xml 默认没有
项目配置 path/to/project/pom.xml 优先级最高
nexus方案
定位:本地的模块仓库、本地的制品库
端口:8081
实践
一.tomcat的环境准备和安装
源码方式安装Tomcat
Java环境准备
1.java环境部署好
apt install openjdk-17-jdk -y

2.定制环境变量
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export JAVA_BIN=$JAVA_HOME/bin
export PATH=$JAVA_BIN:$PATH

3.加载环境变量
source /etc/profile.d/java.sh
java -version

4.获取 tomcat 软件
mkdir /data/softs -p
cd /data/softs
wget https://dlcdn.apache.org/tomcat/tomcat-11/v11.0.4/bin/apache-tomcat-11.0.4.tar.gz

5.解压文件
mkdir /data/server
tar xf apache-tomcat-11.0.4.tar.gz -C /data/server/

6.定制软连接
ln -s /data/server/apache-tomcat-11.0.22 /data/server/tomcat

7.定制系统环境变量
vim /etc/profile.d/tomcat.sh
export CATALINA_BASE=/data/server/tomcat
export CATALINA_HOME=/data/server/tomcat
export CATALINA_TMPDIR=$CATALINA_HOME/temp
export CLASSPATH=$CATALINA_HOME/bin/bootstrap.jar:$CATALINA_HOME/bin/tomcat-juli.jar
export PATH=$CATALINA_HOME/bin:$PATH

8.加载 Tomcat 环境变量
source /etc/profile.d/tomcat.sh

9.定制专用服务用户
useradd -r -s /sbin/nologin tomcat
id tomcat

10.更改文件权限(软链接特殊双授权)
chown -R tomcat:tomcat /data/server/tomcat
chown tomcat:tomcat -R /data/server/tomcat/*

11.定制 systemd 启动服务脚本文件路径:/lib/systemd/system/tomcat.service
[Unit]
Description=Tomcat
After=syslog.target network.target
[Service]
Type=forking
# Environment=JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
ExecStart=/data/server/tomcat/bin/startup.sh
ExecStop=/data/server/tomcat/bin/shutdown.sh
PrivateTmp=true
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target

12.加载服务配置
systemctl daemon-reload

13.启动 tomcat 服务
systemctl start tomcat

14.测试
浏览器访问:10.0.0.16:8080

二.tomcat部署halo项目相关的过程
应用nexus实现企业的maven仓库
ubuntu24-16 主机
1.采用 openjdk 方式安装的 java
apt install openjdk-11-jdk -y
java -version

2.创建目录
mkdir /data/{server,softs} -p

3.获取软件
cd /data/softs
wget https://download.sonatype.com/nexus/3/nexus-3.70.3-01-java11-unix.tar.gz

4.检查效果
ll nexus-3.70.3-01-java11-unix.tar.gz -h

5.解压软件
tar xf nexus-3.70.3-01-java11-unix.tar.gz -C /data/server/

6.做软连接
ln -s /data/server/nexus-3.70.3-01 /data/server/nexus

7.查看文件
ls /data/server/nexus

8.修改配置
cat /data/server/nexus/etc/nexus-default.properties
## DO NOT EDIT - CUSTOMIZATIONS BELONG IN $data-dir/etc/nexus.properties
##
# Jetty section
application-port=8081
application-host=0.0.0.0
nexus-args=${jetty.etc}/jetty.xml,${jetty.etc}/jetty-http.xml,${jetty.etc}/jetty-requestlog.xml
nexus-context-path=/
# Nexus section
nexus-edition=nexus-pro-edition
nexus-features=\
nexus-pro-feature
nexus.hazelcast.discovery.isEnabled=true

9.查看相关的命令文件
tree /data/server/nexus/bin/

10.查看执行脚本文件
file /data/server/nexus/bin/nexus

11.查看文件内容
cat /data/server/nexus/bin/nexus

12.查看功能选项
cat /data/server/nexus/bin/nexus | grep ')'

13.配置 Nexus 软件配置
将 nexus 的运行身份,改为普通的用户 sswang,如果文件权限不够,则无法启动
vim /data/server/nexus/bin/nexus.rc
cat /data/server/nexus/bin/nexus.rc
run_as_user="sswang" # 修改为 sswang
![]()

14.测试运行
/data/server/nexus/bin/nexus

15.查看 nexus 的运行身份为 root
vim /data/server/nexus/bin/nexus.rc
cat /data/server/nexus/bin/nexus.rc

16.运行 nexus 软件
/data/server/nexus/bin/nexus start

17.检查效果
netstat -tnulp | grep 8081

测试

18.查看进程服务
ps aux | grep nexus

19.确认日志目录
ls /data/server/

20.查看日志内容
ls /data/server/sonatype-work/nexus3/

Nexus 定制系统服务
1.停止正在运行的旧 Nexus
/data/server/nexus/bin/nexus stop

2.创建并编辑 Nexus systemd 服务文件
vim /lib/systemd/system/nexus.service
3.写入完整全套服务配置
[Unit]
Description=nexus service
After=network.target
[Service]
Type=forking
LimitNOFILE=65536
ExecStart=/data/server/nexus/bin/nexus start
ExecStop=/data/server/nexus/bin/nexus stop
User=root
#User=nexus
Restart=on-abort
[Install]
WantedBy=multi-user.target

4.重载 systemd 配置,加载新服务
systemctl daemon-reload

5.通过 systemctl 启动 Nexus 服务
systemctl start nexus

6.核查服务是否成功运行
systemctl is-active nexus

7.测试验证
浏览器访问验证 地址:10.0.0.16:8081 打开 Nexus 仓库后台
账号密码登录 用户名:admin 密码:12345678


应用nexus实现企业的内部apt源仓库
16主机
1.定制数据目录
mkdir /data/blobs
2.创建 Blob 存储
进入 Nexus 管理界面
进入 Blob Stores 页面
点击 Create Blob Store
Type 选择 File
Name 填写 ubuntu2404
Path 填写 /data/blobs/ubuntu2404
点击保存
3.创建 APT 代理仓库
进入 Repositories 页面
点击 Create repository
选择 apt(proxy)
Name 填写 ubuntu2404
Distribution 填写 noble
Remote storage 填写 https://mirrors.aliyun.com/ubuntu/
Blob store 选择 ubuntu2404
点击保存
4.仓库同步
- 回到 Browse 页面
- 选中 ubuntu2404 仓库
- 点击 Analyze 按钮
- 弹窗选择 Yes, only this repository
5.编辑源文件:
Types: deb
URIs: http://10.0.0.16:8081/repository/ubuntu2404/
Suites: noble noble-updates noble-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
Types: deb
URIs: http://10.0.0.16:8081/repository/ubuntu2404/
Suites: noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
执行更新命令:
apt update
apt list --upgradable
配置Maven库
1.创建目录
mkdir /data/blobs
2.建子目录
mkdir /data/blobs/mymaven
打开左侧 Blob Stores
点击右上角 Create Blob Store
Type 选择 File
Name 填写:mymaven
Path 填写:/data/blobs/mymaven
直接点保存
创建代理资源库(proxy)
-
Nexus 后台 →
Repositories -
点击
Create repository -
选择
maven2 (proxy) -
页面填写:
Name:mymaven
Remote storage:http://maven.aliyun.com/nexus/content/groups/public/
Blob store:下拉选择刚才建好的 mymaven
取消勾选 Strict Content Type Validation
保持 Online 勾选开启
直接点击保存
托管资源库 1(Release 库)
页面:Repositories
点击 Create repository → 选择 maven2 (hosted)
配置填写: Name:mymaven-hosted Version policy:Release Blob store:mymaven 取消勾选:Validate that all content uploaded Deployment policy:Allow redeploy
点击保存,创建完成
托管资源库 2(Snapshot 库)
再次点击 Create repository → maven2 (hosted)
配置填写: Name:mymaven-snapshot-hosted Version policy:Snapshot Blob store:mymaven 取消严格内容校验 Deployment policy:Allow redeploy
点击保存
组资源库(group)
Name:mymaven-group
Blob store:选择 mymaven
组成员仓库,按这个从上到下的顺序依次添加:
mymaven-hosted
mymaven-snapshot-hosted
mymaven(之前的阿里云代理仓库)
定制 maven 配置
vim /etc/maven/settings.xml
cat /etc/maven/settings.xml
<servers>
<server>
<id>mymaven-snapshot-hosted</id>
<username>admin</username>
<password>12345678</password>
</server>
<server>
<id>mymaven-hosted</id>
<username>admin</username>
<password>12345678</password>
</server>
<server>
<id>mymaven</id>
<username>admin</username>
<password>12345678</password>
</server>
</servers>
进入项目目录:
cd /data/codes/spring-boot-helloworld/
ls
--注意:maven命令解读
mvn deploy:deploy-file
-DGroupId=对应pom中的groupId
-DartifactId=对应pom中的artifactId
-Dversion=对应pom中的version
-Dpackaging=对应pom中的packaging
-Dfile=文件路径
-DpomFile=表示需要上传的jar包对应的pom文件的绝对路径
-Durl=上传的服务器
-DrepositoryId=服务器的表示ID,setting.xml文件中配置的serverId,用来关联私服的用户名和密码
执行 Maven 命令
mvn deploy:deploy-file
最后确认效果
进入 mymaven-snapshot-hosted 仓库
查看目录:com/neo/spring-boot-helloworld/0.3-SNAPSHOT
所有 jar、pom、元文件已存在 结果显示:本地的文件提交成功了
nginx反向代理tomcat
jvm的结构
类加载器、运行时环境【heap、方法区、java线程栈、本地方法栈、程序计数器】、执行引擎等
heap的结构
老年代、年轻代【Eden区、Survivor1、Survivor2】
更多推荐



所有评论(0)