?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×101?) | 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編碼規范》