AJAX
什么是Ajax
Ajax(Asynchronous Javascript And XML),即是异步的JavaScript和XML,Ajax其实就是浏览器与服务器之间的一种异步通信方式
异步的JavaScript
它可以异步地向服务器发送请求,在等待响应的过程中,不会阻塞当前页面,在这种情况下,浏览器可以做自己的事情。直到成功获取响应后,浏览器才开始处理响应数据。
XML
是前后端数据通信时传输数据的一种格式,现在已经不怎么用了,现在比较常用的是 JSON
所以Ajax就是在浏览器不重新加载网页的情况下,对页面的某部分进行更新。
工作原理:
- Ajax提供与服务器异步通信的能力,可在web页面触发js事件中中服务器发出异步请求,如执行更新或查询数据库
- Ajax的核心是js对象XMLHttpRequest,使用户通过js向服务器提出请求并处理相应,不阻塞用户
- 当web服务器的相应返回时,使用js回调函数和CSS相应的更新页面的局部页面,而不是刷新整个页面
- 在页面与服务器交互的过程中不中断用户操作,用户甚至察觉不到浏览器正在与服务器进行通信
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"
- 数值(整数 / 浮点数):
42
、3.14
- 布尔值:
true
、false
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,767 | 2 字节 | 较小整数(如年龄) |
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 字节长度)。
- 示例:
三、日期和时间类型
用于存储时间信息,不同数据库可能略有差异:
常见类型
类型 | 格式 | 范围 | 用途 |
---|---|---|---|
DATE |
YYYY-MM-DD |
1000-01-01 到 9999-12-31 | 仅日期(如生日) |
TIME |
HH:MM:SS |
-838:59:59 到 838:59:59 | 仅时间(如营业时间) |
DATETIME |
YYYY-MM-DD HH:MM:SS |
1000-01-01 00:00:00 到 9999-12-31 23:59:59 | 日期 + 时间 |
TIMESTAMP |
时间戳(UTC) | 1970-01-01 到 2038-01-19 | 自动记录更新时间 |
YEAR |
YYYY 或 YY |
1901-2155 或 00-99 | 年份(如产品年份) |
四、布尔类型
用于存储真 / 假值,不同数据库实现方式不同:
数据库 | 布尔类型 | 说明 |
---|---|---|
MySQL | BOOLEAN 或 TINYINT(1) |
用 0 表示 FALSE ,1 表示 TRUE |
PostgreSQL | BOOLEAN |
直接存储 TRUE /FALSE |
SQL Server | BIT |
0 或 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 的优势
简化权限管理:
- 只需管理角色和权限,无需为每个用户单独配置。
- 新增用户时,只需分配角色,无需逐个分配权限。
易于扩展:
- 新增角色或权限时,只需修改角色 - 权限映射,不影响用户。
- 支持组织架构变化(如部门调整)。
符合组织架构:
- 与现实中的职位和职责对应(如 "财务" 角色对应财务部门)。
增强安全性:
- 通过约束条件(如互斥角色)避免权限滥用。
- 权限审计更方便(只需检查角色权限)。
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编码规范》