导读:本期聚焦于小伙伴创作的《如何在 Vue 3 工程化项目中集成与监控 Oracle GlassFish Java EE 服务器?》,敬请观看详情。把传统 Oracle GlassFish 这类 Java EE 应用服务器接入现代 Vue 3 前端工程,难点往往不在部署本身,而在构建链路与运行时监控的打通。GlassFish 默认提供 REST 管理接口与 JMX 通道,Vue 3 项目可通过 Vite 代理转发请求,在开发环境直接读取服务器运行状态。很多团队误以为必须借助后端中间件才能展示线程池与 JDBC 连接数,其实前端利用 axios 轮询管理端口即可完成基础观测。本文梳理从 npm 脚本封装到生产环境 Nginx 反代的完整路径,并对比单纯使用命令行管理的效率差异,给出可复用的配置片段与避坑要点。

在 Vue 3 技术栈逐渐成为主流的今天,不少团队仍须维护运行在 Oracle GlassFish 上的 Java EE 旧系统。将 GlassFish 纳入前端工程化体系,并不是要把应用服务器搬进浏览器,而是借助 Vue 3 的构建工具与开发服务器,统一管控界面、接口代理和状态可视化。GlassFish 自 4.0 起内置了基于 Jersey 的 REST 管理端点,默认监听 4848 端口,这与 Vue 3 使用的 Vite 开发服务器形成天然的互补结构。

如何在 Vue 3 工程化项目中集成与监控 Oracle GlassFish Java EE 服务器?

利用 Vite 代理打通 GlassFish 管理接口

Vue 3 官方推荐的构建工具 Vite 提供了 server.proxy 配置,可以把前端发起的 /glassfish 请求透明转发到本地或远程的 GlassFish 管理端口。这样做的好处是规避浏览器跨域限制,同时让前端代码以相对路径调用接口,便于在多环境间切换。在开发阶段,我们完全不需要在 GlassFish 上额外开启 CORS,也能在 Vue 组件里获取服务器实例信息。

具体配置时,需要在 vite.config.js 中声明代理目标与路径重写。下面的示例把 /api/gf 映射到 http://localhost:4848/management/domain,并去掉前缀。注意 GlassFish 的 REST 接口返回的是 JSON 格式,但部分老版本会在响应头里携带 text/plain,此时要在 axios 实例中强制设置响应解析方式,否则 Vue 层拿到的会是字符串而非对象。

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

export default defineConfig({
  plugins: [vue()],
  server: {
    proxy: {
      '/api/gf': {
        target: 'http://localhost:4848/management/domain',
        changeOrigin: true,
        rewrite: (path) => path.replace(/^/api/gf/, ''),
        headers: {
          'Accept': 'application/json'
        }
      }
    }
  }
})

这种代理方案相比直接让前端访问 4848 端口,优势在于统一了入口与鉴权。如果 GlassFish 开启了安全认证,可以把用户名密码放在 Vite 的环境变量文件里,通过代理的 configure 钩子自动注入 Authorization 头,而源码中不会泄露凭证。缺点是仅限开发期使用,生产环境需依靠反向代理服务器承接。

封装 npm 脚本实现 GlassFish 生命周期工程化

传统运维人员习惯用 asadmin 命令行启动、停止域,但在 Vue 3 项目里,我们可以把这类操作写进 package.json 的 scripts 中,使前端开发者用 npm run gf:start 就能拉起本地 GlassFish。这样降低了协作门槛,也让 CI 流水线能用同一套指令完成前后端联调环境的准备。

实现思路是借助 cross-env 设置 JAVA_HOME 与 GLASSFISH_HOME,再调用 asadmin 子命令。下面是一段 Windows 与 Linux 通用的脚本片段,其中路径分隔符使用了反斜杠与正斜杠混合写法以兼容系统,注意反斜杠必须保留。通过 pre 与 post 钩子,还能在启动前自动部署 Vue 构建产物到 GlassFish 的 docroot 目录。

{
  "scripts": {
    "gf:env": "cross-env GLASSFISH_HOME=C:\glassfish5 JAVA_HOME=C:\Java\jdk1.8.0_201",
    "gf:start": "npm run gf:env && asadmin start-domain domain1",
    "gf:stop": "npm run gf:env && asadmin stop-domain domain1",
    "gf:deploy": "npm run build && npm run gf:env && asadmin deploy --force dist/app.war"
  }
}

这种工程化封装的代价是项目对外部 JDK 与 GlassFish 版本产生耦合,因此建议在根目录放置 .nvmrc 与 gf-version 说明文件。对比单纯使用 Shell 脚本,npm scripts 能利用 Node 生态的变量替换与跨平台包,减少团队成员因操作系统差异导致的部署失败。实践中我们还应把 asadmin 输出通过 tee 命令导入日志,方便 Vue 端的错误页抓取关键字。

在 Vue 3 组件中可视化监控 Java EE 运行状态

GlassFish 的 REST 管理树包含 server、jvm、thread-pools 等节点,Vue 3 的组合式 API 非常适合定时拉取这些数据并渲染成图表。我们可以用 ref 与 onMounted 建立轮询,用 axios 访问前面配置的 /api/gf/servers/server/monitoring-service 端点,取出 JVM 内存与活动线程数。

下方组件演示了如何把 GlassFish 的监控数据变成响应式对象。为避免频繁请求拖垮应用服务器,代码中设置了 5 秒间隔与请求取消逻辑。当组件卸载时,通过 AbortController 中断进行中的连接,这符合 Vue 3 对资源清理的要求,也减轻 GlassFish 的 HTTP 线程压力。

<template>
  <div>
    <h3>GlassFish 监控</h3>
    <p>堆内存: {{ memUsed }} MB</p>
    <p>活动线程: {{ threadCount }}</p>
  </div>
</template>

<script setup>
import { ref, onMounted, onUnmounted } from 'vue'
import axios from 'axios'

const memUsed = ref(0)
const threadCount = ref(0)
let timer = null
const controller = new AbortController()

onMounted(() => {
  const load = async () => {
    const res = await axios.get('/api/gf/servers/server/monitoring-service', {
      signal: controller.signal
    })
    memUsed.value = res.data.extraProperties.entity.jvm.usedHeapSize / 1048576
    threadCount.value = res.data.extraProperties.entity.thread-pools.totalcount
  }
  load()
  timer = setInterval(load, 5000)
})

onUnmounted(() => {
  clearInterval(timer)
  controller.abort()
})
</script>

从架构角度看,让 Vue 3 直接消费 GlassFish 监控接口属于轻量级方案,适合内部运维面板。若面对多实例集群,应在 GlassFish 前增加 Prometheus exporter,由 Vue 通过 Prometheus 查询层获取聚合指标,否则前端要维护大量轮询连接。无论哪种方式,工程化集成的核心都是把 Oracle Java EE 服务器的能力映射到现代前端工作流中,降低上下文切换成本。

Vue3GlassFishJava_EE修改时间:2026-08-16 05:26:30

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。