JAVA查漏补缺(2)

发布于:2025-05-24 ⋅ 阅读:(16) ⋅ 点赞:(0)

 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,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 的优势

  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编码规范》


    网站公告

    今日签到

    点亮在社区的每一天
    去签到