工作流程:混合开发、前后端分离开发
前后端分离开发:
混合开发:
开发工具:VSCode
文字、图片、音频、视频、超链接
HTML+CSS+JS
通过浏览器内核解析和渲染(不同的浏览器内核不同,解析的效果存在差异)
HTML:定义网页的结构(页面元素和内容)
CSS:定义网页的表现(页面元素的外观、位置等页面样式)
JavaScript:定义网页的行为(交互效果)
html代码直接在浏览器中运行,Html标签有浏览器解析, 标签是预定好的,无法自定义。
创建**.html文件,然后输入html:5**
定义标题
在标签外注释:ctrl + /
在标签内注释:
注释整行:ctrl + /
注释光标选中的:ctrl + shift + /
标签导航:w3school 在线教程
例子:焦点访谈:中国底气 新思想夯实大国粮仓_新浪新闻 (sina.com.cn)
src:图片路径,绝对路径/相对路径
width:宽度
具体的像素值和百分比写法:
height:高度
只有具体的像素值
<h1~h6>标签逐渐减小
文本想要被修饰,必须要放到标签中
div和span标签
div标签:
属性
span标签:
可以选中一段文本,但是没有任何的语义,需要额外的CSS修饰
可以选择不同的style:
属性
(1)行内样式:写在标签的style属性中(不推荐)
(2)内联样式:写在style标签中(可以写在页面的任何位置,但是通常写在head标签中)
(3)外联样式:写在一个单独的**.css**文件中(需要通过link标签在网页中引入)
(1)关键字/英文单词:red、green、blue…
(2)RGB表示法:红绿蓝三原色,每项取值(0~255)。rgb(0,0,0)
(3)十六进制表示:#开头,#xxxxxx,每两个x代表一个颜色(红绿蓝),x的取值为(0~f)
可以用取色器来找颜色
font-size:改变字体大小,单位是像素px
用来选取需要设置样式的元(标签)
(1)元素选择器:
将标签名作为选择器的名称,标签名{…},只要采用该标签,就会有相应的样式
(2)类选择器
用一个类.cls来包含样式,在标签中通过类的名字来得到相应的样式
类选择器的优先级比元素选择器高
(3)id选择器
对标签起一个唯一的id(不能重复),id选择器要加
优先级:id选择器>类选择器>元素选择器
属性:
href:指定资源访问的url
target:指定在何处打开资源链接
_self:默认值,在当前页面打开
_blank:在空白页面打开
CSS修饰:
盒子:页面中所有的标签都可以看作是一个盒子,通过盒子的视角更方便的进行页面布局操作
盒子模型组成:内容区域(content)、内边距(padding)、边框(border)、外边距(margin)
简单说,盒子模型就是三个CSS属性:padding,border,margin
有两个布局标签 span、div
在网页中以表格(行、列)的形式整齐展示数据
表单属性:
不同类型的input元素、下拉列表、文本域等
type属性:
name属性:
value属性:
checked属性:
给单选按钮和复选框,选择一个默认值
option属性:
定义列表项,必须给option标签指定value属性
selected属性:
下拉列表默认选中
cols属性:
定义文本域中可以写多少列
rows属性:
定义文本域中可以写多少行
JavaScript是一门跨平台、面向对象的脚本语言,控制网页的行为、能使网页可交互
(1)内部脚本:将JS代码定义在HTML页面中
(2)外部脚本:将JS代码定义在外部JS文件中,然后引入到HTML页面中
(1)书写语法
(2)输出语句
JS中使用(variable的缩写)、let、const来声明变量
let关键字所定义的变量,只能在let关键字所在的代码块内有效,并且不允许重复声明,也就是说在外面无效
const关键字用来声明一个只读常量,一旦声明,常量的值不能改变。
var关键字可以重复定义变量,定义的变量在所属的外有效。后面定义的变量会把前面定义的变量覆盖。
3.14115926535
JS是一门弱类型语言,变量可以存放不同类型的值(java属于强类型)
变量名规则:
(4)数据类型
JS中分为原始类型、引用类型(对象)
原始类型:
使用运算符可以获取数据类型:
引用类型:对象就是引用类型
通过关键字进行定义
形式参数不需要类型,因为JS是弱类型语言(let、var也不能写)
返回值也不需要定义类型,可以在函数内部直接使用返回即可。
调用:函数名称(实际参数列表)
函数的定义:
普通函数:
省略:
当形参有且仅有一个时,可以省略小括号
当语句体中只有一条代码时,可以一起省略
定义Array:
JS是弱类型语言,所以数组中可以存储任意类型的元素
访问:
Array长度是可变的:
(1)for i 遍历:
快捷键for+enter
(2)for of 遍历:
快捷键:forof+enter
(3)forEach遍历:
快捷键:forEach+enter
String对象创建:
属性:
模板字符串和普通字符串的区别:
模板字符串中可以使用来引用变量的值,不需要拼接字符串。
JS自定义对象:
调用格式:
对象名.属性名 对象名.函数名
JS中的对象支持动态扩展属性和方法:
JSON:JavaScript Object Notation,JS对象标记法,本质是通过JS对象标记法书写的文本。
使用场景:多作为数据载体,在网络中进行数据传输
JSON定义:
JS对象转为JSON字符串:
JSON对象转JS对象:
在JS中书写JSON可以用.
概念:Browser Object Model浏览器对象模型,指的是JS将浏览器的各个组成部分封装成对象,使用对象可以操作浏览器。
常用组件:
①window:
获取:直接使用window,其中可以省略
属性:
方法:
alert(msg):显示带有一段消息和一个确认按钮的警告框
confirm(msg):显示带有一段消息以及确认按钮和取消按钮的对话框
很多应用在操作之后的弹窗
setInterval(fun,毫秒值):按照指定的周期(以毫秒计)循环调用函数。
方法以指定的时间间隔(以毫秒为单位)调用函数。
方周期性调用函数,直到调用 clearInterval() 或关闭窗口。
**注释:**1 秒 = 1000 毫秒。
如需仅执行一次函数,请改用 方法。
如需清除间隔,请使用 返回的 id:
然后你可以通过调用 来停止执行:
很多应用在周期性的更换网页图片
setTimeout(fun,毫秒值):在指定的毫秒数后调用函数
②location:
地址栏对象,获取或设置地址栏地址,设置地址栏地址可以是实现页面跳转的效果。
①概念:Doucument Object Model,文档对象模型
将标记语言的各个组成部分封装为对应的对象:
JavaScript通过DOM,就能够对HTML进行操作:
②DOM操作-获取元素对象
使用ID:
当使用getElementByld根据ID属性值获取时
③DOM操作-使用元素对象
Elment:元素对象的使用(查阅文档)
常见访问操作:
访问内容体:元素对象
访问输入框内容:元素对象
访问属性:元素对象.属性名
访问样式:元素对象.style.样式属性名
HTML事件是发生在HTML元素上的“事情”
JS可以在事件被侦测到时执行代码
通过HTML标签中的事件属性进行绑定
通过DOM元素属性绑定
HTML DOM 事件 (w3school.com.cn)
Vue是一套前端框架,免除原生JS中的DOM操作
基于MVVM(Model-View-ViewModel)思想,实现数据的双向绑定,将编程的关注点放在数据上
安装 — Vue.js (vuejs.org)
插值表达式:
{{表达式}},表达式可以是变量、三元运算符、函数调用、算术运算
这些指令必须在Veu接管的区域内
为html标签绑定属性值,如设置href、css样式
v-bind绑定的变量必须要在模型数据中声明
在表单元素上创建双向数据绑定
v-model绑定的变量必须要在模型数据中声明
为html标签绑定事件
v-if、v-else-if、v-else:条件性的渲染某元素,判定true时渲染,否则不渲染
v-show:根据条件展示某元素,区别在于切换的是display属性的值
两者的区别在于:
不符合条件的也会加载,占内存,以形式显示,而如果不符合条件的不会加载
列表渲染,遍历容器或对象
在Vue.js中,created()和mounted()是两个常见的生命周期钩子函数,它们分别用于在Vue实例被创建之后和挂载到DOM之后执行一些逻辑。
具体区别和用法如下:
在Vue实例被创建之后立即执行。在这个阶段,Vue实例的数据观测和事件配置已完成,但尚未挂载到DOM上。通常在这个阶段执行一些数据初始化、事件监听、异步请求等逻辑,但不涉及DOM操作。
在Vue实例挂载到DOM之后执行。在这个阶段,Vue实例已经完成了数据观测、编译渲染、创建虚拟DOM和真实DOM等所有过程,可以进行DOM操作。通常在这个阶段执行一些需要依赖DOM元素的逻辑,如获取元素尺寸、绑定事件、设置定时器等。
URL中的hash(#)与组件之间的关系
Vue官方的路由插件
在router/index.js文件中定义路由,并在main.js中导入路由
router-link 是一个组件,它默认会被渲染成一个带有链接的a标签,通过to属性指定链接地址。
注意:被选中的router-link将自动添加一个class属性值.router-link-active。
router-view 用于渲染匹配到的组件。
按下build按钮,打包在dist目录下,然后将打包后的dist部署在NINGX
将打包好的dist目录下的文件,到NGINX安装目录下的HTML文件中
双击nginx.exe,Nginx服务器默认占用80端口号
①没有启动成功,在logs文件中有一个error.log文件,其中标志了问题,
10013问题,说明08端口被占用,在CMD中输入
查找什么程序占用80端口,任务管理器中可以查看那个ID为324的程序在占用80端口
②更换端口号
在conf目录下找到nginx.conf目录
更改listen的数值
访问:https://localhost:80
作用:
Axios对原生的Ajax进行了封装,简化书写,快速开发
起步 | Axios中文文档 | Axios中文网 (axios-http.cn)
①引入Axios的JS文件
② 使用Axios发送请求,并获取响应结果
方式一:
get请求
post请求
方式二:
在项目目录下安装Axios:
需要使用axios时,导入axios:
页面加载完成(mounted方法),发送异步请求获取员工信息
接口:指的是后端程序对外暴露的可以访问的入口,一个接口包括(url地址、请求方式、请求参数、响应结果示例)
接口文档分为在线和离线
前端工程化:在企业级开发中,把前端开发所需要的工具、技术、流程、经验等进行规范化、标准化
目录结构:
Vue-cil是Vue官方提供的一个脚手架,用于快速生成一个Vue的项目模板
提供的功能
依赖环境:NodeJS
npm以及Vue-cil安装的问题:
报错npm ERR! A complete log of this run can be found in: npm ERR!-CSDN博客
解决执行npm(或pnpm)时报:证书过期 certificate has expired问题_reason: certificate has expired-CSDN博客
npm install -g @vue/cli 安装vue脚手架报错(一般都能解决)_use npm install -g @vue/cli to install and retry-CSDN博客
nodejs 报错 Error: EPERM: operation not permitted, mkdir‘xxxxxxxxxxxxxxxx‘_nodejs安装后error: eperm: operation not permitted, mk-CSDN博客
做前端开发,前端代码写在src目录中
①被隐藏了
②设置中搜索nmp
Visual Studio Code中npm脚本找不到解决方法_vscod npm脚本不显示-CSDN博客
在工程化项目中,vue要做的就是通过把渲染到的指定区域
(1)
(2)
:用于对外输出一个js文件中定义的变量
:用于在一个js文件中加载export导出的变量
(3)Vue组件的结构
①:内部必须只有一个根元素
②
③
(4)使用组件的三个步骤
①在
②在export default 中使用components 节点注册组件
③在中以标签的形式使用刚才注册的组件
技巧:直接做步骤③,步骤①和步骤②工具自动补全。例如 AboutView.vue对应的标签就是
(5)初始化vue文件
创建Vue文件之后,打一个,找到
Element是一套基于的桌面组件库
(1)在当前工程的根目录下,安装ElementUI组件库
(2)在main.js中引入ElementUI组件库
(3)创建views/element/ElementView.vue组件,访问Element官网,组件代码
(4)修改App.vue,加载ElemmentView.vue组件
用于展示多条结构类似的数据,可对数据进行排序、筛选、对比或其他自定义操作。
实现思路:
Pagination分页:当数据量过多时,使用分页分解数据
layout所展示的:
Dialog对话框:弹出自定义内容(表单)
组件 | Element
IDEA快捷键:
快速补全:ctrl+alt+v
快速生成函数:alt+insert
Maven是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过描述信息来管理项目的构建
在Mven的pom.xml中直接写入需要的jar包,及其版本
可以使不同的软件所创造的项目架构得到统一
Dependcy寻找jar包会优先从本地仓库中寻找,如果找不到会从远程仓库中获取,如果远程仓库中没有,会从中央仓库中获取,下载到远程仓库中,再下载到本地仓库。
依赖:当前项目运行所需要的jar包,一个项目中可以引入多个依赖
配置:
如果引入的依赖,在本地仓库中不存在,将会连接远程仓库/中央仓库进行下载
对应依赖的坐标可以到Maven Repository: Search/Browse/Explore (mvnrepository.com)搜索
依赖具有传递性
直接依赖:在当前项目中,通过依赖配置建立的依赖关系
间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源
排除依赖:主动断开依赖的资源,被排除的资源无需指定版本
以来的jar包,默认下可以在任何地方使用,可以通过设置其作用范围
作用范围:
主程序范围有效(main文件夹范围内)
测试程序范围有效(test文件夹范围内)
是否参与打包运行(package指令范围)
Maven的生命周期就是为了所有的maven项目构建过程进行统一和抽象
Maven中有三套相互独立的的生命周期:
在同一套生命周期中阶段是有先后顺序的,只有完成前面的阶段才会完成后面的阶段
执行生命周期:
通过Maven工具栏中选择对应的生命周期
(1)创建springboot工程,并勾选web开发相关依赖
(2)定义HelloController类,添加方法hello,并添加注解
(3)运行测试
标识请求处理类:
表示请求方法:
概念:Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器与服务器之间数据传输的规则
特点:
基于TCP协议,面向连接,安全
基于请求-响应模型:一次请求对应一次响应
HTTP协议是无状态的协议:对于事务处理没有记忆能理,每次请求-相应都是独立的(多次请求间不能共享数据,但是速度快)
状态码大全:
状态 | Status - HTTP 中文开发手册 - 开发者手册 - 腾讯云开发者社区-腾讯云 (tencent.com)
响应状态码:
响应头:
介绍:
开源的Web服务器,支持JavaEE规范
修改Tomcat端口号:修改port就可以
注意:
IDEA会内置Tomcat,不需要自己安装,为内嵌Tomcat
前端浏览器发送的HTTP数据,被HttpServletRequest接受,然后经由HttpServletResponse发送给浏览器
CS架构需要安装对应的客户端,并且不同的操作系统需要不同版本的客户端
BS架构的访问速度,主要取决于网络的带宽
接口测试工具
SpringBoot自带的方式
IDEA会自动的对name和age进行类型转换
简单参数:参数名与形参变量名相同,定义形参即可接收参数。
当参数名不一致时,可以使用完成映射
请求参数名与形参对象属性名相同,定义POJO接受即可
复杂实体对象:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接受嵌套POJO属性参数(类名.参数名)
请求数组名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数
请求数组名与形参数组名称相同且请求参数为多个,绑定参数关系
使用注解完成日期参数格式转换
一定要注意pattern指定的格式和 发送的格式要一致,不然就会出错
JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要使用标识
注意在postman中选择body中的raw和JSON
通过请求URL直接传递参数,使用{…}来标识该路径参数,需要使用获取路径参数
可以定义多个路径
{ }中的路径名需要与形参名保持一致
ResponseBody
统一响应结果:Result(code,msg,data)
Controller:控制层,接受前端发送的请求,进行处理,响应数据
service:业务的逻辑层,处理具体的业务逻辑
dao:数据访问层,对数据增删改查(面向接口编程,增加程序的灵活性)
内聚:软件中各个功能模块内部的功能联系
耦合:衡量软件中各个层/模块之间的依赖、关联程度
软件设计原则:高内聚,低耦合
耦合:
解耦:
控制反转:Inversion Of Control,简称IOC,对象的创建控制权由程序自身转移到外部(容器),这种思想就叫控制反转
依赖注入:Dependency Injection,简称DI。容器为应用程序提供运行时,所依赖的资源,称为依赖注入。
Bean对象:IOC容器中创建、管理的对象,称之为bean
Service层及Dao层的实现类,交给IOC容器管理
通过来实现
为Controller及Service注入运行时依赖的对象。通过来实现(运行时,IOC容器会提供该类型的bean对象,并赋值给该变量
想要切换从容器获得的类,只需要切换就行
Bean的声明
要把某个对象交给IOC容器管理,需要在对应的类上加上如下注解之一:
但是是被包含在中的,所以没有必要单独添加
Bean对象的名字可以在注解中直接指定
Bean组件扫描:
注解想生效,还需要被组件扫描注解扫描,注解包含在启动类声明注解,扫描的范围默认是启动类所在包及其子包
指定扫描的包:在启动类中重新写注解,直接指定想要扫描的包
注解,默认是按照类型进行,如果存在多个相同类型的bean,将会报错
解决办法:
SQL:操作关系型数据库的语言,定义操作所有关系型数据库的同意标准
通用语法:
SQL语句的分类:
在使用数据库之前要先启动数据库:
图形化工具:DG(集成在IDEA中了)
表结构操作
IDEA新UI怎么连接数据库?创建数据库表?设置主键或unique?_idea数据库 unique怎么设置-CSDN博客
①创建
②数据类型
MySQL 数据类型 | 菜鸟教程 (runoob.com)
③表结构设计
在删除表时,表中的数据也会全部删除
①Insert语局
如果要对create_time和update_time(都指定为了 not null)进行修改的话,系统函数会自动回去当前时间
id是自动自增的所以在insert的时候,参数就可以直接写null
插入数据时,指定的字段顺序需要与值的顺序一一对应
字符串和日期型数据要包含在引号内
②Update语句
③Delete操作
查询数据库表中的记录
技巧:
可以先敲表明,再敲字段,这样会自动提示
可以在别名的外面加上,这样可以在里面显示空格等特殊符号
聚合函数:
将一列数据作为一个整体 ,进行纵向计算
不对进行计算
聚合函数不能在where后面使用
count的字段一定是非空字段,例如id,推荐使用
分组查询:
分组查询时select的字段一类是分组字段,一类是聚合函数
where和having的区别:
注意:
排序查询
后面字段是有顺序的,只有第一个字段相同时,第二个字段才会生效
分页查询
起始索引从0开始,而查询记录数时这一页有多少个数据
起始索引的计算公式:(页码 - 1) * 每页的查询记录数
如果查询的是第一页的数据,起始索引可以省略,直接写
①一对多
外键约束:
②多对多
③一对一
一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他字段放在另一张表中,以提升操作效率
持久层框架,用于简化JDBC的开发
CSS 子绝父相 理解 - 简书 (jianshu.com)
now()`会自动回去当前时间
id是自动自增的所以在insert的时候,参数就可以直接写null
插入数据时,指定的字段顺序需要与值的顺序一一对应
字符串和日期型数据要包含在引号内
②Update语句
[外链图片转存中…(img-p0zXbpqY-1711791454178)]
[外链图片转存中…(img-zXd6Z1xd-1711791454178)]
③Delete操作
[外链图片转存中…(img-oju3GGf2-1711791454178)]
[外链图片转存中…(img-E6q3pgof-1711791454178)]
查询数据库表中的记录
[外链图片转存中…(img-P7eFpe4d-1711791454179)]
[外链图片转存中…(img-yz75AIo3-1711791454179)]
技巧:
可以先敲表明,再敲字段,这样会自动提示
可以在别名的外面加上,这样可以在里面显示空格等特殊符号
[外链图片转存中…(img-fAbqVhyO-1711791454179)]
聚合函数:
将一列数据作为一个整体 ,进行纵向计算
不对进行计算
聚合函数不能在where后面使用
[外链图片转存中…(img-qUZ1d8GK-1711791454179)]
count的字段一定是非空字段,例如id,推荐使用
分组查询:
[外链图片转存中…(img-Lzqlzbyb-1711791454180)]
分组查询时select的字段一类是分组字段,一类是聚合函数
where和having的区别:
[外链图片转存中…(img-ogRFf5TT-1711791454180)]
注意:
[外链图片转存中…(img-raTjaUCK-1711791454180)]
排序查询
[外链图片转存中…(img-Uz7MEo3t-1711791454180)]
[外链图片转存中…(img-qYjtpvEV-1711791454180)]
后面字段是有顺序的,只有第一个字段相同时,第二个字段才会生效
[外链图片转存中…(img-mavmwyRK-1711791454181)]
分页查询
[外链图片转存中…(img-nTvqObOu-1711791454181)]
起始索引从0开始,而查询记录数时这一页有多少个数据
起始索引的计算公式:(页码 - 1) * 每页的查询记录数
如果查询的是第一页的数据,起始索引可以省略,直接写
①一对多
[外链图片转存中…(img-vQK6SoZn-1711791454181)]
[外链图片转存中…(img-Xu1hHv1x-1711791454181)]
外键约束:
[外链图片转存中…(img-m3EstXel-1711791454182)]
②多对多
[外链图片转存中…(img-PoC1XOqM-1711791454182)]
③一对一
一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他字段放在另一张表中,以提升操作效率