Tomcat+cpolar 让 Java Web 应用轻松触达公网实操案例

Tomcat+cpolar 让 Java Web 应用轻松触达公网实操案例
在这里插入图片描述

Tomcat 作为轻量级 Java 应用服务器,核心功能是对 Java Servlet 和 JSP 提供完善支持,能稳定托管各类 Java Web 应用,它的适用人群覆盖了从入门级 Java 开发者到中小企业的技术人员,无论是个人开发调试小项目,还是企业部署中小型 Web 应用,都能适配。其优点十分突出,部署流程简单易懂,新手也能快速上手,同时占用系统资源少、启动速度快,兼容性强,绝大多数 Java 项目都能在其上正常运行。

使用 Tomcat 的过程中,有不少实用的心得值得分享:日常使用时要注意定期检查 Tomcat 的运行日志,及时发现端口占用、应用部署失败等问题;另外,默认的配置文件不要随意修改,若需调整端口、线程数等参数,建议先备份原文件,避免配置错误导致服务无法启动;还有,开发环境和生产环境的配置要区分开,生产环境需关闭不必要的调试功能,提升运行稳定性。

在这里插入图片描述

Tomcat 的出色功能

仅在局域网内使用 Tomcat 会带来诸多局限性:比如开发者在家想继续调试公司局域网内的 Tomcat 项目,只能借助远程控制软件,操作繁琐且效率低;企业给异地客户演示基于 Tomcat 开发的官网时,无法直接让客户访问,只能通过录屏、远程协助等方式,不仅体验差,还容易出现沟通偏差;团队协作开发时,异地的同事无法直接访问共享的 Tomcat 服务,只能频繁传输项目文件,增加了沟通和时间成本。

而将 Tomcat 与 cpolar 内网穿透结合,能完美解决上述问题:无需申请公网 IP,也不用折腾路由器端口映射,几分钟就能打通公网访问通道,无论是出差在外还是居家办公,只要有网络就能访问本地 Tomcat 上的应用;cpolar 还能提供固定公网地址,不用频繁更换分享链接,且支持 HTTPS 加密,保障数据传输安全,既降低了网络配置的门槛,又提升了 Tomcat 使用的灵活性和安全性,让 Java Web 应用彻底摆脱局域网的束缚。

在这里插入图片描述
稳定又能随时随地享受服务的超级组合实现极其简单,按照下面的教程包会!

本文将带你从零开始,一步步在Linux系统中安装Tomcat,部署Web应用,并通过cpolar实现公网访问。全程命令清晰、步骤简明,5分钟内即可让你的Java项目“上线”,无论是给客户演示、团队协作,还是学习练手,都极为高效便捷。

image-20250826101154874

1.在CentOs7上安装OpenJDK

在已安装套件中查找含有java字符串的文件:

rpm-qa|grepjava

若没有安装则开始安装吧!

查询yum中存在的JDK版本:

yum list |grep java-11 
image-20250826103345132

执行以下命令安装:

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

配置环境变量:

vim /etc/profile 
image-20250826105622123

在最后一行,添加下列内容:

xport JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.13.0.8-1.el7_9.x86_64 exportJRE_HOME=$JAVA_HOMEexportCLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATHexportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
image-20250826110824367

使文件生效:

source /etc/profile 

验证是否生效:

whereisjava
image-20250826111158436

这样我们就安装成功啦!

2.安装Tomcat10

首先到Tomcat官网下载安装包,我下载的是最新版的Tomcat10,具体步骤如下:

安装下图操作:

image-20250826145512750
image-20250826145707738
image-20250826145740444
image-20250826145836904
image-20250826145917792

打开虚拟机,切换到root用户下,创建Tomcat用户,命令如下:

useradd tomcat 

设置密码:

passwd tomcat 
image-20250826154329831

切换到Tomcat用户,能切换过去,代表成功创建该用户了。

su - tomcat 
image-20250826154402067

把 apache-tomcat-10.1.9.tar.gz上传到/home/tomcat/目录下。

image-20250826154451234
image-20250826154515289

上传成功。

image-20250826154532464

解压。

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

给解压后的Tomcat,重命名一下:

mv apache-tomcat-10.1.9 tomcat 
image-20250826154916980

启动:

cd tomcat/ bin/startup.sh 
image-20250826160452317

