当前位置: 首页 > article >正文

动态 Web 开发技术入门篇

一、HTTP 协议核心

1.1 HTTP 基础

  • 协议全称 :HyperText Transfer Protocol(超文本传输协议)

  • 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。

  • 请求方法

    • GET :用于获取资源,请求参数在 URL 中,长度受限,可缓存。

    • POST :用于提交数据,请求参数在请求体中,无长度限制,通常不缓存。

    • PUT :用于更新资源。

    • DELETE :用于删除资源。

    • 幂等性 :GET、PUT、DELETE 是幂等的(多次请求效果与一次相同),POST 非幂等。

  • 状态码

    状态码含义常见场景
    200OK请求成功
    400Bad Request客户端参数错误
    401Unauthorized未认证(需登录)
    403Forbidden无权限访问资源
    404Not Found资源不存在
    500Internal Server Error服务器内部错误
    503Service Unavailable服务不可用(如维护中)
  • 请求结构

    • 请求行 :包含方法、URL 和 HTTP 版本(如 GET /index.html HTTP/1.1)。

    • 请求头 :包含请求的元信息,如 Content-Type(数据类型)、Authorization(认证信息)等。

    • 请求体 :对于 POST 和 PUT 方法,包含要提交的数据(如 JSON 格式或表单数据)。

  • HTTPS 安全机制

    • SSL/TLS 加密传输 :确保数据在传输过程中加密,防止被窃取。

    • 证书验证 :防止中间人攻击,确保数据传输的安全性和完整性。

二、Spring Boot 开发

2.1 核心注解

注解作用
@SpringBootApplication标记主应用类,组合了 @ComponentScan 和 @EnableAutoConfiguration 注解,用于启动 Spring Boot 应用。
@GetMapping用于映射 HTTP GET 请求到特定的处理方法上。
@PostMapping用于映射 HTTP POST 请求到特定的处理方法上。
@RequestMapping用于映射 HTTP 请求到特定的处理方法上,可指定请求的方法类型(如 GET、POST 等)。

2.2 参数获取方式

代码示例说明
@RequestParam String name用于获取 URL 查询参数,如 ?name=value 中的 name 参数。
@PathVariable Long id用于获取路径参数,如 /user/{id} 中的 id 参数。
@RequestBody User user用于获取请求体中的 JSON 数据并将其转换为 Java 对象。

2.3 RESTful 设计原则

  • 资源化 URL :使用 /api/users 表示用户资源集合。

  • 方法语义化 :使用 HTTP 方法表示操作,如 GET 用于查询、POST 用于创建、PUT 用于更新、DELETE 用于删除。

三、MyBatis-Plus 操作

3.1 核心接口与方法

接口 / 方法功能
BaseMapper<T>提供基础的 CRUD(创建、读取、更新、删除)操作接口。
selectById(id)根据主键 ID 查询记录。
deleteById(id)根据主键 ID 删除记录。
selectList(queryWrapper)根据查询条件查询多条记录。

3.2 实体注解

注解作用
@TableName("user")指定实体类对应的数据库表名。
@TableField("user_name")指定实体类属性对应的数据库表字段名。
@TableField(fill = FieldFill.INSERT)设置自动填充规则,例如在插入时自动填充创建时间。

3.3 Wrapper 条件构造器

代码示例说明
QueryWrapper<User> wrapper = new QueryWrapper<>(); wrapper.gt("age", 20);构建查询条件,查询年龄大于 20 的用户。gt 表示大于(greater than)。

四、前端技术(Vue + Axios)

4.1 Vue 核心

指令
指令作用
v-model实现表单元素和数据的双向绑定,使数据和视图保持同步。
v-for用于循环渲染列表数据,动态生成多个元素。
v-if / v-show用于条件渲染,v-if 根据条件创建或销毁元素,v-show 仅切换元素的显示状态(CSS 的 display 属性)。
选项
选项作用
el指定 Vue 应用挂载的 DOM 元素选择器,如 el: "#app" 表示挂载到 ID 为 app 的元素上。
data()定义响应式数据,必须是一个函数,返回一个包含数据的对象。
methods定义方法,包含应用的业务逻辑和事件处理函数。

