欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > javaweb

javaweb

2025/3/1 10:17:00 来源:https://blog.csdn.net/2301_76371717/article/details/145811043  浏览:    关键词:javaweb

浏览器搜索网址,呈现前端部分内容,用户输入数据,会向服务器发送请求,服务器会将相应数据请求发送给数据库,数据库会将对应数据发送给前端予以响应。

web前端基础

2.网页标准

html负责网页的结构,即页面的元素与内容;css负责网页的表现,即负责各类元素的样式设计;Javascript负责网页的行为,实现一些交互效果。

一、html超文本标记语言。

超文本-可定义除文字信息以外的图片、音频、视频等内容。标记语言-由标签构成的语言,它会由浏览器来解析。

<html>根目录

<head>网页头部,存放浏览器看的信息<body>网页的主体部分,存放用户看的信息,网页的主体内容

〈a〉超链接标题〈h1-6〉h1时标题字体最大,h6字体最小。

css层叠样式表,用于控制页面样式

引入方式:

行内样式-在标签内使用style属性〈h1 style〉

内部样式-定义<style>标签,在标签内部定义样式,〈style〉h1

外部样式-定义<link>标签,通过href属性引入外部css文件,<link href=>

css选择器语法:

选择器名{

css样式名:css样式值;

主要用于内部样式使用:

〈style〉

.public-date{

color:red;

}

〈style〉

〈span class="public-date"〉<span>

常见标签:

<p>段落标签  <br>换行标签 <b>加粗标签

<u>下划线  <i>倾斜 <s>删除线

字符实体:空格-&nbsp  <-&lt >-&gt

路径表示:

绝对磁盘路径-src="C:\user\desktop"

绝对网络路径-src="https://i2.sinaimg.cn/dy/logo.png"

相对路径:当前目录-./   上一级目录-../

 

盒子模型:

内容区+内边距区-padding+边框区-border+外边距区-margin(先上下,再左右)

布局标签:

<div>一行只显示一个,可设置宽高

<span>一行可显示多个,不可设置宽高

flex布局:弹性布局

在父容器-Flex Container中添加子元素-Flex item

display:flex设置弹性布局 flex-direction设置主轴 justify-content设置子元素的对齐方式

表单标签:<form>用于网页数据采集功能

表单属性:

action用url设置发送对象

method设置表单的发送方式(GET-表单数据直接拼接在url后,POST-表单数据在请求体中携带,无大小限制)

表单项标签:

<input>定义表单项,用type定义类型(text单行输入文本  password密码字段 radio单选按钮 checkbox复选框 file定义文件上传按钮 submit提交按钮 reset重置按钮 button可点击 date日期),想要采集数据必须设置name属性。placeholder-信息提示.

可通过用lable标签包裹来提高体验感,for用于设置绑定id。

 <select>定义下拉列表,通过〈option〉来设置选项

<textarea>定义文本域,大号输入框

表格标签:

〈table〉〈thead〉定义表头  〈tr〉定义一行

〈th〉定义表头单元格〈td〉定义普通单元格  〈tbody〉出表头外的表格主体部分

二、JavaScript

跨平台、面向对象的脚本语言,用来控制网页行为,实现页面交互效果。

组成

1.ECMScript-JS基础语法核心知识

2.BOM-浏览器对象模型,用于操作浏览器

3.DOM-文档对象模型,用于操作HTML文档

核心语法

1.引入方式

内部脚本:将JS代码定义在HTML页面中(<script>包裹)

外部脚本:将JS代码定义在外部JS文件中(通过script的src引入到HTML页面)

2.基础语法

变量声明-let 关键字,弱类型,可存放不同类型的值。

常量声明-const关键字,一旦声明值不能改变。

alert-定义一个弹出框   console.log输出到控制台  document.write写入html的body区域中

基本数据类型:

number 数字   boolean 布尔类型  null对象为空(区分大小写) undefined 未初始  string字符串(也包括反引号)

typeof获取数据类型  在反引号中,可通过${}来引用变量参数,可实现简化字符串拼接。

函数:用来执行特定任务的代码块

通过function进行定义(匿名函数function(){}或者()=>{})

自定义对象:

let 对象名={

属性名:属性值,

方法名:function(形参列表){}

对象名.属性名或方法名来调用。

json:JS对象标记法

与JS对象的区别是json的键必须通过双引号引起来。多用于做数据载体,即前端浏览器与服务器之间的数据传输。

通过JSON.stringify将JS对象转换成json文本,通过JSON.parse()实现反转换。

DOM:文档对象模型

将标记语言HTML的各个组成部分封装成对应的对象(Document文档 Element元素 Attribute属性 Text 文本Comment注释)

操作-获取操作的DOM对象(document.querySelectorAll),查文档API文档操作。

事件监听:在事件触发时,调用一个函数来做出响应,也称为时间绑定或注册事件。

语法-事件源.addEventListener('事件类型',事件触发执行的函数-可多次绑定同一事件,与.onclick属性的区别是onclick多个事件时会覆盖。

事件监听三要素-事件源(dom对象元素)+事件类型(触发方式)+事件触发执行的函数

常见事件:

鼠标事件-click点击  mouseenter鼠标进入 mouseleave鼠标离开 keydown按下键盘 keyup抬起键盘 focus获得焦点触发 blur失去焦点触发 input用户输入触发 submit表单提交触发

在js文件中引用另一个js文件,通过import导入,在另一个文件中通过export将函数导出。

Vue3:构建用户界面渐进式的JavaScript框架。实现将原始数据渲染展示出来。

vue核心包(声明式渲染和组件系统)相关插件(客户端路由-VueRouter  状态管理vuex2,pinia3  构建工具webpack2,vite3)

vue入门:基于数据来驱动视图的展示。

1.准备:引入vue模块(<script type="module">) 创建vue应用事例(调用createApp({ }).mount(指定渲染的id对象)) 指定控制的html元素(<div id="">)

2.数据来驱动视图:准备数据(在vue应用实例中调用data(){return{数据名:"数据"}}) 渲染页面(在html显示页面中通过插值表达式{{数据名}}来渲染)

vue常用指令:html上有v-前缀的属性

1.v-for:用于遍历元素或对象

v-for="(对象,索引) in 对象列表" :key="对象的唯一标识" 用插值表达式来显示({{展示的对象}})

2.v-bind:动态的为html标签绑定属性值

v-bind:属性名="属性值"或者:属性名="属性值"

不能用插值表达式来显示

3.用于控制元素的显示与隐藏

v-if或v-else-if或v-else:条件判断,成立才渲染,用于不频繁切换

v-show:由条件来展示元素,都渲染,用display来控制显示(none隐藏),用于频繁切换。

v-if/show="表达式"

4.v-model:实现双向数据绑定,采集或设置表单数据,实现数据模型与表单展示同步变化

v-model="需要绑定的变量名"

 5.v-on:为html标签绑定事件,添加事件监听

v-on:绑定的事件名="执行的方法名"或者@绑定的事件名="执行的方法名"

Ajax

1.入门:异步的javascript和xml(可拓展的标记语言)

数据交换-可给服务器发送请求,并获取服务器响应的数据

异步交换-可实现不重新加载整个页面来更新部分网页。(同步-客户端和服务端是串联进行操作的,异步-客户端和服务端是并联进行操作的)

工具-axios,对原生Ajax进行了封装,可简化书写。

使用:引入Axios的js文件  用Axios发送请求,并获取响应结果。axios({method-请求方式post/get url请求路径 data请求数据 params发送请求时携带的参数}).then(成功回调函数).catch(失败回调函数)

或者

axios.请求方式(url,)

同步化:async(用于声明异步方法)、await(等待异步任务执行)

vue声明周期:对象由创建到销毁的整个过程,每触发一个生命周期都会自动触发一个钩子方法。

beforeCreate创建前 created创建后 beforeMount 载入前 beforeupdate数据更新前  beforeUnmount组件销毁前

 

 

 

 

 

web后端

Maven:管理构建java项目的工具

依赖管理(在依赖中描述jar包即可)项目构建(提供了标准的项目构建流程) 统一项目结构

1.核心

基于项目对象模型-pom(在pom.xml中有定义),通过一小段描述信息来管理项目的构建。

pom.xml:pom dependency(来自仓库中,从本地到私服与中央仓库)

maven坐标:资源的唯一标识,可通过该坐标唯一定位资源位置,用于定义或引用项目中需要的依赖。(groupid-组织名 artifactid-项目名)

依赖配置:配置项目需要的jar包(在pom.xml中的dependency来引入)

生命周期:maven项目构建的过程

clean-清理工作(移除上次构建生成的文件) default-核心工作(compile,test,package,install) site-生成报告

同一套生命周期中,运行后面的阶段时,前面阶段也会运行。

单元测试:鉴定软件质量过程

阶段划分-单元测试(对软件基本组成单元测试),集成测试(检测单元之间协作),系统测试(验证软件系统),验收测试(验收标准)

白盒测试-清楚代码的逻辑结构(单元测试)

黑盒测试-验证软件的外在功能(系统与验收)

灰盒测试-逻辑代码与功能实现(集成)

1.入门:junit测试

在pom.xml引入junit依赖,创建测试类,编写测试方法,并声明@Test

2.断言:帮助确定测试方法是否按照预期效果工作,Assertions.assertEquals-两值不等时报错assertNull-不为null就报错,assertTrue-不为true报错(预期结果,实际结果,提示信息)

3.常见注解:

@Test单元测试  @ParameterizedTest参数化测试+@ValueSource参数化测试的参数来源 @DisplayName注解测试方法名字

修饰实例方法

@BeforeEach每一个测试方法前执行

@AfterEach每一个测试方法后执行

修饰静态方法

@BeforeAll所有测试方法前只测试一次

@AfterAll所有测试方法后只执行一次

测试方法的内容-测试所有可能的边界值级正确值

依赖范围:通过在pom.xml文件中<scope>标签来设置作用范围(主程序、测试程序、打包运行;compile默认均可 test-测试程序 provi)

jar包爆红-下载不完整,删除lastUpdated文件(del/s *.lastUpdated删除重启)

安装登录通义

 

 

web基础

BS架构:按照http协议来交互

浏览器与web服务器(静态资源-服务器上不会由用户请求而变化的数据html css js   动态资源-由用户请求与其他数据动态生成servlet jsp spring框架)

CS架构:客户端与服务器模式,需要单独开发维护客户端qq

1.springboot入门

spring全世界最流行的java框架 

项目:

springboot(简化配置) springframwork(是其他项目的基础) springdata(数据库操作) springcloud(开发微服务) springai(ai大模型)

基于springboot开发一个web应用:

创建springboot工程   定义定义类,添加方法和注解(标明当前方法的功能)

注解补充-@SpringBootApplication标记是启动类 @RestController标记是请求处理类 @RequestMapping标记方法的请求路径

连接不上:可重新设置server url地址为阿里云的地址

依赖-起步依赖springbootstarter-web包含web应用开发的依赖,test包含单元测试的依赖

2.http协议

超文本传输协议,规定浏览器和服务器数据传输的规则。

基于tcp协议,请求响应模型,没有记忆功能,多次请求间不能共享数据

请求协议:

请求数据格式-请求行(请求方式get/post、资源路径、协议http)  请求头(键值对形式host主机名 user-agent浏览器版本 accept接收资源类型 content-type请求主体数据类型 content-length请求主体大小) 空行 请求体(post请求!!!,存放请求参数)

请求数据获取-web服务器(tomcat)对http协议的请求数据进行了解析与封装(httserletrequest),通过调用controller方法自动传递.method获取请求方法 .getrequesturl.tostring获取请求路径(uri资源的访问路径) .getprotocol获取请求协议 .getparameter获取请求参数 .gethead获取请求头

响应协议:

响应数据格式-响应行(协议 状态码-1响应中,2请求响应成功,3重定向,4客户端错误-404请求资源不存在,5服务器端错误 描述) 响应头(键值对形式) 空行 响应体(存放响应数据)

响应数据-web服务器对http协议的响应数据进行了封装(httpservletresponse),调用controller方法时自动传递.setstatus设置响应状态码 .setheader设置响应头 .getwriter().write设置响应体

或者

使用spring中提供的responseEntity指明泛型,调用.status .header  .body方法

可通过注解来代替构造方法(@Data @NoArgsConstructor无参构造 @AllArgsConstructor全参构造)

3.分层解藕

三层架构:利用接口加实现类实现

浏览器

接收请求、响应数据(controller)-控制层,接收前端发送的请求,对请求进行处理,并响应数据

逻辑处理(Service)-业务逻辑层,处理业务逻辑。

数据访问(Dao)-负责数据访问操作,数据的增删改查

文件、数据库、网络(数据来源)

耦合-衡量模块间依赖关联程度

内聚-各功能模块内部的功能联系

高内聚低耦合

解藕:

概念

控制反转(IOC)将创建控制权由自身转移到外部容器

依赖注入(DI)容器为应用程序提供依赖资源

Bean对象-IOC容器中创建与管理的对象

过程(要在启动类下才可被扫描)

将Dao及Service层的实现类交给IOC容器管理(在实现类上添加@component注解来创建或者用衍生注解-@controller  @Service @Repository)

为controller及Service注入运行时所依赖的对象(在对象上添加@Autowired实现-对象上添加属性注入 构造函数上添加 set函数上添加  @Primary防止重复 @Qaulifier @Resource)

MySQL

数据库-DB存储和管理数据的仓库

数据库管理系统-DBMS管理数据库的软件(oracle MySQL SQL Server)

SQL结构化查询语言,定义了一套操作关系型数据库的统一标准

数据模型

关系型数据库-多张相互连接的二维表组成的数据库(数据库 表 记录)

种类

1.DDL数据定义语言,定义数据库对象

数据库-show database差所有  select database() use 数据库 切换 create database(if not exists) 数据库 drop database(if exists) 数据库

创建create table 表名(字段

字段类型(tinyint int bigint float double decimal   varchar-变长 char   date time datatime-now()) 约束(unsigned primary key not null unique default '' foreign key) auto_increment comment注释 字段类型(中文解释 )

查询show tables desc 表名 show create table 表名  

修改alter table 表名 rename to 新表名

删除drop table if exist 表名

添加字段:alter table 表名 add 字段名 类型 约束 

修改字段类型:alter table 表名 modify 字段名  新数据类型

修改字段类型和字段类型:alter table 表名 change 字段名  新字段名 字段类型

删除字段:alter table 表名 drop column 字段名

2.DML数据操作语言,对数据库表中的数据记录增删改操作

指定字段添加数据insert into 表名(字段名) values(值)

全部字段添加数据insert into 表名 values(值)

批量添加数据insert into 表名(字段名) values(值),(值)

批量全部字段添加数据insert into 表名 values(值),(值)

修改数据update 表名 set 字段名=值 where 条件

delete from 表名 where 条件

3.DQL数据查询语言,查询数据库表中的记录

select 字段列表 from 表名列表 where 条件 group by 分组的字段 having 分组后条件列表(分组查询,可以使用聚合函数) order by 排序字段 排序方式(排序查询) limit 分页参数,查询记录数(分页查询,索引由0开始)       排序方式-asc(升序),desc(降序)

查询多个字段select 字段 from 表名

查询所有字段select * from 表名

为查询字段设置别名select 字段 as 别名 from 表名

去除重复记录select distinct 字段列表 from 表名

条件查询select 字段列表 from 表名 where 条件列表(between..and.. in.. like-_单个字符,%任意个字符   is null   and or not)

分组查询-结合聚合函数(count max min avg sum)

 

4.DCL数据控制语言,创建数据库用户,控制访问权限。

MySQL客户端工具-SQLyog,Navicat,IntelliJ IFEA DataGrip

JDBC:java数据库连接,即操作所有关系型数据库的API,底层技术。常用的框架(MyBatis MyBatisPlus Hibernate SpringDataJPA)

底层原理

java程序通过JDBC接口与不同类型的数据库厂商提供的实现类(驱动)来实现对不同关系型数据库的操作。

实现步骤

创建maven项目,引入mysql依赖   编写JDBC程序(注册驱动 获取连接 获取sql语句执行对象 执行sql 释放资源)

查询数据-ResultSet结果集对象(.executeQuery得到,.next移动下一行 .getInt获取字段)

预编译SQL-可以防止SQL注入

preparedstatement()用问号占位符来占位 通过set来传递参数

修改数据-executeUpdate()返回int类型

MyBatis持久层(Dao层)框架,用于简化JDBC开发

使用步骤

创建SpringBoot,引入Mybatis依赖 准备数据库表及实体类 配置Mybatis(在application.properties中配置数据库连接信息) 编写MyBatis程序(编写持久层接口-@Mapper 定义SQL-注解来实现)

jdbc存在硬编码、繁琐、资源浪费问题

数据库连接池

是一个分配、管理数据库连接的容器。允许应用程序重复使用一个现有的数据库连接。

标准接口-DataSource常见连接池(DBCP Druid Hikari自带)

切换实现-引入数据库连接池依赖 配置数据库连接信息(DruidDataSource)

增删改

删除-@Delete("delete from user where id =#{id}来占位")  deleteById(Integer id来设置来源)  #{}占位符,会被替换为?用于参数传递  ${}拼接符,直接将参数拼接在SQL语句中,用于动态设置表名和字段名

插入-@Insert into 用户表(字段名) values(字段值-#{}来实现) insert(参数来源)

更新-@Update("update 表名 set 字段名=#{属性名}") update(参数来源)

查询-@select(select * from 表名 where 字段名=#{属性名}) 对象类型 方法名(对象参数来源-@param("参数名")用于传递多个参数是,实现为参数名起名字-官方骨架创建时可省略)

通过xml映射文件来配置SQL语句,与mapper包同名。可实现代替注解来配置。

在xml文件中用<mapper namespace=指名mapper接口位置><select id=方法名 resultType=接受结果类型>包含原始select语句即可,通过标签来声明

辅助配置-在application.properties下指定xml文件位置location=classpath:mapper/*.xml

减少代码冗余的配置文件

用yaml/yml文件来代替properties文件

格式-用缩进(空格)来表示层级关系 数值前必须有空格作为分隔符,#表示注释   0开头用单引号引起来(顶格全输换行即可)

对象:

 属性:空格 属性值

数组名:

 -空格 元素名

项目环境搭建

新建一个空项目   配置JDK(SDK)  配置maven路径 配置编码(file encodings-utf-8)

创建模块(module) 勾选依赖与驱动 删除多余文件(创建application.yml文件)

创建数据库表(创建数据库,建表)

配置数据库的连接(application.yml:项目名 数据库连接  mybatis)

创建基础包结构(控制层-mapper 业务层-service  数据层-mapper 实体类-pojo)

引入实体类到pojo下  在mapper下定义相应mapper接口  在service下分别定义一个接口及对应实现类,加上@service注解交给IOC容器管理   在controller下创建控制类,加上@restcontroller标识是spring中的请求处理类

接口开发

controller-@RequestMapping接收请求 @Autowired注入mapper,调用service层的方法 List集合响应结果

service-定义一个实现类的方法,@Autowired注入mapper,调用service层的方法

mapper-@select("SQL语句")

连接数据库:database---datasource---MySQL

debug运行 http://localhost:8080/controller层指定的mapping路径(在apifox里面操作)

数据封装:解决字段名与属性名不一致问题

1.手动结果映射-@Results及@Result进行手动结果映射(@Results(column=封装字段,property=封装属性))

2.起别名-在SQL语句中为列起别名,使之与实体类属性名相同(select 原名 别名)

3.驼峰命名-字段名和属性名符合驼峰命名规则,会自动映射(在yml文件中开启camel-true即可)

nginx是前端与后端之间的一个代理服务器(反向代理proxy),可增加后端数据的安全性

删除部门

controller层-@RequestParam注解,将请求参数绑定给方法形参 控制前端传递参数名与服务端方法形参名一致来实现

新增部门

controller接收json格式的请求参数-@RequestBody 接收对象来实现

查询回显

controller接收请求路径-@GetMapping(用大括号来表示路径) @PathVariable(路径)来获取

减少

controller层的代码冗余-@RequestMapping(冗余内容)

 

日志技术-记录应用程序运行中的信息。

log4j logback-升级的日志框架 slf4j-提供日志标准接口与抽象类。

使用步骤

引入logback依赖 定义日志记录对象logger(通过@Slf4j来简化代替) 记录日志(log.debug(日志内容).info(内容))

配置文件logback.xml控制输出格式与位置(console控制台)

多表关系的实现

一对多,在多的一方表中添加少的一方的主键。为了实现数据同步,我们要为字段添加外键约束(添加-alter table 表名 add constraint 外键名 foreign key(关联的属性名))

 

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词