【JavaEE】如何将JavaWeb项目部署到Linux云服务器?
写在前面
大家好,我是黄小黄。不久前,我们基于 servlet 和 jdbc 完善了博客系统。本文将以该系统为例,演示如何将博客系统部署到 Linux 云服务器。
博客系统传送门:
【JavaEE】前后端分离实现博客系统(页面构建)
【JavaEE】前后端分离实现博客系统(后端实现)
需要做什么?
如果我们想要在 Linux 系统上搭建 Java 运行环境,并且能够部署 Java Web 程序,需要满足以下几点(对于之前写的博客系统而言):
- 安装JDK
- Tomcat
- MySQL
话不多说,正文开始!

文章目录
- 写在前面
- 1 云服务器环境配置
- 1.1 JDK 的安装
- 1.2 Tomcat 的安装
- 1.2.1 安装步骤
- 1.2.2 如何验证 Tomcat 是否启动成功?
- 1.3 MySQL 的安装
- 1.3.1 yum 安装 MariaDB
- 1.3.2 更改配置
- 1.3.3 启动服务
- 2 部署博客项目
- 2.1 服务器上准备好项目依赖的数据
- 2.2 使用 Maven 重新打包项目
- 2.3 将 war包 上传到云服务器
- 3 通过公网 ip 访问部署的博客项目
- 写在最后
1 云服务器环境配置
1.1 JDK 的安装
对于 JDK 的安装,我们采用基于 yum 的方式进行。yum,是一个“包管理器”,可以理解成我们手机里的应用商店~
通过以下命令,可以列出 应用商店服务器 上所有的软件包和名字:
yum list
但是,对于一个应用商店而言,其包含的软件包的量是非常多滴~ 如果你草率的键入了该命令,就会造成刷屏的情况~ 这时,大概率你就只能对着屏幕大眼儿瞪小眼儿啦!

我们采用如下命令,对结果进行匹配:
yum list | grep jdk
|: 管道,其功能是将前一个命令的输出,作为后一个命令的输入;- grep:进行字符串过滤;
- grep jdk:根据 yum list 输出的结果,来匹配包含 jdk 三个字母的文本行。

选择 java-1.8.0-openjdk-devel.x86_64 进行下载。
- devel:表示开发工具,也就是jdk,东西最全~
- x86_64:表示这个软件包适用于 64位的x86 CPU(x86是最主流的一种CPU架构,描述了CPU的大概规格)
执行如下命令进行安装,并键入 y 确认即可:
yum install java-1.8.0-openjdk-devel.x86_64

1.2 Tomcat 的安装
1.2.1 安装步骤
yum list | grep tomcat

可见,使用 yum 方式,程序包都比较古老。而我们之前所写的博客系统使用到的Tomcat是8.5系列的版本。为了避免版本问题导致程序 bug,我们采用其他方式来安装 Tomcat。(Tomcat、JDK 和 Servlet版本必须匹配)
进入 Tomcat 官网,选择apache-tomcat-8.5.87.zip点击下载
https://tomcat.apache.org/download-80.cgi

下载好后可以直接将其拖拽到 xshell 中即可上传服务器。但是 默认情况下拖拽一般是不成功的,因为拖拽上传依赖 rz 命令, 需要使用如下指令来安装依赖的命令,才能上传:
yum install lrzsz
- rz 命令:将 windows 上的文件传给 Linux 服务器
- sz 命令:将 Linux 上的文件传给 windows

直接将下载好的apache-tomcat-8.5.87.zip拖拽到 xshell 中以上传服务器。

使用如下命令对其进行解压缩
unzip apache-tomcat-8.5.87
如果无法 unzip ,就可以先使用 yum 进行安装,不得不说,yum 是真滴方便~
yum install unzip
要想启动 tomcat,需要用到 startup 脚本。
- .bat:windows 使用
- .sh:Linux 使用

可是在 Linux 环境下无法通过双击启动,该怎么做呢?
- 首次使用,需要先给所有的 .sh 文件设置可执行权限(在bin目录下执行如下指令):
chmod +x *.sh
绿色表示可执行!

- 启动 Tomcat!(在bin目录下执行如下指令):
sh startup.sh

1.2.2 如何验证 Tomcat 是否启动成功?
方式1️⃣:查看 tomcat 进程
ps aux | grep tomcat
- ps命令:相当于 Linux 上的任务管理器,会打印出当前主机的所有进程。
- grep tomcat:匹配 tomcat 进程(按照 tomcat 关键字进行匹配)

方式2️⃣:查看端口号,tomcat 默认端口8080
netstat -anp | grep 8080

