WebSphere Application Server(WAS)8.5.5教程第五讲
续前篇!
一、Web 应用部署与类加载策略
Web 应用部署与类加载策略是 WebSphere Application Server(WAS)日常管理的核心部分,尤其对运行大型企业级 Java 应用(如 BAW)非常关键。本讲将分两部分讲解:
1、目标
1. Web 应用部署:如何安装、更新、卸载 WAR/EAR 包
2. 类加载策略:如何解决类冲突、提升加载效率
2、Web 应用部署(WAR / EAR 包)
部署入口
路径如下:
应用程序 ➝ WebSphere企业应用程序
1. 安装新应用
步骤:
-
点击【安装】
-
选择上传方式:
-
从本地上传
.war
/.ear
文件 -
或者从服务器路径安装(/opt/IBM/xyz.ear)
-
-
点击【下一步】,按提示填写信息
-
应用名称(可以修改)
-
目标服务器(选定一个 WebSphere 实例)
-
安装目录设置(一般保持默认)
-
-
重要步骤:配置 上下文根(Context Root)
-
例如:
/bawportal
,则访问地址为http://host:port/bawportal
-
-
点击【完成】,然后【保存主配置】
-
启动应用程序(在“企业应用程序”列表中选中 ➝ 启动)
2. 更新已有应用
路径:
WebSphere企业应用程序 ➝ 点击应用名 ➝ 点击“更新”
选项:
-
更新整个 EAR 包(替换旧包)
-
更新单个模块(如只替换
*.war
) -
更新类、资源文件等(增量更新)
3. 卸载应用
路径:
WebSphere企业应用程序 ➝ 勾选目标 ➝ 点击【卸载】
注意事项:
-
安装后不要忘记点击右上角的【保存到主配置】
-
每次安装/更新后建议重启对应服务器,清理缓存
-
部署 BAW 类 Portal 或 Process App 时,路径/依赖较多,注意 WAR 中
web.xml
和 ClassPath 定义
3、类加载策略
在 WebSphere 中,不同组件之间共享类路径,有时会导致类冲突(比如 Jackson、Log4j 不同版本),所以类加载策略管理非常重要。
类加载相关配置位置:
-
服务器级别设置:
服务器 ➝ 点击目标服务器 ➝ 应用程序设置 ➝ 类装入器策略 -
应用程序级别设置:
企业应用程序 ➝ 点击应用名称 ➝ 类装入器
或
➝ 模块级别设置(Web 模块 / EJB 模块)
两种主要策略:
策略名称 | 含义 | 推荐情况 |
---|---|---|
父类优先(Parent First) | 默认方式,优先加载 WAS 共享类 | 稳定、安全,适合大部分业务应用 |
父类最后(Parent Last) | 优先加载应用自己提供的类(打包在 WAR/EAR 中) | 防止冲突,适合使用特殊第三方包的情况 |
设置位置:
-
下拉选择:
类装入方式(Class loader mode)
➤ 选择Parent last
可优先加载应用自己的类
使用场景举例:
情况 | 建议策略 |
---|---|
使用 Spring Boot 打包的 WAR | Parent last ,防止依赖冲突 |
部署 IBM 官方应用 | Parent first (默认即可) |
出现 ClassNotFoundException / NoSuchMethodError | 尝试切换策略排查 |
多个 WAR 共用 jar 包时 | 建议使用 Shared Library(共享类库机制) |
4、补充:共享库(Shared Libraries)
如果多个应用使用相同的 jar 包(如 log4j.jar、common-utils.jar),建议配置为共享库,避免冗余加载。
创建方式:
-
环境 ➝ 共享库
-
新建共享库 ➝ 指定 jar 包目录
-
在应用级别(企业应用程序 ➝ 应用 ➝ 共享库映射)挂载该库
5、实战调优建议
问题 | 原因 | 应对措施 |
---|---|---|
应用启动慢 | 类太多或依赖冲突 | 开启类加载跟踪、检查依赖树 |
类冲突报错 | 同类名不同版本 | 设置 Parent last 、使用 Shared Library |
ClassNotFound 异常 | 类路径未配置 | 检查 WAR/EAR 中 META-INF 及 lib |
应用隔离需求 | 多版本 jar 并存 | 各应用用独立类加载器或 Docker |
6、总结
重点点位 | 说明 |
---|---|
安装、更新、卸载入口 | WebSphere企业应用程序 |
上下文根配置 | 决定 URL 访问路径 |
类装入策略位置 | 服务器级 or 应用级均可设置 |
推荐默认策略 | Parent first(安全),遇冲突时用 Parent last |
二、案例: BAW在WAS中的类加载策略与依赖管理机制
下面来深入梳理 IBM Business Automation Workflow(BAW) 在 WebSphere Application Server (WAS) 中的 类加载策略与依赖管理机制,这有助于你深入理解 BAW 各组件运行背后的逻辑,进而定位问题、调优或安全管控。
1、BAW 在 WAS 中的部署结构概览
BAW 其实是由多个模块打包成一个或多个 企业应用(EAR) 部署到 WAS 中的,核心包括:
模块 | 描述 | 类加载来源 |
---|---|---|
BAW Process Server EAR | 流程执行引擎 | EAR ➝ BAW Runtime jar |
BAW Process Portal WAR | 用户门户界面 | WAR ➝ Portal UI 组件 |
BAW Process Designer | 浏览器建模工具 | 部署为 Web 应用或远程组件 |
BAW Business Rules | 决策/规则服务 | WAR ➝ ODM 核心库 |
Common Services | 如 UCA、事件监听等 | Shared Libraries ➝ com.lombardi., ibm.bpm. |
2、类加载策略在 BAW 中的实际应用
IBM 官方默认使用策略:
应用层级 | 默认策略 | 说明 |
---|---|---|
BAW EAR 主应用 | Parent First | 优先加载 WAS 提供的 BPM 内核类 |
BAW WAR 模块(如 Portal) | Parent Last | 避免 UI 层与 WAS 内部类冲突 |
扩展/定制应用 | 推荐 Parent Last | 避免与 BAW runtime jar 冲突 |
可在 WAS 控制台:
-
应用程序 ➝ 企业应用程序 ➝ 点击模块 ➝ 类装入器 ➝ 设置类加载方式
示例:防止 Jackson 冲突
BAW 内置 Jackson(如 com.fasterxml.jackson.core
),但你部署的自定义服务也用了别的版本?
解决方案:
-
你的自定义模块设置为
Parent Last
-
或用 Shared Library 管理 Jackson,并为各应用指定绑定版本
3、依赖管理方式
1. 内部依赖(BAW Runtime 组件)
常见 JAR 包(这些位于安装目录,例如 /opt/IBM/Workflow/lib
):
文件名 | 功能 |
---|---|
bpmserver.jar | BAW 流程引擎核心 |
teamworks.jar | 老版 BPM 核心 |
businessrules.jar | ODM 引擎 |
restconnector.jar | REST 连接器 |
ucaservice.jar | 调度与消息服务 |
这些 jar 不可擅自替换,否则会导致版本冲突或运行异常。
2. 外部依赖(自定义服务所用)
如:
-
spring-core.jar
-
mybatis.jar
-
jackson-databind.jar
通常放置在:
-
WAR 模块中的
/WEB-INF/lib
-
EAR 的
lib
或APP-INF/lib
-
Shared Library 中统一管理
4、类加载调试技巧
开启类加载跟踪日志:
在 JVM 参数中添加:
-Dibm.cl.verbose=true
可以在 WAS SystemOut.log
中看到加载类的来源,例如:
[2/20/25 13:22:11:123 CST] 00000001 SystemOut O CL Verbose: Loaded class [com.fasterxml.jackson.databind.ObjectMapper] from [file:/opt/IBM/Workflow/lib/jackson-databind.jar]
常见冲突问题排查
现象 | 原因 | 应对方式 |
---|---|---|
ClassCastException | 同一类被不同类加载器加载 | 设置 Parent Last,或统一使用 Shared Library |
ClassNotFoundException | 类在 WAR 内未打包 | 检查 lib 路径,或导入共享库 |
Portal 页面空白 | JS 库冲突或 Portal 模块类问题 | 检查 WAR 配置和类加载策略 |
自定义服务调用失败 | 缺 jar 或版本冲突 | 检查 EAR 打包结构、依赖版本匹配性 |
最佳实践总结
操作场景 | 建议 |
---|---|
部署标准 BAW 应用 | 保持 IBM 默认类加载设置 |
部署自定义扩展 | 设置模块类加载为 Parent Last ,放置独立 jar |
多模块共享 jar | 配置 Shared Library,避免重复打包 |
出现冲突或异常 | 开启类加载跟踪日志,查清加载路径 |
依赖管理 | 使用 Maven 构建打包,控制版本准确性 |
未完,待续!
相关文章:
WebSphere Application Server(WAS)8.5.5教程第五讲
续前篇! 一、Web 应用部署与类加载策略 Web 应用部署与类加载策略是 WebSphere Application Server(WAS)日常管理的核心部分,尤其对运行大型企业级 Java 应用(如 BAW)非常关键。本讲将分两部分讲解&#…...
Golang中的runtime.LockOSThread 和 runtime.UnlockOSThread
在runtime中有runtime.LockOSThread 和 runtime.UnlockOSThread 两个函数,这两个函数有什么作用呢?我们看一下标准库中对它们的解释。 runtime.LockOSThread // LockOSThread wires the calling goroutine to its current operating system thread. // T…...
计算圆周率 (python)
使用模特卡罗方法(模拟法),模拟撒点100000次,计算圆周率π 输入格式: 一个整数,表示随机数种子 输出格式: 计算的π值,结果小数点后保留5位数字 输入样例: 在这里给出一组输入。例如: 10…...
机器学习EM算法原理及推导
在机器学习与统计推断中,我们经常会遇到“缺失数据”或“潜在变量”(latent variables)的情形:样本并非完全可观测,而部分信息被隐藏或丢失。这种情况下,直接对观测数据做极大似然估计(Maximum …...
Linux项目部署全攻略:从环境搭建到前后端部署实战
Linux项目部署全攻略:从环境搭建到前后端部署实战 注:根据黑马程序员javawebAI视频课程总结: 视频地址 详细讲义地址 一、Linux基础入门:为什么选择Linux? 要成为一名Java开发工程师,掌握Linux是企业级…...
人工智能重塑医疗健康:从辅助诊断到个性化治疗的全方位变革
人工智能正在以前所未有的速度改变着医疗健康领域,从影像诊断到药物研发,从医院管理到远程医疗,AI 技术已渗透到医疗服务的各个环节。本文将深入探讨人工智能如何赋能医疗健康产业,分析其在医学影像、临床决策、药物研发、个性化医…...
ubuntu系统 | dify+ollama+deepseek搭建本地应用
1、安装 Ollama 下载并安装 Ollama (llm) wangqiangwangqiang:~$ curl -fsSL https://ollama.ai/install.sh | bash >>> Installing ollama to /usr/local >>> Downloading Linux amd64 bundle0.3% curl -fsSL https://ollama.ai/install.sh (下…...
NHANES最新指标推荐:C-DII
文章题目:Non-linear relationship between the childrens dietary inflammatory index and asthma risk: identifying a critical inflection point in US children and adolescents DOI:10.3389/fnut.2025.1538378 中文标题:儿童饮食炎症指…...
【PhysUnits】4.4 零类型(Z0)及其算术运算(zero.rs)
一、源码 该代码定义了一个类型系统中的零类型Z0,并为其实现了基本的算术运算(加法、减法、乘法、除法)。这是一个典型的类型级编程示例,使用Rust的类型系统在编译期进行数学运算。 //! 零类型(Z0)及其算术运算实现 //! //! 本…...
【大模型面试每日一题】Day 23:如何设计一个支持多模态(文本+图像)的大模型架构?
【大模型面试每日一题】Day 23:如何设计一个支持多模态(文本图像)的大模型架构? 📌 题目重现 🌟🌟🌟 面试官:我们需要构建一个同时处理文本和图像的多模态大模型&#…...
BUUCTF PWN刷题笔记(持续更新!!)
ciscn_2019_c_1 64位,没有开启保护。点进去没发现明显的漏洞函数,考虑泄露libc基地址的rop构造。先看看有多少gadget 估计也够用了。puts函数只接受一个参数,观看汇编看看用的哪个寄存器传输的参数。 用的是edi。但是我们怎么找到so的版本呢…...
Tare使用MCP|Win11安装UV
servers/src/git at main modelcontextprotocol/servers GitHub 进入Installation | uv 打开powershell 运行 (如果要删除 文章中也有删除的链接) powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" …...
小白的进阶之路-人工智能从初步到精通pytorch的基本流程详解-1
Pytorch大致流程一览表: 主题内容1 准备数据数据几乎可以是任何东西,但在开始之前,我们将创建一条简单的直线2 建立模型在这里,我们将创建一个模型来学习数据中的模式,我们还将选择损失函数,优化器并构建一个训练循环。3 拟合模型我们已经有了数据和模型,现在让模型尝试…...
linux kernel 编译
1. 获取内核源码 从官方仓库获取: 访问kernel.org下载所需版本的Linux内核源码压缩包(如linux-x.y.z.tar.xz)。或者使用Git克隆特定版本: bash git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.gitcd linux-stablegit checkout vX.Y.Z # 切…...
【氮化镓】偏置对GaN HEMT 单粒子效应的影响
2025年5月19日,西安电子科技大学的Ling Lv等人在《IEEE Transactions on Electron Devices》期刊发表了题为《Single-Event Effects of AlGaN/GaN HEMTs Under Different Biases》的文章,基于实验和TCAD仿真模拟方法,研究了单粒子效应对关断状态、半开启状态和开启状态下AlG…...
Assistants API
一、前言 0.1、从轰动一时的 OpenAI DevDay 说起 2023 年 11 月 6 日,OpenAI DevDay 发表了一系列新能力,其中包括:GPT Store 和 Assistants API 这一波操作一度被认为是创业公司终结者 0.2、GPTs 和 Assistants API 本质是降低开发门槛 可操控性和易用性之间的权衡与折中…...
AcWing 223. 阿九大战朱最学——扩展欧几里得算法
题目来源 223. 阿九大战朱最学 - AcWing题库 题目描述 自从朱最学搞定了 QQ 农场以后,就开始捉摸去 QQ 牧场干些事业,不仅在自己的牧场养牛,还到阿九的牧场放牛! 阿九很生气,有一次朱最学想知道阿九牧场奶牛的数量…...
开发指南116-font-size: 0的使用
平台前台的css样式里有几个地方用到了font-size: 0,这是个使用小技巧。原理说明:font-size 属性用于定义元素中文本的大小。当设置 font-size: 0 时,意味着该元素内的文本将不占据空间。当元素的 font-size 设置为零时,该元素内的…...
算法-数对的使用
1、数对可用于数组排序中,并且可记忆化排序前的元素下标 #include<iostream> #include<string> #include<bits/stdc.h> using namespace std; typedef long long ll; const int N 2e5 10; pair<int, int> a[N]; void solve() {ll n;cin …...
EmoBox:我与 CodeBuddy 共创的 Emoji 表情分类小工具
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 最近我萌生了一个想法,想做一个小而美的工具——一个叫「EmoBox」的 emoji 表情分类应用࿰…...
力扣HOT100之二叉树:199. 二叉树的右视图
这道题没啥好说的,首先定义一个向量来保存每一层的最后一个元素,直接用层序遍历(广度优先搜索)遍历二叉树,然后将每一层的最后一个元素加入到这个向量中即可。属于是二叉树层序遍历的模板题。 /*** Definition for a …...
力扣992做题笔记
左神做法的理论依据 我们可以通过 集合的包含关系 和 具体示例枚举 来直观理解这一推导过程。以下结合题目示例 1 进行详细说明: 示例 1 分析 输入:nums [1,2,1,2,3], k 2 目标:计算恰好包含 2 种不同整数 的子数组个数。 步骤一集合 A…...
特征值与特征向量的计算——PCA的数学基础
特征值与特征向量 定义 令 A {\bm A} A为 n n n \times n nn矩阵,如果存在非零向量 x {\bm x} x使得 A x λ x (1) {\bm A}{\bm x} \lambda {\bm x}\tag{1} Axλx(1) 成立,则称数 λ \lambda λ是矩阵 A {\bm A} A的特征值,称非零向量 x…...
vue2.0 的计算属性
个人简介 👨💻个人主页: 魔术师 📖学习方向: 主攻前端方向,正逐渐往全栈发展 🚴个人状态: 研发工程师,现效力于政务服务网事业 🇨🇳人生格言&…...
【数根】2022-1-24
缘由程序设计 -- 数根(2)-编程语言-CSDN问答 void 数根() {//缘由https://ask.csdn.net/questions/7635593?spm1005.2025.3001.5141std::string n;int m 0, a 0;std::cin >> n;while (n[a] ! \0)m n[a] - 0;a 0;while (m)a m - m / 10 * 10…...
【Android】一键创建Keystore + Keystore 参数说明 + 查询SHA256(JDK Keytool Keystore)
一键创建 Android Keystore 的实用方法与参数详解 在 Android 应用开发与发布中,**Keystore(签名文件)**扮演着至关重要的角色。本文将介绍如何通过 .bat 脚本一键创建 Keystore 文件,并详细讲解每一个参数的含义,帮助…...
laravel 通过Validator::make验证后,如何拿到验证后的值
在 Laravel 中,通过 Validator::make 创建的验证器实例验证数据后,可以通过以下方式获取验证后的值: 使用 validate() 方法 调用验证器实例的 validate() 方法,会返回经过验证的数据数组。如果验证失败,该方法会抛出 V…...
centos把jar包配置成服务并设置开机自启
1.准备好jar包,启动路径,日志路径 2.编写启动脚步 vim /etc/systemd/system/test.service [Unit] Descriptionlapis Requiresnetwork.target remote-fs.target ##启动优先级,在下面的服务之后启动 Afterkafka.service zookeeper.service n…...
CentOS相关操作hub(更新中)
CentOS介绍: CentOS(Community Enterprise Operating System)是基于 Red Hat Enterprise Linux(RHEL)源代码编译的开源企业级操作系统,提供与 RHEL 二进制兼容的功能 完全兼容 RHEL,可直接使用…...
数据库(一):分布式数据库
定义 分布式数据库(Distributed Database) 是指: 数据分布在多个物理位置,但对用户透明,表现为一个统一逻辑数据库的系统。 结构模式(三层模式扩展) 层次作用对应实体用户层提供统一视图&…...
人工智能(AI)与BIM:建筑业创新实践的深度融合
一、BIM在建筑领域的发展现状与挑战 作为建筑数字化的核心技术,BIM通过三维模型集成建筑全生命周期信息,已成为工程设计、施工及运维的标准工作流程。当前,BIM在碰撞检测、施工模拟、成本管控等场景的应用已较为成熟,但行业仍面临…...
FIR数字滤波器设计与实现
低通滤波器的设计与实现 打开Matlab ,运行命令filterDesigner,选择FIR 最小二乘或者其它,设置采样频率,和低通滤波器截止频率。点击设计滤波器,如图1: 点击目标生成.C头文件,滤波器系数如下: …...
软件架构之-论高并发下的可用性技术
论高并发下的可用性技术 摘要正文摘要 ;2023年2月,本人所在集团公司承接了长三角地区某省渔船图纸电子化审查系统项目开发,该项目旨在为长三角地区渔船建造设计院、以及渔船审图机构提供一个便捷化的服务平台。在此项目中,我作为项目组成员参与了项目建设工作,并担任系统架…...
阻塞队列:线程安全与生产者消费者模型解析
一、阻塞队列 阻塞队列就是基于普通队列做出扩展 1.线程安全的 如果针对一个已经满了的队列进行入队列,此时入队列操作就会阻塞,一直阻塞到队列不满(其他线程出队列元素)之后 如果针对一个已经空了的队列进行出队列,…...
【时时三省】(C语言基础)用函数实现模块化程序设计
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 为什么要用函数? 已经能够编写一些简单的C程序,但是如果程序的功能比较多,规模比较大,把所有的程序代码都写在一个主函数(main函数)中&#x…...
基于CATIA参数化圆锥建模的自动化插件开发实践——NX建模之圆锥体命令的参考与移植(一)
引言 在CATIA二次开发领域,Python因其灵活性和丰富的库支持逐渐成为高效工具开发的首选语言。本文将以笔者开发的CATIA锥体自动化建模工具为例,参考NX软件中高效锥体创建命令,深度解析基于PySide6 GUI框架与pycatia接口库的集成…...
天才简史——Paolo Fiorini与他的速度障碍法
一、背景 第一次“认识”Paolo Fiorini教授是看了DMP的体积避障论文《Dynamic Movement Primitives: Volumetric Obstacle Avoidance》,而且他的学生Michele Ginesi将相关代码开源了,后来查阅了Paolo Fiorini相关资料才发现他竟然是速度障碍法的作者&am…...
第五天的尝试
目录 一、每日一言 二、练习题 三、效果展示 四、下次题目 五、总结 一、每日一言 毅力是永久的享受。 没有人是一座孤岛,每个人都是这块大陆的一部分。 二、练习题 import numpy as np import matplotlib.pyplot as plt array np.array([1,2,3,4,5]) plt.plot…...
大小端模式和消息的加密解密
大小端模式 知识点一 什么是大小端模式 // 大端模式 // 是指数据的高字节保存在内存的低地址中 // 而数据的低字节保存在内存的高地址中 // 这样的存储模式有点儿类似于把数据当作字符串顺序处理 // 地址由小向大增加,数据从高位往低位放 …...
(1) 查看端口状态
1. lsof 和 netstat 命令的区别 1.1 lsof 概念:只有在 root 的命令下才能执行,否则无内容显示;root 命令下显示完全 lsof -i: 8080 1.2 netstat 普通用户下显示不完全,root 命令下显示完全 netstat -tunlp | grep 8080 1.3…...
【C++]string模拟实现
#pragma once #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> #include<assert.h> using namespace std; namespace liu {class string{public:using iterator char*;using const_iterator const char*;//string();//无参构造 string(const string&…...
Linux动静态库制作与原理
什么是库 库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。 本质上来说库是一种可执行代码的二进制形式,可以被操作系统…...
ArkUI Tab组件开发深度解析与应用指南
ArkUI Tab组件开发深度解析与应用指南 一、组件架构与核心能力 ArkUI的Tabs组件采用分层设计结构,由TabBar(导航栏)和TabContent(内容区)构成,支持底部、顶部、侧边三种导航布局模式。组件具备以下核心特…...
winrar 工具测试 下载 与安装
https://zhuanlan.zhihu.com/p/680852417 https://www.angusj.com/resourcehacker/#download 点击String Table,在展开列表中找到80:2052展开,删除1277行。点击右上方编译按钮,并保存。...
代码随想录算法训练营第四十四天
卡码网题目: 99. 岛屿数量100. 岛屿的最大面积 其他: 今日总结 往期打卡 99. 岛屿数量 跳转: 99. 岛屿数量 学习: 代码随想录公开讲解 问题: 给定一个由 1(陆地)和 0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水…...
每日Prompt:自拍生成摇头娃娃
提示词 将这张照片变成一个摇头娃娃:头部稍微放大,保持面部准确,身体卡通化。[把它放在书架上]。...
制作我的计算器
1. 界面布局 新建项目 MyCalculator,开始布局。 2. 静态布局 代码如下: // etc/pages/Index.ets Entry Component struct Index {build() {Column() {/*** 运算区*/Column() {TextInput({ text: 12x13 }).height(100%).fontSize(32).enabled(false).f…...
如何查看 Ubuntu开机是否需要密码
要查看 Ubuntu 开机是否需要密码,可以通过以下方法进行判断: 1. 检查自动登录设置 图形界面操作: 进入系统设置(Settings)→ 用户账户(User Accounts)→ 解锁设置(输入当前用户密码…...
今日行情明日机会——20250519
上证指数缩量收十字星,个股涨多跌少,这周反弹的概率比较大。 深证指数缩量调整,临近反弹,个股表现更好。 2025年5月19日涨停股主要行业方向分析 并购重组(政策驱动资产整合) • 涨停家数:16…...
【CodeBuddy 】从0到1,让网页导航栏变为摸鱼神器
【CodeBuddy 】从0到1,让网页导航栏变为摸鱼神器 我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 🌟嗨,我是LucianaiB&#…...