启动成功!

image-20250826160928137

关闭tomcat命令

bin/shutdown.sh 

这样我们就在CentOS7上安装完Tomcat啦!

3.简单玩一下Tomcat

在这里,我们可以看到,都是千篇一律的页面,那么我们可不可以把tomcat页面变成自己的页面呢?

答案是:当然可以!

我们只需要找到它的前端代码,简单修改就可以啦!

cd /home/tomcat/tomcat/webapps/ROOT 
image-20250826162535805

想要改文字、格式就修改index.jsp。

image-20250826162834562

想要改样式就选择tomcat.css。

image-20250826162914763

我这里示例一下改主页文字。

vi index.jsp 

在Home前加上”小单的“几个字:

image-20250826163936195

回到bin目录,重启一下:

image-20250826164053514

重启后,更改成功啦!

image-20250826164504219

那么我有一个问题,倘若你同事下班想使用一下你的Tomcat,该怎么办呢?

别急,cpolar来帮助你,解决这一烦恼。

4.安装cpolar实现随时随地开发

cpolar 可以将你本地电脑中的服务(如 SSH、Web、数据库)映射到公网。即使你在家里或外出时,也可以通过公网地址连接回本地运行的开发环境。

❤️以下是安装cpolar步骤:

使用一键脚本安装命令:

sudocurl https://get.cpolar.sh |sh
image-20250826172453496

安装完成后,执行下方命令查看cpolar服务状态:(如图所示即为正常启动)

sudo systemctl status cpolar 
image-20250826172604013

Cpolar安装和成功启动服务后,在浏览器上输入虚拟机主机IP加9200端口即:【http://192.168.42.101:9200】访问Cpolar管理界面,使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可:

打开浏览器访问本地9200端口,使用cpolar账户密码登录即可,登录后即可对隧道进行管理。

image-20250826172625263

5.配置公网地址

登录cpolar web UI管理界面后,点击左侧仪表盘的隧道管理——创建隧道:

  • 隧道名称:可自定义,本例使用了:tomcat,注意不要与已有的隧道名称重复
  • 协议:http
  • 本地地址:8080
  • 域名类型:随机域名
  • 地区:选择China Top点击创建:
image-20250826175205560

创建成功后,打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了公网地址,接下来就可以在其他电脑或者移动端设备(异地)上,使用地址访问。

image-20250826175248080

访问成功。

image-20250826175317499

6.保留固定公网地址

使用cpolar为其配置二级子域名,该地址为固定地址,不会随机变化。

image-20250827103024446

点击左侧的预留,选择保留二级子域名,地区选择china top,然后设置一个二级子域名名称,我这里演示使用的是tomcat,大家可以自定义。填写备注信息,点击保留。

image-20250827103127242

登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的隧道tomcat,点击右侧的编辑

修改隧道信息,将保留成功的二级子域名配置到隧道中

  • 域名类型:选择二级子域名
  • Sub Domain:填写保留成功的二级子域名
  • 地区: China Top

点击更新

image-20250827103351334

更新完成后,打开在线隧道列表,此时可以看到随机的公网地址已经发生变化,地址名称也变成了保留和固定的二级子域名名称。

image-20250827103433119

最后,我们使用固定的公网地址在任意设备的浏览器中访问,可以看到成功访问本地部署的tomcat页面,这样一个永久不会变化的二级子域名公网网址即设置好了。

image-20250827103556724

恭喜!你成功了! 现在,无论你身在何处,用手机、平板还是另一台电脑,都能看到并操作你本地运行的tomcat了!

总结

综上,Tomcat 凭借轻便、易部署的特性,是 Java Web 应用运行的优质载体,而 cpolar 则弥补了其局域网访问的短板,二者结合无需复杂配置,就能让本地 Tomcat 服务实现公网访问。这种组合不仅适用于开发者远程调试、团队协作,也能满足企业异地演示项目的需求,是低成本、高效率的实用解决方案,能切实提升 Java Web 应用的使用场景和便捷性。

Read more

【C++】STL之list模拟实现:关于链表容器的双向迭代器你知道多少?

【C++】STL之list模拟实现:关于链表容器的双向迭代器你知道多少?

