JAVA查漏补缺(2)

news2025/5/24 11:38:56

 AJAX

什么是Ajax

Ajax(Asynchronous Javascript And XML),即是异步的JavaScript和XML,Ajax其实就是浏览器与服务器之间的一种异步通信方式 

异步的JavaScript

它可以异步地向服务器发送请求,在等待响应的过程中,不会阻塞当前页面,在这种情况下,浏览器可以做自己的事情。直到成功获取响应后,浏览器才开始处理响应数据。

XML

是前后端数据通信时传输数据的一种格式,现在已经不怎么用了,现在比较常用的是 JSON

所以Ajax就是在浏览器不重新加载网页的情况下对页面的某部分进行更新

工作原理:

  1. Ajax提供与服务器异步通信的能力,可在web页面触发js事件中中服务器发出异步请求,如执行更新或查询数据库
  2. Ajax的核心是js对象XMLHttpRequest,使用户通过js向服务器提出请求并处理相应,不阻塞用户
  3. 当web服务器的相应返回时,使用js回调函数和CSS相应的更新页面的局部页面,而不是刷新整个页面
  4. 在页面与服务器交互的过程中不中断用户操作,用户甚至察觉不到浏览器正在与服务器进行通信

jQuery对Ajax的封装 

1.  向远程服务器发送get请求
$.get(url,[data]m[callback],[type])  
2.  向远程服务器发送post请求
$.post(url,[data]m[callback],[type])  
3. 
$.ajax({
	url:'远程服务器地址',
	type:'请求方式',
	data:{
			参数名1:参数值1,
			参数名2:参数值2,
			...
	}
	dataType:'服务器响应的数据类型',
	success:function(result){
		//请求成功后的回调函数
	}
	error:function(result){
	//请求失败后的回调函数
	}
})

JSON

 JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation),使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台。通过在后台与服务器进行少量数据交换,实现网页的部分更新,无需重新加载整个页面,提升用户体验。

JSON 基本语法规则

数据类型与格式

  • 对象(Object):由 { } 包裹,包含键值对(key-value),键必须用双引号 " " 括起,值可以是任意合法类型。
{
  "name": "Alice",
  "age": 30,
  "isStudent": false
}

数组(Array):由 [ ] 包裹,元素可以是任意类型(包括对象、数组)。

["apple", "banana", "cherry"]

value值可以是

  • 字符串(必须用双引号):"hello"
  • 数值(整数 / 浮点数):423.14
  • 布尔值:truefalse
  • null
  • 对象或数组(可嵌套)。

FastJSON 简介

FastJSON 是阿里巴巴开源的高性能 JSON 处理库,用于在 Java 对象和 JSON 格式之间进行快速转换。它具有以下特点:

  • 速度快:解析和序列化性能优于其他同类库。
  • 使用简单:提供简洁的 API(如 JSON.toJSONString()JSON.parseObject())。
  • 功能丰富:支持复杂对象、泛型、循环引用处理等。

添加依赖

在 Maven 项目中,需在 pom.xml 中添加依赖:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>2.0.30</version> <!-- 使用最新稳定版本 -->
</dependency>

Java 对象转 JSON 字符串 / JSON 对象

1. 简单 Java 对象转 JSON 字符串

import com.alibaba.fastjson.JSON;

public class User {
    private String name;
    private int age;
    private boolean isStudent;
    
    // 构造方法、Getter/Setter 略
}

// 使用示例
User user = new User("Alice", 25, true);
String jsonString = JSON.toJSONString(user);
// 输出: {"age":25,"isStudent":true,"name":"Alice"}

2. 包含嵌套对象的 Java 对象转 JSON

public class Address {
    private String city;
    private String street;
    // 构造方法、Getter/Setter 略
}

public class Employee {
    private String name;
    private Address address; // 嵌套对象
    // 构造方法、Getter/Setter 略
}

// 使用示例
Address addr = new Address("Beijing", "Wangfujing");
Employee emp = new Employee("Bob", addr);
String jsonString = JSON.toJSONString(emp);
// 输出: {"address":{"city":"Beijing","street":"Wangfujing"},"name":"Bob"}

3. Java 对象转 JSONObject

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

User user = new User("Charlie", 30, false);
JSONObject jsonObject = (JSONObject) JSON.toJSON(user);
// 获取属性
String name = jsonObject.getString("name"); // "Charlie"
int age = jsonObject.getIntValue("age");    // 30

