Leo小李头像
Java Web项目本地跑起来了,怎么让同事下班后也能直接访问?我从JDK、Tomcat到固定地址完整走了一遍封面图

Java Web项目本地跑起来了,怎么让同事下班后也能直接访问?我从JDK、Tomcat到固定地址完整走了一遍

前言

做 Java Web 项目时,我以前最容易停在“本机能打开”这一步:JDK 装好了,Tomcat 也启动了,8080 页面能访问,看起来一切正常。但只要同事离开同一局域网,或者自己想用手机测试,那个 localhost 和内网 IP 就突然失去了意义。

这次我把整条链路从头走了一遍:先在 CentOS 7 上安装 OpenJDK 11,再单独创建 tomcat 用户,上传并解压 Tomcat 10.1.9,启动后确认默认页面可以访问。为了验证 ROOT 应用确实在工作,我还直接修改了 index.jsp,重启后再看页面变化。

本地部分跑通以后,再把 Tomcat 的 8080 页面带到外部网络,先用随机地址验证,最后切到固定二级子域名。

这篇重点不是追求“5分钟上线”,而是把 Java 运行环境、Tomcat 用户、ROOT 页面、8080 访问和外部入口之间的关系讲清楚。

另外,源配置里还有一处 xport JAVA_HOME=... 的疑似拼写错误,我会保留代码不动,但正文会明确提醒,避免读者机械复制后卡在环境变量这一步。

这种文章如果只写成“安装Tomcat教程”,其实会浪费掉后半段最有价值的部分。真正有用的是把“本地服务为什么只有自己能看、为什么同事回家后就访问不到、8080又是怎样被带到外部网络”串成一条完整链路。这样以后换成自己的Java项目、API或者测试页面时,思路也能直接复用。

image-20250826101154874

1 先把这篇真正要跑通的链路看明白

这篇其实分成四层:

  1. Java 运行环境;
  2. Tomcat 应用服务器;
  3. ROOT Web 页面;
  4. 外部浏览器访问入口。

也就是:

OpenJDK 11 → Tomcat 10.1.9 → ROOT应用 → 8080 → 外部访问

如果前面某一层没跑通,后面再配公网入口也没有意义。

2 先检查CentOS 7上有没有Java

先查询已安装包:

rpm -qa | grep java

如果没有,再查询 yum 中可用的 Java 11:

yum list | grep java-11

image-20250826103345132

这里使用的是 OpenJDK 11。

3 安装OpenJDK 11

执行:

yum install -y java-11-openjdk-headless-11.0.13.0.8-1.el7_9.x86_64 java-11-openjdk-11.0.13.0.8-1.el7_9.x86_64 java-11-openjdk-devel-11.0.13.0.8-1.el7_9.x86_64

安装完成以后检查版本:

java --version

image-20250826104223874

能正常返回 Java 版本,说明运行环境已经基本准备好。

4 配置JAVA_HOME环境变量

编辑:

vim /etc/profile

image-20250826105622123

在文件最后加入:

xport JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.13.0.8-1.el7_9.x86_64
export JRE_HOME=$JAVA_HOME
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

image-20250826110824367

这里需要特别提醒一处。

第一行写的是:

xport JAVA_HOME=...

从语法看,这里很可能应该是:

export JAVA_HOME=...

但为了保持现有技术内容不被擅自改动,代码块仍然原样保留。

真正执行时,如果 JAVA_HOME 没有生效,应该首先检查这一行拼写。

5 让环境变量生效

执行:

source /etc/profile

然后检查 Java 路径:

whereis java

image-20250826111158436

到这里,Java 环境这一层基本完成。

6 下载Tomcat 10安装包

接下来进入 Tomcat 部署。

源操作下载的是 Tomcat 10.1.9。

下载页面:

image-20250826145512750

继续选择:

image-20250826145707738

image-20250826145740444

image-20250826145836904

image-20250826145917792

现有操作里把它称为“最新版 Tomcat 10”。

