Web 开发入门之旅:从静态页面到全栈应用的第一步
Web 开发入门之旅:从静态页面到全栈应用的第一步
在当今互联网飞速发展的时代,掌握 Web 开发技能已成为众多技术爱好者和职场人士的必修课。然而,对于初学者而言,面对繁杂的技术栈和庞大的学习资源,往往感到无从下手。本文将通过三个循序渐进的小项目,带领你从最基础的前端交互,逐步迈向后端开发,最终体验全栈应用的构建过程。无需担心技术难度,每一步都配有详尽的解释与示例代码,助你轻松入门,迈出 Web 开发的第一步。
项目一:纯前端交互 —— 让网页动起来
项目简介
在这个项目中,我们将使用 HTML、CSS 和 JavaScript 构建一个简单的交互式网页。通过点击按钮,页面上的文字和颜色将发生变化,帮助你初步理解前端技术的基本运作方式。
核心代码解析
<!DOCTYPE html>
<html lang="zh">
<head><meta charset="utf-8" /><title>纯前端 Demo</title><style>body {text-align: center;font-family: sans-serif;margin-top: 50px;}#title {color: #333;transition: 0.3s;}#magicBtn {padding: 10px 20px;font-size: 16px;cursor: pointer;margin-top: 20px;}</style>
</head>
<body><h1 id="title">Hello, World!</h1><button id="magicBtn">点击我试试!</button><script>const title = document.getElementById("title");const magicBtn = document.getElementById("magicBtn");let isClicked = false;magicBtn.addEventListener("click", () => {if (!isClicked) {title.textContent = "你点击了按钮!";title.style.color = "#FF5733";} else {title.textContent = "Hello, World!";title.style.color = "#333";}isClicked = !isClicked;});</script>
</body>
</html>
步骤详解
- HTML 结构:定义了一个标题 (
<h1>
) 和一个按钮 (<button>
)。 - CSS 样式:设置了页面的基本样式,包括文本居中、字体、颜色过渡效果等。
- JavaScript 交互:
- 获取标题和按钮的 DOM 元素。
- 添加点击事件监听器,当按钮被点击时,切换标题的文字和颜色。
运行方式
- 无需服务器:将上述代码保存为
index.html
文件,双击打开即可在浏览器中查看效果。 - 互动体验:点击按钮,观察标题文字和颜色的变化,感受前端交互的即时反馈。
扩展建议
- 修改标题内容、颜色或字体大小,观察变化效果。
- 添加更多按钮和交互事件,如鼠标悬停或自动变化效果。
- 使用在线编辑器(如 CodePen 或 JSFiddle)进行实时编辑和预览。
项目二:前端与 PHP 后端 —— 实现简单的数据交互
项目简介
在纯前端项目的基础上,本项目引入 PHP 作为后端脚本,实现前后端的数据交互。当用户点击按钮时,前端将向后端发送请求,后端返回一段信息并显示在页面上。这一过程帮助你理解前后端如何协同工作。
项目结构
php-demo/├─ index.html├─ message.php
主要文件
1. index.html
(前端)
<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8" /><title>前端 + PHP Demo</title>
</head>
<body><h1>前端 + PHP Demo</h1><div id="responseArea">后端回应内容会显示在此处</div><button id="fetchBtn">获取后端信息</button><script>const fetchBtn = document.getElementById("fetchBtn");const responseArea = document.getElementById("responseArea");fetchBtn.addEventListener("click", () => {// 发起请求到 message.phpfetch("message.php").then(response => response.json()).then(data => {responseArea.textContent = data.message;}).catch(err => {console.error("请求出错:", err);});});</script>
</body>
</html>
2. message.php
(后端)
<?php
header("Content-Type: application/json; charset=utf-8");// 返回 JSON 格式数据
$data = ["message" => "Hello from PHP backend!"
];
echo json_encode($data, JSON_UNESCAPED_UNICODE);
?>
运行步骤
- 安装 PHP 环境:如果尚未安装,可以使用集成环境(如 XAMPP、WAMP、MAMP)或使用 PHP 内置服务器。
- 启动服务器:
- 使用内置服务器的示例命令:
php -S localhost:8000
- 访问页面:在浏览器中打开
http://localhost:8000/index.html
,点击“获取后端信息”按钮,即可看到从后端返回的消息。
项目解读
- 前端与后端通信:通过
fetch
API 向message.php
发送请求,后端返回 JSON 数据。 - 数据展示:前端接收并解析 JSON 数据,将消息内容显示在页面的指定区域。
- 简单易懂:项目结构简洁,便于初学者理解前后端基本交互流程。
扩展建议
- 修改
message.php
返回不同的消息内容或增加更多数据字段。 - 在前端页面上展示更多样化的数据,如列表、图片等。
- 尝试在后端添加逻辑,根据不同条件返回不同的数据。
项目三:前端、PHP 与 MySQL —— 构建完整的数据驱动应用
项目简介
在前两个项目的基础上,本项目将引入 MySQL 数据库,实现数据的持久化存储与动态获取。前端通过 PHP 后端查询数据库,将数据展示在网页上,体验完整的全栈开发流程。
项目结构
mysql-demo/├─ index.html├─ get_messages.php
主要文件
1. index.html
(前端)
<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8" /><title>PHP + MySQL Demo</title>
</head>
<body><h1>PHP + MySQL 前后端交互 Demo</h1><ul id="messageList">数据库中的信息将显示在此处</ul><button id="fetchBtn">获取数据库信息</button><script>const fetchBtn = document.getElementById("fetchBtn");const messageList = document.getElementById("messageList");fetchBtn.addEventListener("click", () => {fetch("get_messages.php").then(response => response.json()).then(data => {messageList.innerHTML = "";data.forEach(msg => {const li = document.createElement("li");li.textContent = msg;messageList.appendChild(li);});}).catch(err => {console.error("请求出错:", err);messageList.innerHTML = "<li>请求出错,请查看控制台</li>";});});</script>
</body>
</html>
2. get_messages.php
(后端)
<?php
header("Content-Type: application/json; charset=utf-8");// 数据库连接配置
$servername = "localhost";
$username = "your_db_user";
$password = "your_db_password";
$dbname = "your_database";// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);// 检查连接
if ($conn->connect_error) {die("数据库连接失败: " . $conn->connect_error);
}// 执行查询
$sql = "SELECT text FROM messages";
$result = $conn->query($sql);$messages = [];
if ($result && $result->num_rows > 0) {while ($row = $result->fetch_assoc()) {$messages[] = $row['text'];}
}// 关闭连接
$conn->close();// 返回 JSON
echo json_encode($messages, JSON_UNESCAPED_UNICODE);
?>
数据库准备
- 创建数据库
CREATE DATABASE your_database;
USE your_database;
- 创建表
CREATE TABLE messages (id INT AUTO_INCREMENT PRIMARY KEY,text VARCHAR(255) NOT NULL
);
- 插入测试数据
INSERT INTO messages (text) VALUES
('Hello from DB!'),
('Another msg'),
('PHP + MySQL is Fun!');
运行步骤
- 确保 MySQL 与 PHP 环境正常运行。
- 启动 PHP 内置服务器:
php -S localhost:8000
- 访问页面:在浏览器中打开
http://localhost:8000/index.html
,点击“获取数据库信息”按钮,页面将动态展示数据库中的消息列表。
项目解读
- 数据库交互:PHP 脚本连接 MySQL 数据库,执行 SQL 查询,将结果以 JSON 格式返回给前端。
- 前后端协作:前端通过
fetch
请求获取后端数据,并将其动态展示在页面上。 - 数据驱动:通过数据库实现数据的持久化存储,使应用具备更强的实用性和扩展性。
扩展建议
- 增加数据的增删改功能,构建更完整的 CRUD 应用。
- 实现搜索和分页功能,提升用户体验。
- 引入更多字段和复杂查询,探索数据库的高级用法。
常见问题与拓展思路
常见问题
- 访问页面时报错或白屏
- 检查 PHP 是否正确安装。
- 确认文件路径、服务器端口号及数据库连接信息是否正确。
- 中文显示乱码
- 确保 HTML 和 PHP 文件均指定
charset="utf-8"
。 - 在 PHP 脚本中正确设置
Content-Type: application/json; charset=utf-8
。
- 确保 HTML 和 PHP 文件均指定
- 数据库连接失败
- 核实数据库用户名、密码及数据库名称是否正确。
- 确保 MySQL 服务已启动并运行正常。
- 跨域问题
- 如果前端与后端不在同一域名下,需处理跨域请求(CORS)问题。
拓展思路
- 前端技术提升
- 学习现代 JavaScript 框架,如 React、Vue 或 Angular,提升开发效率与页面交互体验。
- 探索 CSS 预处理器(如 SASS)和响应式设计,打造更美观、适配多设备的网页。
- 后端技术深化
- 学习 PHP 框架,如 Laravel 或 ThinkPHP,构建更结构化、可维护的后端应用。
- 探索其他后端语言与框架,如 Node.js、Python 的 Django 或 Flask。
- 数据库管理
- 深入学习 SQL 语法,优化查询性能,确保数据安全与完整性。
- 探索 NoSQL 数据库,如 MongoDB,了解不同数据存储方案的优缺点。
- 项目部署与安全
- 学习如何将项目部署到线上服务器,了解基本的服务器管理与配置。
- 实现用户认证、数据加密、防护 SQL 注入等安全措施,提升应用的可靠性与安全性。
总结
通过这三个循序渐进的小项目,你将从最基础的前端交互,逐步掌握前后端协作,最终体验全栈开发的完整流程。每一步都配有详细的代码示例与解释,确保你在实践中不断学习与进步。Web 开发不仅是技术的堆砌,更是创意与逻辑的结合。希望本文能为你打开 Web 开发的大门,激发你深入探索的热情。
温馨提示
- 动手实践:理论与实践相结合,亲自编写和运行代码,才能真正掌握技术要领。
- 持续学习:Web 开发领域日新月异,保持学习的热情与动力,不断更新知识储备。
- 寻求帮助:遇到问题时,善用搜索引擎、开发者社区,与他人交流,快速解决疑难。
让我们一起踏上这段充满挑战与成就感的 Web 开发之旅,探索代码赋予世界的无限可能。
本文旨在为 Web 开发初学者提供清晰、简洁的入门指导,通过实战项目帮助读者快速掌握前端、后端及数据库的基本知识。愿每位读者都能在编程的世界中找到属于自己的乐趣与成就。
相关文章:

Web 开发入门之旅:从静态页面到全栈应用的第一步
Web 开发入门之旅:从静态页面到全栈应用的第一步 在当今互联网飞速发展的时代,掌握 Web 开发技能已成为众多技术爱好者和职场人士的必修课。然而,对于初学者而言,面对繁杂的技术栈和庞大的学习资源,往往感到无从下手。…...

WebSocket实现分布式的不同方案对比
引言 随着实时通信需求的日益增长,WebSocket作为一种基于TCP的全双工通信协议,在实时聊天、在线游戏、数据推送等场景中得到了广泛应用。然而,在分布式环境下,如何实现WebSocket的连接管理和消息推送成为了一个挑战。本文将对比几…...

基于注意力机制的端到端合成语音检测
End-to-end Synthetic Speech Detection Based on Attention Mechanism 摘要: 五种轻量级注意力模块改为适用于语音序列的 通道注意力机制和 一维空间注意力机制 ASVspoof2019测试集的 等错误率和 最小串联检测代价函数都有所降低 池化层之前嵌入CBAM、ECA的模型测试…...

MySQL NaviCat 安装及配置教程(Windows)【安装】
文章目录 一、 MySQL 下载 1. 官网下载2. 其它渠道 二、 MySQL 安装三、 MySQL 验证及配置四、 NaviCat 下载 1. 官网下载2. 其它渠道 五、 NaviCat 安装六、 NaviCat 逆向工程 软件 / 环境安装及配置目录 一、 MySQL 下载 1. 官网下载 安装地址:https://www.m…...

微信小程序:播放音频
在小程序开发中,音频播放是一个重要的功能。本文将详细介绍小程序音频播放的相关知识点,帮助开发者更好地掌握小程序音频播放的实现方法。 一、小程序音频播放的基本流程 在小程序中,音频播放的基本流程如下: 获取音频数据&#…...

Ubuntu安装K8S
第一步: 安装docker Install Docker #注意docker是早期的名称已经过时了,因此请使用如下命令,一步到位安装docker-ce。 第二步:设置K8S源: (大陆使用aliyun源,大陆外使用google源)…...

独立同分布时,联合概率密度函数等于边缘概率密度函数乘积
在概率论中,独立同分布(i.i.d.)指的是多个随机变量既独立又服从相同的概率分布。对于一组随机变量 (X_1, X_2, \dots, X_n),若它们是独立同分布的,那么它们的联合概率密度函数 (p(x_1, x_2, \dots, x_n)) 就可以表示为…...

半导体数据分析: 玩转WM-811K Wafermap 数据集(三) AI 机器学习
前面我们已经通过两篇文章,一起熟悉了WM-811K Wafermap 数据集,并对其中的一些数据进行了调用,生成了一些统计信息和图片。今天我们接着继续往前走。 半导体数据分析: 玩转WM-811K Wafermap 数据集(二) AI…...

【.net core】【sqlsugar】时间查询示例
1、时间包含查询示例 //model.TimeInterval为时间区间参数,参数格式为2024-01-01~2025-01-01 //query为当前查询的语句内容 //为当前查询语句增加创建时间模糊搜索查询条件 query query.Where(a > ((DateTime)a.F_CreatorTime).ToString("yyyy-MM-dd HH:m…...

Kotlin 协程基础十 —— 协作、互斥锁与共享变量
Kotlin 协程基础系列: Kotlin 协程基础一 —— 总体知识概述 Kotlin 协程基础二 —— 结构化并发(一) Kotlin 协程基础三 —— 结构化并发(二) Kotlin 协程基础四 —— CoroutineScope 与 CoroutineContext Kotlin 协程…...

Java中网络编程的学习
目录 网络编程概述 网络模型 网络通信三要素: IP 端口号 通信协议 IP地址(Internet Protocol Address) 端口号 网络通信协议 TCP 三次握手 四次挥手 UDP TCP编程 客户端Socket的工作过程包含以下四个基本的步骤: 服务器程序…...

[计算机网络]一. 计算机网络概论第一部分
作者申明:作者所有文章借助了各个渠道的图片视频以及资料,在此致谢。作者所有文章不用于盈利,只是用于个人学习。 1.0推荐动画 【网络】半小时看懂<计算机网络>_哔哩哔哩_bilibili 1.1计算机网络在信息时代的作用 在当今信息时代&…...

【0393】Postgres内核 checkpointer process ③ 构建 WAL records 工作缓存区
1. 初始化 ThisTimeLineID、RedoRecPtr 函数 InitXLOGAccess() 内部会初始化 ThisTimeLineID、wal_segment_size、doPageWrites 和 RedoRecPtr 等全局变量。 下面是这四个变量初始化前的值: (gdb) p ThisTimeLineID $125 = 0 (gdb) p wal_segment_size $126 = 16777216 (gdb…...

正则表达式基础知识及grep、sed、awk常用命令
文章目录 前言一、正则表达式元字符和特性1. 字符匹配2. 量词3. 字符类4. 边界匹配5. 分词和捕获6. 特殊字符7. 位置锚定 二、grep常用参数1. -n额外输出行号2. -v 排除匹配的行3. -E 支持扩展正则匹配4. -e进行多规则匹配搜索5. -R 递归匹配目录中的文件内容6. -r递归地搜索目…...

redhat安装docker 24.0.7
1、下载docker镜像包 wget https://download.docker.com/linux/static/stable/x86_64/docker-24.0.7.tgz 2、解压 tar -xvf docker-24.0.7.tgz 3、解压的docker文件夹全部移动至/usr/bin目录 cd docker cp -p docker/* /usr/bin 4、注册服务 vi /usr/lib/systemd/syste…...

【excel】VBA简介(Visual Basic for Applications)
文章目录 一、基本概念二、语法2.1 数据类型2.11 基本数据类型2.12 常量2.13 数组 2.2 控制语句2.21 条件语句2.22 循环语句2.23 错误处理:On Error2.24 逻辑运算 2.3 其它语句2.31 注释2.32 with语句 2.4 表达式2.41 常见表达式类型2.42 表达式的优先级 2.5 VBA 的…...

【大厂面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据...本篇介绍为什么self-attention可以堆叠多层,这有什么作用?
【大厂面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据…本篇介绍为什么self-attention可以堆叠多层,这有什么作用? 【大厂面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据…本篇介绍为什么self-attention可以堆叠…...

NanoKVM简单开箱测评和拆解,让普通电脑实现BMC/IPMI远程管理功能
Sipeed推出了NanoKVM,简直是没有BMC的台式机和工作站的福音。有了这个就可以轻松实现以往服务器才有的远程管理功能。 NanoKVM 简介 Lichee NanoKVM 是基于 LicheeRV Nano 的 IP-KVM 产品,继承了 LicheeRV Nano 的极致体积 和 强大功能。 NanoKVM 包含…...

【Idea】编译Spring源码 read timeout 问题
Idea现在是大家工作中用的比较多的开发工具,尤其是做java开发的,那么做java开发,了解spring框架源码是提高自己技能水平的一个方式,所以会从spring 官网下载源码,导入到 Idea 工具并编译,但是发现build的时…...

VSCode的配置与使用(C/C++)
从0开始教你在vscode调试一个C文件 一.首先是配置你的编译环境,添加到环境变量(默认你是全新的电脑,没有安装vs2019之类的) 原因:因为相比于vs2019,vscode只是个代码编辑器,相当于一个彩色的、…...

SpringMVC (1)
目录 1. 什么是Spring Web MVC 1.1 MVC的定义 1.2 什么是Spring MVC 1.3 Spring Boot 1.3.1 创建一个Spring Boot项目 1.3.2 Spring Boot和Spring MVC之间的关系 2. 学习Spring MVC 2.1 SpringBoot 启动类 2.2 建立连接 1. 什么是Spring Web MVC 1.1 MVC的定义 MVC 是…...

本地部署大模型—MiniCPM-V 2.0: 具备领先OCR和理解能力的高效端侧多模态大模型
MiniCPM-V 2.0: 具备领先OCR和理解能力的高效端侧多模态大模型 简介 MiniCPM 系列的最新多模态版本 MiniCPM-V 2.0。该模型基于 [MiniCPM 2.4B和 SigLip-400M 构建,共拥有 2.8B 参数。MiniCPM-V 2.0 具有领先的光学字符识别(OCR)和多模态理解能力。该模型在综合性 OCR 能力…...

国产linux系统(银河麒麟,统信uos)使用 PageOffice 实现后台批量生成PDF文档
PageOffice 国产版 :支持信创系统,支持银河麒麟V10和统信UOS,支持X86(intel、兆芯、海光等)、ARM(飞腾、鲲鹏、麒麟等)、龙芯(LoogArch)芯片架构。 PageOffice 版本&…...

Python 扫描枪读取发票数据导入Excel
财务需要一个扫描枪扫描发票文件,并将主要信息录入Excel 的功能。 文件中sheet表的列名称,依次为:发票编号、发票编码、日期、金额、工号、扫描日期。 扫描的时候,Excel 文件需要关闭,否则会报错。 import openpyxl …...

电源自动测试系统中的ate定制化包含哪些内容?
1. 测试项目和指标 基础测试项目:虽然大多数电源模块的基础测试项目(如输入输出电压、电流、效率等)已经包含在测试系统中,但针对特殊或小众的测试项目,如VPX电源测试时的通讯验证,可以根据客户需求进行定…...

人工智能-机器学习之多分类分析(项目实战二-鸢尾花的多分类分析)
Softmax回归听名字,依然好像是做回归任务的算法,但其实它是去做多分类任务的算法。 篮球比赛胜负是二分类,足球比赛胜平负就是多分类 识别手写数字0和1是二分类,识别手写数字0-9就是多分类 Softmax回归算法是一种用于多分类问题…...

多包单仓库(monorepo)实现形式
目录 背景 需求和方案 从0开始搭建一个Monorepo项目 创建 配置全局公共样式 配置全局公共组件 方式1:不需要独立发布的组件包,只在当前项目的子项目中使用 方式2:需要独立发布和版本维护的包 子项目的独立构建和部署 总结 Monorepo优势 便于代码维护、管理 支持…...

Java冒泡排序算法之:变种版
什么是冒泡排序算法? 冒泡排序是一种简单的排序算法,通过多次遍历待排序的数组,逐步将最大的(或最小的)元素“冒泡”到数组的一端。它以其操作过程类似气泡从水底冒至水面而得名。 冒泡排序的工作原理 比较相邻元素&…...

AAPM:基于大型语言模型代理的资产定价模型,夏普比率提高9.6%
“AAPM: Large Language Model Agent-based Asset Pricing Models” 论文地址:https://arxiv.org/pdf/2409.17266v1 Github地址:https://github.com/chengjunyan1/AAPM 摘要 这篇文章介绍了一种利用LLM代理的资产定价模型(AAPM)…...

Spring常见知识
1、什么是spring的ioc? 其实就是控制反转,提前定义了一个bean,到时候使用的时候直接autowire就可以了。目的是减低计算机代码之间的耦合度。 创建三个文件,分别是Bean的定义、Bean的使用、Bean的配置。 IOC通过将对象创建和管理…...