上图所示,说明 Tomcat 启动成功。在一个主机上,一个端口只能被一个进程绑定。如果出现端口号冲突的情况,可以通过 vim 修改 server.xml 配置文件,修改端口号解决。
方式3️⃣:可以验证是否能够访问 tomcat 欢迎页面,如果能访问则启动成功。
访问地址为:服务器的外网IP : Tomcat端口号,例如:101.40.252.157 : 8080
不过,一般情况下,都会连接超时。云服务器厂商,为了保护服务器不受到黑客攻击,对哪些端口能被外部访问进行了严格的限制,需要在云服务器后台界面,配置允许对外访问的端口~ 以腾讯云为例:

于是就可以正常访问啦!

1.3 MySQL 的安装
1.3.1 yum 安装 MariaDB
MariaDB 和 MySQL 是孪生兄弟。(MySQL被收购后的新代码分支,一般感知不到 MariaDB 与 MySQL 的区别)
安装 mariadb 服务
yum install -y mariadb-server
安装 mariadb 命令行客户端
yum install -y mariadb
安装 mariadb C library
yum install -y mariadb-libs
安装 mariadb 开发包
yum install -y mariadb-devel
1.3.2 更改配置
配置数据库支持 utf8 ,使用 cd 进入对应的目录而后使用 vim 进行修改。
-
更改
/etc/my.cnf.d/client.cnf文件[client]下加一行配置default-character-set=utf8

-
更改
/etc/my.cnf.d/mysql-client.cnf文件[mysql]下加一行配置default-character-set=utf8

-
更改
/etc/my.cnf.d/server.cnf文件[mysqld]下加配置:

collation-server = utf8_general_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
sql-mode = TRADITIONAL
1.3.3 启动服务
启动服务
systemctl start mariadb
设置服务开机自启动
systemctl enable mariadb
测试连接
mysql -uroot

2 部署博客项目
2.1 服务器上准备好项目依赖的数据
将博客系统项目中的 db.sql 粘贴到服务器上运行,构建出博客系统需要的数据库、数据表以及必要的数据。

为了使代码在服务器上运行,JDBC也能正常连接到数据库,需要对代码进行微调:主要是更改之前的 DBUtil.java 里的密码,使其与服务器上的数据库的密码匹配~

2.2 使用 Maven 重新打包项目
基于 Maven 的 Package 操作生成 War 包。在 pom.xml 文件中添加如下配置,而后双击 package。
<packaging>war</packaging><build><finalName>BlogSystem</finalName></build>

最终会得到一个 BlogSystem.war 文件

2.3 将 war包 上传到云服务器
先 cd 到 /root/apache-tomcat-8.5.87/webapps 目录,即刚刚安装好的 Tomcat 的 webapps 目录。

将刚刚 package 打包的 war 包,即 BlogSystem.war 文件拖进 Xshell,上传至服务器。

Tomcat 处于运行状态时,会自动对 war 包进行解压缩。

3 通过公网 ip 访问部署的博客项目
网址为:云服务器公网IP : Tomcat 端口号 / 项目路径
例:http://101.40.252.157:8080/BlogSystem/blog_login.html

写在最后
博客系统的完整代码已上传 gitee,如有需要请自取:https://gitee.com/hxh2001/blog-system
以上便是本文的全部内容啦!创作不易,如果你有任何问题,欢迎私信,感谢您的支持!