4.2 Axios 请求

代码示例说明
axios.get("/api/data") .then(response => console.log(response.data)) .catch(error => console.error(error));发起 GET 请求获取数据,并处理响应或错误。
axios.post("/api/login", { username, password }) .then(response => { if (response.data.success) { window.location.href = "/home"; } });发起 POST 请求提交登录信息,根据响应结果进行页面跳转。

4.3 Element UI 组件库

  • 简介 :Element UI 是一个基于 Vue 的 UI 组件库,提供了丰富的组件,如表格、表单、弹窗等,方便快速构建美观的 Web 界面。

  • 使用 :通过导入 Element UI 的 CSS 和 JS 文件,可以在 Vue 项目中使用其提供的组件,提高开发效率和界面一致性。

五、工具与规范

5.1 Lombok 注解

注解作用
@Getter自动生成实体类的 getter 方法,简化代码编写。
@Setter自动生成实体类的 setter 方法,简化代码编写。
@Data综合了 @Getter、@Setter、@ToString、@EqualsAndHashCode 等注解的功能,大大减少了模板代码的编写。

5.2 JSON 处理

  • JSON 格式

    • 对象 :如 { "name": "John", "age": 30 } 表示一个包含姓名和年龄属性的对象。

    • 数组 :如 [ "apple", "banana" ] 表示一个包含多个字符串元素的数组。

  • 转换方法

    • JSON.stringify(obj) :将 JavaScript 对象或数组转换为 JSON 格式的字符串,便于存储或传输。

    • JSON.parse(string) :将 JSON 格式的字符串转换回 JavaScript 对象或数组,使其可以在程序中使用。

5.3 HTML/CSS 基础

  • 引入 CSS :在 HTML 文件中通过 <link rel="stylesheet" href="bootstrap.min.css"> 引入外部 CSS 文件,为页面添加样式。

  • 引入 JS :在 HTML 文件中通过 <script src="axios.min.js"></script> 引入外部 JavaScript 文件,添加交互功能。

六、Java 集合补充

6.1 ArrayList 特性

  • 索引特点 :元素索引从 0 开始。

  • 动态扩容 :初始容量为 10,当元素数量超过当前容量时,会自动扩容为原来的 1.5 倍。

  • 常用方法

    • add(element) :在列表末尾添加一个元素。

    • get(index) :根据索引获取指定位置的元素。

    • size() :返回列表中元素的数量。

6.2 线程安全集合

集合特点
Vector内部使用同步锁来保证线程安全,但在高并发环境下性能较低,因为每次操作都需要获取锁。
CopyOnWriteArrayList采用写时复制策略,读操作高性能,写操作安全但开销较大,适合读多写少的场景。

七、安全与最佳实践

7.1 登录安全

  • 密码传输 :必须使用 HTTPS 协议加密传输密码,防止密码在传输过程中被窃取。

  • 密码存储 :使用 BCrypt 哈希算法对密码进行加密存储,而不是以明文形式保存,即使数据库泄露也能保护用户密码安全。

  • 防止 SQL 注入 :使用 MyBatis-Plus 的参数化查询功能,可以有效避免 SQL 注入攻击,确保数据库查询的安全性。

7.2 API 设计规范

  • 状态码 :使用精确的 HTTP 状态码描述 API 请求的结果,如 401 表示未登录、403 表示无权限等,帮助客户端快速理解响应状态。

  • 响应格式 :采用统一的 JSON 响应结构,如 { "success": true, "data": {}, "message": "操作成功" },提高接口的易用性和可维护性。

相关文章:

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量&#xff0c;招商蛇口以“美好生活承载者”为使命&#xff0c;深耕全球111座城市&#xff0c;以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子&#xff0c;招商蛇口始终与城市发展同频共振&#xff0c;以建筑诠释对土地与生活的…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...