前言: 前面的博客中我已经介绍了STL核心容器之一的list相关接口的使用,今天我们就从底层出发,来模拟实现一下list的那些核心接口函数。同时,也来感受一下list的双向迭代器到底与string和vector的随机迭代器有哪些区别? list容器功能接口介绍:https://blog.ZEEKLOG.net/Miun123/article/details/151685386?spm=1001.2014.3001.5502 废话不多说,我们直接进入今天的正题👇️👇️👇️ list容器深度剖析及模拟实现 我们想要模拟实现list容器,那就要理解list容器的底层结构。前面的博客已经提到,其本质就是一个双向链表,所以,成员变量就应该包含一个记录头节点的指针,以及记录有效节点个数的变量。同时,为了list容器可以满足不同类型的数据,我们将所有的类实现为类模板。 1、定义节点结构 struct创建的类默认所有的成员但是公开的,而节点结构就需要公开被list访问。 template<class T> struct list_node { // 成员变量 T _da

By Ne0inhk
排序--数据结构初阶(4)(C/C++)

排序--数据结构初阶(4)(C/C++)

文章目录 * 前言 * 理论部分: * 1.直接插入排序 * 2.希尔排序 * 3.直接选择排序 * 4.堆排序 * 5.冒泡排序 * 6.快速排序 * 归并排序 * 非比较排序 * 计数排序 * 作业部分 前言 这是数据结构初阶的最后一期,虽然来说在C++的库函数里面有sort函数可以代替这里所有的方法,并且时间复杂度也是优于他们的,但是sort函数是由他们写出来的,因此,还是是有必要学习一下的 理论部分: 这里的代码实现都是按升序来的 排序的话建议先写单趟再写整体 这些排序在两数相等的时候一般是不进行操作的(一般这么写) 1.直接插入排序 就是目前在最后的那个数跟前面每个数比,看看要插哪 时间复杂度:O(n2) 最好的情况下是O(n) 在小段小段有序时有极大的优势(相对于选择排序跟冒泡排序) 代码实现: void InsertSort(int* a, int n)

By Ne0inhk
大模型应用:最优路径规划实践:A*算法找最优解,大模型做自然语言解释.91

大模型应用:最优路径规划实践:A*算法找最优解,大模型做自然语言解释.91

一、引言         算法是个很有意义的课题,尽管大模型让我们不需要像以前学习机器学习那样,需要很深的数学基础,但结合算法来应用大模型确实是个很有趣的事情,传统算法经过数十年发展,已在路径规划、优化计算等领域达到极高的精确度;另一方面,大语言模型的崛起让人机交互变得前所未有的自然流畅。然而,一个不容忽视的现实是:再精确的算法,如果用户看不懂、不会用,就只是实验室里的玩具;再流畅的表达,如果缺乏技术可靠性,就只是华丽的空谈。         想象这样一个场景:导航系统为你计算出了一条理论上最优的路线,却只能用一串坐标告诉你怎么走;或者,一个能言善道的助手热情地为你指路,却把你带进了死胡同。这两种情况,本质上都是技术能力与用户体验之间的断裂。这种断裂并非偶然,而是单一技术路线的固有局限。算法擅长计算却不善表达,模型善于沟通却难以精确,各有所长,也各有所短。因此,真正的突破不在于让某一方变得更强大,而在于让两者形成互补协作的关系,用各自的长处弥补对方的短板。         这是我们今天想探讨得A*算法与大模型融合的核心价值所在。A*算法如同精密的"空间计算大脑",保证路径的数学最

By Ne0inhk
【超详细】DEIM:最强实时目标检测算法-Visdrone2019无人机数据集实战

【超详细】DEIM:最强实时目标检测算法-Visdrone2019无人机数据集实战

主要内容如下: 一、论文解析 二、基于DEIM-D-FINE-S训练Visdrone2019无人机数据集 1、Visdrone2019数据集介绍 2、模型训练、验证及测试 3、onnx导出与测试 4、与YOLOv8\11进行结果对比 服务器:NVIDIA RTX4090 24G 运行环境:Python=3.8(要求>=3.8),torch2.3.1+cu121(要求>=2.0.1) Visdrone2019-COCO格式数据集百度AI stduio下载链接:https://aistudio.baidu.com/datasetdetail/226107/0 Visdrone-YOLO格式数据集下载链接:https://aistudio.baidu.com/

By Ne0inhk