JavaWeb技术(下)
前端工程化
前端工程化是使用软件工程的方法来单独解决前端的开发流程中模块化、组件化、规范化、自动化的问题,其主要目的为了提高效率和降低成本。
实现技术栈
前端工程化实现的技术栈有很多,在这里采用ES6+nodejs+npm+Vite+VUE3+router+pinia+axios+Element-plus组合实现
ECMAScript6 VUE3中大量使用ES6语法
Nodejs 前端项目运行环境
npm 依赖下载工具
vite 前端项目构建工具
VUE3 优秀的渐进式前端框架
router 通过路由实现页面切换
pinia 通过状态管理实现组件数据传递
axios ajax异步请求封装技术实现前后端数据交互
Element-plus 可以提供丰富的快速构建网页的组件仓库
ECMAScript6
ECMAScr ...
JavaWeb技术(上)
Html、CSS、JavaScript基础语法点击这里了解
JSON前后端都是使用对象来存储数据的,但是JS的对象和Java的对象并不能互通,两者是将数据转化成JSON进行传输的。
JSON(JavaScript Object Notation)JS对象简谱,采用完全独立于编程语言的文本格式来存储和表示数据。JSON是一种字符串格式,这种格式无论是在前端还是后端,都可以很容易的转换成对象,所以常用于前后端数据传递。
JSON语法:var obj = '{"属性名": "属性值", ...}'
JSON在客户端(前端)的使用:
获取JSON字符串
使用JSON.parse(jsonStr)将JSON转化成对象
JSON在服务端(后端)的使用:
编写需要转化成JSON的对象或者获取到JSON时
使用GSON、Jackson、Fastjson等第三方工具类(需要导入jar包),将对象转化成JSON字符串。Jackson语法为:new ObjectMapper().writeValueAsString(js ...
Java命名规范
命名规则
由字母、下划线、美元符号和数字组成,长度不限
首字符不能是数字
不能是关键字
不能是true、false和null,尽管这三个不是关键字
区分大小写
变量名(驼峰命名法) 变量的名字可大小写混用,但首字符应小写。词由大写字母分隔,限制用下划线,限制使用美元符($),因为这个字符对内部类有特殊的含义。
如:inputTextSize。
包名 包的名字应该都是由一个小写单词组成。
如:net.test.modules。
类名和接口名 类名每个单词的首字母都要大写,通常由多个单词合成一个类名。
如:DataFile、InfoParser。
常量名 常量命名则前面应该是static final,后面变量的名字全部大写。
如:static final MAX = 1024。
方法名 方法名的第一个单词应该是动词,但首字母小写,后面每个单词的首字母大写。大写字母将词分隔并限制使用下划线。方法如果有传入参数,参数的名字必须和变量的命名规范一致。使用有意义的参数命名,如果可能的话,使用和要赋值的字段一 ...
JDBC和连接池
JDBC是为访问不同数据库提供的统一接口,为使用者屏蔽了细节问题。可以利用JDBC连接任何提供了JDBC驱动程序的数据库系统,从而完成对数据库的各种操作。
数据库连接方式连接数据库主要有2种方式
使用Class.forName自动完成注册驱动,直接连接数据库:
Class.forName(“com.mysql.cj.jdbc.Driver”);
Connection connection = DriverManager.getConnection(url, user, password); //其中的参数最好在使用时从文件中提取出来,方便修改
jdk1.5以后使用了jdbc4,不再需要显示调用Class.forName注册驱动,可以直接使用语句Connection connection = DriverManager.getConnection(url, info);连接数据库
在Java中输入SQL语句在连接建立后,如果需要对数据库进行访问,执行命名或者SQL语句,可以通过Statement、PreparedStatement、Calla ...
MySQL进阶篇
存储引擎存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,也可以被成为表类型。
创建表时可以指定存储引擎,在CREATE TABLE语句后面添加ENGINE=存储引擎名
查询数据库支持的存储引擎:SHOW ENGINES;
MySQL体系结构
MySQL的服务端是分层实现的:
连接层:接收客户端连接,完成安全处理,授权和校验权限等操作
服务层:核心部分,实现SQL接口,解析器,查询优化器,缓存等,所有跨存储引擎的功能也在这一层实现,如过程,函数等
引擎层:存储引擎负责MySQL中数据的存储和提取的方式,服务器通过API和存储引擎通信。不同的存储引擎有不同的功能
存储层:存储数据库数据
存储引擎特点InnoDBInnoDB是一种兼顾高可靠性和高性能的通用存储引擎,MySQL5.5之后默认的存储引擎为InnoDB
特点:
DML操作遵循ACID模型,支持事务
行级锁,提高并发访问性能
支持外键FOREIGN KEY约束,保证数据的完整性和正确性
文件:xxx.ibd,xxx表示表名,InnoDB每张表都会对应这样一个表空间文件,存储表 ...
MySQL基础篇
MySQL概述
名称
解释
简称
数据库
将数据有组织的存储的仓库
DataBase(DB)
数据库管理系统
操纵和管理数据库的大型软件
DBMS
SQL
操作关系型数据库的编程语言,定义了一套操作关系型数据库的统一标准
Structured Query Language
工程师通过SQL操作DBMS,间接管理数据库中的数据
Oracle、MySQL等系统是关系型数据库管理系统,支持使用SQL语言进行数据库操作。
关系型数据库:建立在关系模型基础上,由多张相互连接的二维表组成的数据库。
使用MySQL安装:这里推荐安装Mysql8版本,可以参考这篇文章安装MySQL
启动与停止:
net start mysql80
net stop mysql80
客户端连接:mysql [-h 127.0.0.1] [-P 3306] -u root -p
SQL
SQL语句可以单行或多行书写,以分号结尾
MySQL中的SQL语句不区分大小写,但是关键字推荐使用大写
注释:
单行注释:-- 注释内容或# 注释内容(MySQL特有)
多行注释:/*注释内容*/
SQL数 ...
java反射
反射利用反射机制,可以通过外部文件配置,在不修改源码的情况下控制程序,符合设计模型中OCP原则
反射机制允许程序在执行期间借助于ReflectionAPI取得任何类的内部信息(成员变量、构造器、成员方法等),并能操作对象的属性及方法。
加载类之后,在堆中产生了一个Class类型的对象,这个对象包括了类的完整结构信息。这个对象就像一面镜子,通过这个镜子看到类的结构,所以称之为:反射
反射可以做到的事:
在运行时判断任意一个对象所属的类
在运行时构造任意一个类的对象
在运行时得到任意一个类所具有的成员变量和方法
在运行时调用任意一个对象的成员变量和方法
生成动态代理
使用反射后,程序的执行速度会受到影响
反射相关的类常用的反射相关的类都在java.lang包中
Class:代表一个类,表示某个类加载后在堆中的对象
reflect.Method:类的方法
reflect.Field:类的成员变量,不能得到private属性
reflect.Constructor:构造器
Class类
Class类也是继承Object的类
Class类对象不是new出来的,而是系统创建的
对于某个 ...
Java网络编程基础
网络 大都是计算机网络的基础知识,这里仅复习一下重点概念。
IP地址=网络地址+主机地址
IPv4最大的问题在于网络地址资源有限,制约了互联网的应用与发展。IPv6的使用,不仅能解决网络地址资源数量的问题,而且也解决了多种接入设备连入互联网的障碍
端口号用于标识计算机上某个特定的网络程序,范围是0~65535,其中0~1024已经被占用,当浏览器或程序要请求特定IP的某些服务时,需要使用IP地址+端口号的形式访问
常见的端口号:
ssh:22 ftp:21 smtp:25 http: 80
tomcat: 8080 mysql:3306 oracle:1521 sqlserver:1433
OSI七层模型是理论上的,并没有实际使用。主要使用的是TCP/IP模型四层模型,分为:应用层、传输层、网际层、网络接口层
TCP协议:
使用TCP前需要“三次握手”建立连接,形成传输数据通道,进行可靠传输
TCP协议进行通信的两个应用进程:客户端、服务端
在连接中可进行大数据量的传输
传输完毕需要释放已建立的连接,效率较低
UDP协议:
将数据、源、目的地封装成数据 ...
javaIO流
文件流 文件在程序中是以流的形式来操作的,文件保存在硬盘中,通过输入流被java程序读取,程序再通过输出流输出进文件中。流是数据在数据源和程序之间经历的路径,输入流是数据从数据源到程序的路径,输出流是程序到数据源的路径。
java.io包中提供了各种流类和接口,以获取不同种类的数据,并通过方法输入或输出数据。
流的分类
按照数据单位可以分为:字节流(8bit)、字符流
按照数据流向分为:输入流、输出流
按照流的角色不同分为:节点流、处理流/包装流
常用的文件操作
创建文件对象相关构造器和方法
new File(String pathname):根据路径创建文件对象
new File(File parent, String child):根据父目录文件+子路径构建
new File(String parent, String child):同上
获取文件相关信息
getName:获取文件名
getAbsolutePath:获取绝对路径
getParent:获取文件父目录
length:获取文件占用字节
exists:文件是否存在
isFile:是否为文件
isD ...
java多线程基础
在操作系统之上,可以同时运行很多个进程,并且每个进程之间相互隔离互不干扰。CPU会通过时间片轮转算法,为每一个进程分配时间片,并在时间片使用结束后切换下一个进程继续执行,通过这种方式来实现宏观上的多个程序同时运行。
由于每个进程都有一个自己的内存空间,进程之间的通信就变得非常麻烦(比如要共享某些数据)而且执行不同进程会产生上下文切换,非常耗时
后来,线程的概念被提出,一个进程可以有多个线程,线程是程序执行中一个单一的顺序控制流程,现在线程才是程序执行流的最小单元,各个线程之间共享程序的内存空间(也就是所在进程的内存空间),上下文切换速度也高于进程。
很多框架都在使用多线程,比如Tomcat服务器,所有用户的请求都是通过不同的线程来进行处理的,这样网站才可以同时响应多个用户的请求。
虽然多线程能够解决很多问题,但是,如何才能正确地使用多线程,如何才能将多线程的资源合理使用,这都是我们需要关心的问题。
在Jdk1.5的时候,新增了java.util.concurrent(JUC)包,其中包括大量用于多线程编程的工具类,目的是为了更好的支持高并发任务,让开发者进行多线程编程时减少竞争条件和死 ...