相关文章:
【JavaEE】如何将JavaWeb项目部署到Linux云服务器?
写在前面 大家好,我是黄小黄。不久前,我们基于 servlet 和 jdbc 完善了博客系统。本文将以该系统为例,演示如何将博客系统部署到 Linux 云服务器。 博客系统传送门: 【JavaEE】前后端分离实现博客系统(页面构建&#…...
Mysql常用命令
mysql连接: [roothost]# mysql -u root -p Enter password:******创建数据库: CREATE DATABASE 数据库名; 删除数据库: drop database 数据库名; 使用mysqladmin删除数据库: [roothost]# mysqladmin -u root -p dr…...
【洛谷刷题】蓝桥杯专题突破-深度优先搜索-dfs(4)
目录 写在前面: 题目:P1149 [NOIP2008 提高组] 火柴棒等式 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述: 输入格式: 输出格式: 输入样例: 输出样例: 解题思路: …...
在Win10以及SDK为33的环境下——小米便签项目的搭建
文章目录0. 我的操作系统和开发环境1. 相关文件下载:2. import project:2.1 用import project导入项目3. make project:3.1 AS中的命令行乱码问题:3.2 依赖库缺失问题:3.3 关于targetSdkVersion3.4 关于Missing URL3.5 关于Manifest merger f…...
FPGA纯verilog实现RIFFA的PCIE通信,提供工程源码和软件驱动
目录1、前言2、RIFFA简介RIFFA概述RIFFA架构RIFFA驱动3、vivado工程详解4、上板调试验证并演示5、福利:工程代码的获取1、前言 PCIE是目前速率很高的外部板卡与CPU通信的方案之一,广泛应用于电脑主板与外部板卡的通讯,PCIE协议极其复杂&…...
Linux网络配置
文章目录一、Linux网络配置原理图二、查看网络IP和网关ping测试主机之间网络连通性三、linux网络环境配置第一种方法(自动获取)第二种方法(指定ip)四、设置主机名和hosts映射设置主机名设置hosts映射五、主机名解析过程分析(Hosts、DNS)Hosts是什么DNS一、Linux网络配置原理图 …...
【Java学习笔记】多线程与线程池
多线程与线程池一、多线程安全与应用1、程序、进程与线程的关系2、创建多线程的三种方式(1)继承Thread类创建线程【不推荐】(2)实现Runnable接口创建线程(3)Callable接口创建线程3、线程的生命周期4、初识线…...
尺取法
尺取法是一种线性的高效率算法。记 (L, R ) 为一个序列内以L为起点的最短合法区间, 如果R随L的增大而增大的,就可以使用尺取法。具体的做法是不断的枚举 L,同时求出R。 因为 R 随 L增大而增大,所以总时间复杂度为 O(n) 指针i、j的两种方向: 反向扫描:i、j方向相反,i从头…...
20.有效的括号
给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括…...
使用QT C++编写一个带有菜单和工具条的文本编辑器
您好,这是必应。我可以帮您生成一段使用QT C编写一个带有菜单和工具条的文本编辑器的代码,但是请注意,这只是我的创造性的输出,并不代表任何权威或专业的观点。如果您想要了解更多的相关知识,请自行搜索或咨询专家。以…...
文法和语言的基本知识
一、什么形式化的方法用一套带有严格规定的符号体系来描述问题的方法二、什么是非形式化的方法对程序设计语言的描述从语法、语义和语用三个方面因素来考虑所谓语法是对语言结构定义所谓语义是描述了语言的含义所谓语用则是从使用的角度去描述语言三、符号串字母表和符号串字母…...
学习其他人的代码,成为更好的程序员
学习其他人的代码,成为更好的程序员1. 广泛阅读2. 分析代码3. 记笔记4. 实验5. 分享你的发现6. 结论参考如何成为一名更好的Python程序员??? 学习编码是一个持续的过程,需要实践、实验和向他人学习的意愿。提高编码技能的最佳方法之一是学习他人的代…...
新星计划-JAVA学习路线及书籍推荐
CSDN的各位友友们你们好,今天千泽为大家带来的是JAVA学习路线及其经典书籍推荐,接下来让我们一起了解一下JAVA的学习路线吧!如果对您有帮助的话希望能够得到您的支持和关注,我会持续更新的! 目录 1.JAVASE及其书籍推荐 2.初级数据结构与算法及其书籍推荐 3.MySQL及其书籍推荐…...
【大数据】Hive系列之- Hive-DML 数据操作
Hive系列-DML 数据操作数据导入向表中装载数据(Load)语法操作用例通过查询语句向表中插入数据(Insert)创建一张表插入数据基本模式插入(根据单张表查询结果)查询语句中创建表并加载数据(As Sele…...
day2 —— 判断字符串中的字符是否唯一
目录 前言 问题描述 代码解释 前言 若是想要了解基本语法的话,请到(7条消息) C语言从练气期到渡劫期_要一杯卡布奇诺的博客-CSDN博客查看相应的语法细节 强烈安利这篇文章 —— (4条消息) 筑基五层 —— 位运算看这篇就行了_要一杯卡布奇诺的博客-CSDN博客 问题…...
176万,GPT-4发布了,如何查看OpenAI的下载量?
大家好,这里是程序员晚枫。 昨天新一代GPT4发布了,今年GPT不断给大家带来惊喜。 在OpenAI的官网,也公开了GPT的Python调用第三方库:openai。 今天我们就来看看,这个Python智能接口~ 1、代码说明 开发过Python项目…...
蓝蓝算法题(一)
讲在前面:1.本人正在逐步学习C,代码中难免有C和C(向下兼容)混用情况。2.算法题目来自蓝蓝知识星球,没有对应的判决系统,运行到判决系统可以会有部分案例不能通过。 求素数 暴力求解(1 - n试探…...
Python截图自动化工具
1、展示部分源码(写的比较乱,哈哈) 2、功能展示 1)首页 2)按钮截图(用于自动翻页) 3)保存位置按钮(选择图片保存的位置) 4)重复次数,就是要截取多少次 5)定位截屏(截取的内容&#x…...
网络作业2【计算机网络】
网络作业2【计算机网络】前言推荐网络作业2一. 单选题(共3题,19.8分)二. 多选题(共1题,6.6分)三. 填空题(共8题,52.8分)四. 判断题(共3题,20.8分&…...
如何给网页加速,如何加速网页速度?
如何加速网页速度?提高移动网页加载的速度,可以从服务器的优化、网页的容量、请求响应等方面入手,这些方面优化后必然可以提高加载速度。1、服务器硬件软件配置要好,网络、读写响应等要做好优化。2、可以开启gzip压缩技术…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