JSON 字符串 / JSON 对象转 Java 对象

1. JSON 字符串转简单 Java 对象

String jsonStr = "{\"name\":\"David\",\"age\":28,\"isStudent\":false}";
User user = JSON.parseObject(jsonStr, User.class);
// user.getName() → "David"
// user.getAge() → 28

2. JSON 字符串转包含嵌套对象的 Java 对象

String jsonStr = "{\"name\":\"Eve\",\"address\":{\"city\":\"Shanghai\",\"street\":\"Nanjing Road\"}}";
Employee emp = JSON.parseObject(jsonStr, Employee.class);
// emp.getAddress().getCity() → "Shanghai"

3. JSON 字符串转泛型对象(如 List)

String jsonArrayStr = "[{\"name\":\"Frank\"},{\"name\":\"Grace\"}]";
List<User> userList = JSON.parseArray(jsonArrayStr, User.class);
// userList.get(0).getName() → "Frank"

4. JSONObject 转 Java 对象

JSONObject jsonObj = new JSONObject();
jsonObj.put("name", "Henry");
jsonObj.put("age", 35);
User user = jsonObj.toJavaObject(User.class);
// user.getName() → "Henry"

 

 静态网页,动态网页

静态网页

定义:静态网页是指内容固定的网页,每个访问者看到的内容都是相同的。页面内容在开发时就已经确定,直接发送给客户端浏览器。缺乏交互性,无法根据用户行为动态更新内容,内容更新需要手动修改 HTML 文件,不适合需要实时数据的应用。

示例场景

  • 个人博客
  • 产品介绍页面
  • 静态文档
  • 单页应用 (SPA) 的静态版本

动态网页

定义:动态网页是指内容根据用户请求或其他条件动态生成的网页。页面内容在访问时由服务器实时生成。开发复杂度高,需要前后端技术配合,对服务器资源要求高,性能可能受影响,安全风险较高,需要防范 SQL 注入、XSS 等攻击。

示例场景

  • 电子商务网站
  • 社交媒体平台
  • 内容管理系统 (CMS)
  • 在线论坛
  • 企业应用系统

数据库的数据类型

 

 

一、数值类型

用于存储数字,可分为整数和浮点数:

1. 整数类型

类型范围(示例)存储空间用途
TINYINT-128 到 127(无符号 0-255)1 字节小范围整数(如性别)
SMALLINT-32,768 到 32,7672 字节较小整数(如年龄)
INT-21 亿到 21 亿4 字节常规整数(如 ID)
BIGINT极大范围(±9×10¹⁸)8 字节超大整数(如流水号)

2. 浮点类型