这个说法具有时效性。

更准确的写法应该是:

本文演示版本为 Tomcat 10.1.9。

实际下载时,应以自己准备使用的版本为准。

7 给Tomcat单独创建系统用户

切到 root 后执行:

useradd tomcat

设置密码:

passwd tomcat

image-20250826154329831

然后切换到 Tomcat 用户:

su - tomcat

image-20250826154402067

这个做法比直接长期用 root 运行 Tomcat 更合理。

至少在账号层面把应用服务和系统最高权限分开了。

8 把安装包上传到Tomcat用户目录

源操作把:

apache-tomcat-10.1.9.tar.gz

上传到:

/home/tomcat/

image-20250826154451234

image-20250826154515289

上传完成:

image-20250826154532464

9 解压Tomcat

执行:

tar -zxvf apache-tomcat-10.1.9.tar.gz

image-20250826154644951

然后改名:

mv apache-tomcat-10.1.9 tomcat

image-20250826154916980

最终目录变成:

/home/tomcat/tomcat

这样后面脚本路径更短,也更容易记。

10 启动Tomcat

进入目录并启动:

cd tomcat/
bin/startup.sh 

image-20250826160452317

如果脚本正常执行,Tomcat 会在后台启动。

接下来应该从浏览器确认页面。

image-20250826160928137

这里真正验证的是:

Java环境 + Tomcat启动 + 8080页面

都已经工作。

11 停止Tomcat

需要停止时执行:

bin/shutdown.sh

这条命令和 startup.sh 对应。

学习和调试阶段经常会用到。

12 不只看默认页,再改一次ROOT应用验证

如果一直只看到 Tomcat 默认页,很容易把“服务器启动”和“自己的 Web 应用能工作”混在一起。

所以这篇继续进入:

cd /home/tomcat/tomcat/webapps/ROOT

image-20250826162535805

Tomcat 默认 ROOT 应用就在这里。

13 页面文字在index.jsp里

默认页面主要入口:

index.jsp

image-20250826162834562

样式文件则包括:

tomcat.css

image-20250826162914763

这篇实际做的是修改首页文字。

14 修改index.jsp

执行:

vi index.jsp

然后在页面文字里加入内容:

image-20250826163936195

修改以后回到 bin 目录重启 Tomcat:

image-20250826164053514

重启后页面发生变化:

image-20250826164504219

这一步很重要。

它证明:

当前访问的不是单纯的 Tomcat 服务状态页,而是 ROOT Web 应用内容确实被修改并重新加载。

15 这篇其实没有部署独立WAR包

虽然标题很容易写成“部署 Web 应用”,但正文实际没有演示:

  • 上传独立 .war 文件;
  • 自定义 Context;
  • 独立项目目录;
  • Tomcat Manager 部署;
  • Maven / Gradle 打包。

实际做的是:

修改 Tomcat 自带 ROOT 应用中的 index.jsp。

所以更准确的定位是:

Tomcat 基础部署 + ROOT 页面修改 + 外部访问。

如果后面要部署真正的 Java Web 项目,可以继续把 WAR 包放入 webapps,或者配置独立应用目录。

16 本地能打开,不代表外部网络能访问

在同一局域网里,Tomcat 可以通过:

http://服务器IP:8080

访问。

但同事回家以后,这个内网 IP 通常就不可达了。

这也是后半部分要解决的问题。

17 安装cpolar

执行:

sudo curl https://get.cpolar.sh | sh

image-20250826172453496

安装完成以后检查服务:

sudo systemctl status cpolar

image-20250826172604013

然后通过:

服务器IP:9200

进入 Web UI:

image-20250826172625263

后面的隧道都在这里配置。

18 给Tomcat的8080创建随机公网入口

进入:

隧道管理 → 创建隧道

参数:

  • 隧道名称:tomcat
  • 协议:http
  • 本地地址:8080
  • 域名类型:随机域名
  • 地区:China Top

image-20250826175205560