类型精度存储空间用途
FLOAT单精度(约 7 位小数)4 字节精度要求不高的小数
DOUBLE双精度(约 15 位小数)8 字节较高精度的小数
DECIMAL任意精度(如 DECIMAL(10,2)可变财务计算(避免精度丢失)

二、字符串类型

用于存储文本数据,不同类型有不同的长度限制和存储方式:

1. 固定长度字符串

  • CHAR(n):定长字符串,不足 n 位时用空格填充,效率高
    • 示例:CHAR(10),存储 "abc" 时实际占 10 字节(补 7 个空格)。

2. 可变长度字符串

  • VARCHAR(n):变长字符串,仅存储实际内容 + 1-2 字节长度信息。
    • 示例:VARCHAR(10),存储 "abc" 时占 4 字节(3 字符 + 1 字节长度)。

三、日期和时间类型

用于存储时间信息,不同数据库可能略有差异:

常见类型

类型格式范围用途
DATEYYYY-MM-DD1000-01-01 到 9999-12-31仅日期(如生日)
TIMEHH:MM:SS-838:59:59 到 838:59:59仅时间(如营业时间)
DATETIMEYYYY-MM-DD HH:MM:SS1000-01-01 00:00:00 到 9999-12-31 23:59:59日期 + 时间
TIMESTAMP时间戳(UTC)1970-01-01 到 2038-01-19自动记录更新时间
YEARYYYY 或 YY1901-2155 或 00-99年份(如产品年份)

四、布尔类型

用于存储真 / 假值,不同数据库实现方式不同:

数据库布尔类型说明
MySQLBOOLEAN 或 TINYINT(1)用 0 表示 FALSE,1 表示 TRUE
PostgreSQLBOOLEAN直接存储 TRUE/FALSE
SQL ServerBIT0 或 1

五、大数据类型

1. BLOB 类型

  • 基础概念:BLOB(Binary Large Object)是一类用于存储大量二进制数据的字段类型,包括TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。
  • 优势:适合存储图像、音频、视频等非文本数据。
  • 应用场景:当需要在数据库中存储文件内容时。
  • 问题与解决:如果遇到存储空间不足的问题,可以考虑升级数据库实例的存储容量或优化数据存储策略。

2. TEXT 类型

  • 基础概念:TEXT类型用于存储大量文本数据,包括TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。
  • 优势:适合存储长文本数据,如文章、评论等。
  • 应用场景:当需要存储超过VARCHAR类型限制的文本数据时。
  • 问题与解决:如果遇到性能问题,可以考虑对文本数据进行分表存储或使用全文索引优化查询。

RBAC原理

 RBAC(Role-Based Access Control)是一种广泛应用于信息系统的访问控制模型,它通过角色作为中间层,将用户与权限分离,简化了权限管理。

RBAC 基本概念

1. 三大核心组件

  • 用户(User):系统的使用者,可以是个人或程序。
  • 角色(Role):一组权限的集合(如 "管理员"、"财务"、"普通用户")。
  • 权限(Permission):对系统资源的操作许可(如 "查看订单"、"删除用户")。

2. 核心关系

  • 用户 - 角色映射:一个用户可以拥有多个角色(如用户 A 既是 "管理员" 又是 "财务")。
  • 角色 - 权限映射:一个角色可以包含多个权限(如 "管理员" 角色拥有所有权限)。

RBAC 的优势

  1. 简化权限管理

    • 只需管理角色和权限,无需为每个用户单独配置。
    • 新增用户时,只需分配角色,无需逐个分配权限。
  2. 易于扩展

    • 新增角色或权限时,只需修改角色 - 权限映射,不影响用户。
    • 支持组织架构变化(如部门调整)。
  3. 符合组织架构

    • 与现实中的职位和职责对应(如 "财务" 角色对应财务部门)。
  4. 增强安全性

    • 通过约束条件(如互斥角色)避免权限滥用。
    • 权限审计更方便(只需检查角色权限)。

Cookie 和 Session会话

  • 当从浏览器发送请求到服务器后,servlet创建cookie,保存少量数据,发送浏览器。

  • 浏览器获得服务器发送的cookie数据,将⾃动的保存到浏览器端。

  • 下次访问时,浏览器将⾃动携带cookie数据发送给服务器。

Cookie创建

Cookie cookie = new Cookie(String key,String value);

    key:表示cookie的名字

    value:表示cookie中保存的数据

    发送给浏览器

    response.addCookie(cookie);
    

    获取Cookie

    Cookie[] cookies = request.getCookies();
    
    if(cookies!=null) {
         for (Cookie cookie : cookies) {
             // 获取cookie的名称
             String name = cookie.getName();
             // 获取cookie的值
             String value = cookie.getValue();
             System.out.println(name+":::"+value);
         } 
    }

    当用户访问网站时,服务器会为其创建一个唯一的 Session ID,并将其存储在服务器端。同时,服务器会通过 Cookie 将这个 Session ID 发送给客户端浏览器。浏览器在后续的请求中会携带这个 Session ID

    Cookie是运⾏在客户端,Session是运⾏在服务器端。

    1、获取session对象

    HttpSession session = request.getSession();

    2、保存数据到session中

    session.setAttribute(String 绑定名, Object 绑定值);
    

    3、获取session数据

    Object session.getAttribute("绑定名");

    4、有效时间 单位秒 默认30分钟,可以去tomcat中conf下web.xml⽂件查看

    session.setMaxInactiveInterval(int expiry);

    5、销毁session对象

    session.invalidate();

    会话和 Cookie 的关系

    会话和 Cookie 通常一起工作,就像超市的会员卡和便签一样。服务器创建会话后,会将会话 ID 通过 Cookie 发送给浏览器。浏览器将这个 Cookie 保存下来,并在每次请求时将其发送回服务器。服务器通过会话 ID 就能识别出是哪个用户在访问,从而保持会话状态。

    其他知识点

     MySQL三部分——从增删改查到集群搭建

    1.mysql基础:增删改查,一对多。。。 2.mysql架构3.mysql集群搭建,集群搭建

     《阿里巴巴Java编码规范》

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2384566.html

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

    相关文章

    【Web前端】JavaScript入门与基础(二)

    Javascript对象 什么是对象&#xff1f;对象&#xff08;object&#xff09;是 JavaScript 语言的核心概念&#xff0c;也是最重要的数据类型。简单说&#xff0c;对象就是一组“键值对”&#xff08;key-value&#xff09;的集合&#xff0c;是一种无序的复合数据集合。 var…

    Electron+vite+vue3 从0到1搭建项目,开发Win、Mac客户端

    随着前端技术的发展&#xff0c;出现了所谓的大前端。 大前端则是指基于前端技术延伸出来的各种终端平台及应用场景&#xff0c;包括APP、桌面端、手表终端、服务端等。 本篇文章主要是和大家一起学习一下使用Electron 如何打包出 Windows 和 Mac 所使用的客户端APP&#xff…

    python打卡day34@浙大疏锦行

    知识点回归&#xff1a; CPU性能的查看&#xff1a;看架构代际、核心数、线程数GPU性能的查看&#xff1a;看显存、看级别、看架构代际GPU训练的方法&#xff1a;数据和模型移动到GPU device上类的call方法&#xff1a;为什么定义前向传播时可以直接写作self.fc1(x) ①CPU性能查…

    SOC-ESP32S3部分:8-GPIO输出LED控制

    飞书文档https://x509p6c8to.feishu.cn/wiki/OSQWwh95niobqUkKyDQcVgsbnFg 这节课&#xff0c;我们将会以ESP32S3外设GPIO的使用为例&#xff0c;带大家学习如何从零开始学会ESP32外设的使用。 例如&#xff0c;这节课我们的需求是&#xff0c;需要通过GPIO控制指示灯的亮灭&…

    05算法学习_59. 螺旋矩阵 II

    05算法学习_59. 螺旋矩阵 II 05算法学习_59. 螺旋矩阵 II题目描述&#xff1a;个人代码&#xff1a;学习思路&#xff1a;第一种写法&#xff1a;题解关键点&#xff1a; 个人学习时疑惑点解答&#xff1a; 05算法学习_59. 螺旋矩阵 II 力扣题目链接: 59. 螺旋矩阵 II 题目描…

    Linux `>`/`>>` 重定向操作符深度解析与高阶应用指南

    Linux `>`/`>>` 重定向操作符深度解析与高阶应用指南 一、核心功能解析1. 基础重定向2. 标准流描述符二、高阶重定向技巧1. 多流重定向2. 文件描述符操作3. 特殊设备操作三、企业级应用场景1. 日志管理系统2. 数据管道处理3. 自动化运维四、安全与权限管理1. 防误操作…

    【自定义类型-联合和枚举】--联合体类型,联合体大小的计算,枚举类型,枚举类型的使用

    目录 一.联合体类型 1.1--联合体类型的声明 1.2--联合体的特点 1.3--相同成员的结构体和联合体对比 1.4--联合体大小的计算 1.5--联合体练习 二.枚举类型 2.1--枚举类型的声明 2.2--枚举类型的优点 2.3--枚举类型的使用 &#x1f525;个人主页&#xff1a;草莓熊Lotso…

    李宏毅《深度学习》:Self-attention 自注意力机制

    一&#xff0c;问题分析&#xff1a; 什么情况下需要使用self-attention架构&#xff0c;或者说什么问题是CNN等经典网络架构解决不了的问题&#xff0c;我们需要开发新的网络架构&#xff1f; 要解决什么问题《——》对应开发self-attention架构的目的&#xff1f; 1&#…

    C++初阶-list的使用1

    目录 1.std::list简介 2.成员函数 2.1构造函数的使用 2.2list::operator的使用 3.迭代器 4.容量 4.1list::empty函数的使用 4.2list::size函数的使用 4.3list::max_size函数的使用 5.元素访问 6.修饰符 6.1list::assign函数的使用 6.2push_back和pop_back和push_fr…

    Python web 开发 Flask HTTP 服务

    Flask 是一个轻量级的 Web 应用框架&#xff0c;它基于 Python 编写&#xff0c;特别适合构建简单的 Web 应用和 RESTful API。Flask 的设计理念是提供尽可能少的约定和配置&#xff0c;从而让开发者能够灵活地构建自己的 Web 应用。 https://andi.cn/page/622189.html

    分享|16个含源码和数据集的计算机视觉实战项目

    本文将分享16个含源码和数据集的计算机视觉实战项目。具体包括&#xff1a; 1. 人数统计工具 2. 颜色检测 3. 视频中的对象跟踪 4. 行人检测 5. 手势识别 6. 人类情感识别 7. 车道线检测 8. 名片扫描仪 9. 车牌识别 10. 手写数字识别 11.鸢尾花分类 12. 家庭照片人脸检测 13. 乐…

    二十三、面向对象底层逻辑-BeanDefinitionParser接口设计哲学

    一、引言&#xff1a;Spring XML配置的可扩展性基石 在Spring框架的演进历程中&#xff0c;XML配置曾长期作为定义Bean的核心方式。虽然现代Spring应用更倾向于使用注解和Java Config&#xff0c;但在集成第三方组件、兼容遗留系统或实现复杂配置逻辑的场景下&#xff0c;XML配…

    [Vue]路由基础使用和路径传参

    实际项目中不可能就一个页面&#xff0c;会有很多个页面。在Vue里面&#xff0c;页面与页面之间的跳转和传参会使用我们的路由: vue-router 基础使用 要使用我们需要先给我们的项目添加依赖:vue-router。使用命令下载: npm install vue-router 使用路由会涉及到下面几个对象:…

    使用VGG-16模型来对海贼王中的角色进行图像分类

    动漫角色识别是计算机视觉的典型应用场景&#xff0c;可用于周边商品分类、动画制作辅助等。 这个案例是一个经典的深度学习应用&#xff0c;用于图像分类任务&#xff0c;它使用了一个自定义的VGG-16模型来对《海贼王》中的七个角色进行分类&#xff0c;演示如何将经典CNN模型…

    WooCommerce缓存教程 – 如何防止缓存破坏你的WooCommerce网站?

    我们在以前的文章中探讨过如何加快你的WordPress网站的速度&#xff0c;并研究过各种形式的缓存。 然而&#xff0c;像那些使用WooCommerce的动态电子商务网站&#xff0c;在让缓存正常工作方面往往会面临重大挑战。 在本指南中&#xff0c;我们将告诉你如何为WooCommerce设置…

    第J2周:ResNet50V2 算法实战与解析

    &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 学习目标 ✅ 根据TensorFlow代码&#xff0c;编写出相应的Python代码 ✅ 了解ResNetV2和ResNet模型的区别 一、环境配置 二、数据预处理 三、创建、划分数据…

    虚拟机Centos7:Cannot find a valid baseurl for repo: base/7/x86_64问题解决

    问题 解决&#xff1a;更新yum仓库源 # 备份现有yum配置文件 sudo cp -r /etc/yum.repos.d /etc/yum.repos.d.backup# 编辑CentOS-Base.repo文件 vi /etc/yum.repos.d/CentOS-Base.repo[base] nameCentOS-$releasever - Base baseurlhttp://mirrors.aliyun.com/centos/$relea…

    IP风险度自检,多维度守护网络安全

    如今IP地址不再只是网络连接的标识符&#xff0c;更成为评估安全风险的核心维度。IP风险度通过多维度数据建模&#xff0c;量化IP地址在网络环境中的安全威胁等级&#xff0c;已成为企业反欺诈、内容合规、入侵检测的关键工具。据Gartner报告显示&#xff0c;2025年全球78%的企…

    NV066NV074美光固态颗粒NV084NV085

    NV066NV074美光固态颗粒NV084NV085 在存储技术的快速发展浪潮中&#xff0c;美光科技&#xff08;Micron Technology&#xff09;始终扮演着引领者的角色。其NV系列闪存颗粒凭借创新设计和卓越性能&#xff0c;成为技术爱好者、硬件开发者乃至企业级用户关注的焦点。本文将围绕…

    C++ 日志系统实战第六步:性能测试

    全是通俗易懂的讲解&#xff0c;如果你本节之前的知识都掌握清楚&#xff0c;那就速速来看我的项目笔记吧~ 本文项目结束&#xff01; 性能测试 下面对日志系统做一个性能测试&#xff0c;测试一下平均每秒能打印多少条日志消息到文件。 主要的测试方法是&#xff1a;每秒能…