创建以后查看在线隧道:

image-20250826175248080

复制公网地址测试:

image-20250826175317499

页面能够从外部网络打开以后,说明:

外部浏览器 → 公网地址 → cpolar → CentOS 7:8080 → Tomcat ROOT应用

这条链已经跑通。

19 远程演示最适合这种临时入口

如果只是:

  • 给同事看一下页面;
  • 测试手机端;
  • 做课堂演示;
  • 临时联调;

随机公网地址已经足够。

这种场景不一定需要先买云服务器、配置域名、Nginx 和证书。

但这并不意味着它适合直接替代正式部署。

20 长期访问再配置固定二级子域名

进入预留页面:

image-20250827103024446

示例名称使用:

tomcat

image-20250827103127242

然后进入隧道列表,找到 tomcat:

修改:

  • 域名类型:二级子域名;
  • Sub Domain:填写预留名称;
  • 地区:China Top。

更新:

image-20250827103351334

查看在线隧道:

image-20250827103433119

最后使用固定地址访问:

image-20250827103556724

页面可以正常打开以后,固定入口配置完成。

具体套餐、固定地址规则和使用条件可能变化,应以实际账号页面为准。

21 “固定地址”不等于“生产级上线”

这一点很容易被标题带偏。

现在已经做到的是:

Tomcat页面有一个长期可记的外部访问入口。

但正式生产环境通常还会继续考虑:

  • HTTPS 与证书策略;
  • Nginx / Apache 反向代理;
  • 防火墙;
  • Tomcat 用户权限;
  • 日志;
  • JVM 参数;
  • 进程托管;
  • 自动重启;
  • 应用备份;
  • 安全更新;
  • 访问认证;
  • 数据库安全。

所以本文更适合:

学习、测试、开发联调和临时演示。

22 8080公开以后,最该检查的是暴露范围

如果只是展示一个 ROOT 首页,风险相对容易控制。

但如果 Tomcat 里还有:

  • Manager;
  • Host Manager;
  • 后台管理系统;
  • 测试接口;
  • 内部 API;
  • 调试页面;

就不应该默认一起暴露给公网。

更合理的是:

只开放真正需要外部访问的服务。

应用负责业务。

cpolar负责网络入口。

23 这套链路适合什么场景

比较适合:

  • Java Web 初学;
  • Tomcat 安装练习;
  • 本地页面临时展示;
  • 手机测试;
  • 同事远程查看;
  • 小型联调;
  • 课堂演示。

如果是正式线上业务,更推荐按照生产环境架构重新设计,而不是直接把开发用 Tomcat 8080 暴露出去。

24 整条链路回头看

本地部分:

CentOS 7 → OpenJDK 11 → Tomcat 10.1.9 → ROOT应用 → 8080

远程部分:

外部浏览器 → 公网地址 → cpolar → 8080 → Tomcat

真正有价值的不是“几分钟上线”。

而是把:

Java运行环境、应用服务器、Web应用和网络入口

四层关系一次理清楚。

总结

这次从 OpenJDK 11 一直走到 Tomcat 的外部访问,我觉得最有用的不是“多快能上线”,而是终于把 Java Web 服务真正经过了几层说清楚:先有 Java 环境,再有 Tomcat,Tomcat 里还有具体 ROOT 应用,最后才轮到 8080 怎么被外部浏览器访问。

本地阶段不只启动了 Tomcat,还实际进入 webapps/ROOT 修改了 index.jsp,重启以后确认页面内容已经变化。这个验证比只看到默认欢迎页更有意义。

远程部分只是给 8080 增加网络入口。它适合学习、联调和临时演示,但不能因为固定地址能打开,就直接把它理解成完整生产部署。

如果后面继续往真正的 Java Web 项目走,下一步更值得做的是 WAR 包部署、systemd 托管、反向代理、HTTPS 和访问安全,而不是只停留在“页面能从公网打开”。

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/leopold_man/article/details/167702222

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--