我的JAVA-Web基础(1)
1.HTML



2.css
CSS(层叠样式表)提供了多种选择器来定位HTML文档中的元素,以便可以应用样式。以下是三种常用的选择器简述:
-
ID 选择器:
- ID选择器使用HTML元素的
id属性来定位单个元素。每个页面中id应该是唯一的,因此一个ID选择器只会匹配一个元素。 - 语法:在CSS中,ID选择器以
#符号开头,后跟ID名称,不包含任何空格。 - 示例:如果有一个
<div>元素的id="header",那么对应的CSS规则将写作#header { /* 样式规则 */ }。
- ID选择器使用HTML元素的
-
类选择器:
- 类选择器用于选择所有具有特定
class属性值的元素。与ID不同,类可以在同一个页面中多次使用,并且一个元素也可以拥有多个类。 - 语法:类选择器以
.符号开头,后跟类名,同样不包含空格。 - 示例:如果有一些元素的
class="highlight",则可以通过.highlight { /* 样式规则 */ }来为它们应用样式。
- 类选择器用于选择所有具有特定
-
标签选择器(也称为类型选择器):
- 标签选择器是基于HTML标签名称来选择元素的。它会匹配文档中所有的该类型的元素。
- 语法:直接使用HTML标签名称作为选择器,不需要前缀符号。
- 示例:要为所有的
<p>段落元素定义样式,可以直接写p { /* 样式规则 */ }。



3.Javascript
JavaScript 是一种广泛使用的编程语言,尤其在网页和网络应用程序中。以下是关于 JavaScript 的基本语法的简述,包括变量定义、数据类型和流程控制。
变量定义
JavaScript 支持三种声明变量的方式:
-
var:这是最早的声明变量的方式,在 ES6 之前是唯一的声明方式。var声明的变量具有函数作用域或全局作用域,并且存在变量提升(hoisting)现象。var x = 10; -
let:引入于 ES6,let声明的变量具有块级作用域(即在{}内),并且不会被提升到其所在的代码块顶部。let y = 20; -
const:同样引入于 ES6,用于声明常量,即一旦赋值后不能更改绑定的值。const也具有块级作用域。需要注意的是,如果const绑定的是一个对象或数组,那么虽然不能改变该引用,但可以修改对象内部的属性或数组中的元素。const z = 30;
数据类型
JavaScript 是一种动态类型语言,支持多种数据类型:
-
原始类型(Primitive Types):
Number:表示整数和浮点数,例如42或3.14。String:表示文本,用单引号或双引号括起来,例如'Hello'或"World"。Boolean:表示逻辑值,只有两个值true和false。Null:表示空值或不存在的对象,只有一个值null。Undefined:表示未定义的值,当变量被声明但未赋值时,它的默认值是undefined。Symbol(ES6 引入):表示独一无二的标识符。BigInt(ES2020 引入):表示任意精度的整数。
-
复合类型(Complex Types):
Object:用于存储键值对的数据集合,可以是普通的对象、数组、日期等。Array:特殊的对象,用于存储有序的数据列表。Function:也是对象,表示一段可执行的代码。
流程控制
JavaScript 提供了多种流程控制结构来控制程序的执行顺序:
-
条件语句:
if...else:根据条件的真假执行不同的代码块。if (condition) {// 当 condition 为 true 时执行的代码 } else {// 当 condition 为 false 时执行的代码 }
-
循环语句:
for:基于初始值、条件和增量/减量重复执行代码块。for (let i = 0; i < 5; i++) {// 执行的代码 }while:当指定条件为真时,重复执行代码块。while (condition) {// 执行的代码 }
-
跳转语句:
break:立即退出最内层的循环或switch语句。continue:跳过当前循环的剩余部分,并开始下一次循环迭代。return:从函数中返回一个值,并结束函数的执行。
JavaScript 中的 Array(数组)
定义和创建数组:
-
直接量语法:使用方括号
[]来定义一个数组,元素之间用逗号分隔。let fruits = ['apple', 'banana', 'cherry']; -
构造函数:使用
Array构造函数来创建一个新的数组。可以传入一个参数作为数组的长度,或者传入多个参数作为数组的元素。// 创建一个空数组 let emptyArray = new Array();// 创建一个包含3个元素的数组 let numbers = new Array(1, 2, 3);// 创建一个长度为5的空数组 let lengthArray = new Array(5);
数组的方法和属性:
-
访问元素:通过索引访问数组中的元素,索引从0开始。
console.log(fruits[0]); // 输出: "apple" -
修改元素:同样使用索引来修改数组中的元素。
fruits[1] = 'blueberry'; -
添加/移除元素:
push():在数组末尾添加一个或多个元素,并返回新的长度。pop():移除数组最后一个元素,并返回该元素。shift():移除数组第一个元素,并返回该元素。unshift():在数组开头添加一个或多个元素,并返回新的长度。splice():可以用来添加或移除元素,非常灵活。
-
遍历数组:
forEach():对数组的每个元素执行一次提供的函数。for...of:遍历数组的值。map():创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后的返回值。filter():创建一个新数组,其中包含所有通过测试的元素。reduce():对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。
-
查找元素:
indexOf():返回给定元素在数组中第一次出现的位置,如果不存在则返回-1。find():返回数组中满足提供的测试函数的第一个元素的值。findIndex():返回数组中满足提供的测试函数的第一个元素的索引。
-
其他方法:
slice():返回一个浅拷贝的新数组对象,这个数组是从开始到结束(不包括结束)选择的原数组的一个部分。concat():用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。join():将数组的所有元素连接成一个字符串并返回。
JavaScript 中的 String(字符串)
定义和创建字符串:
-
直接量语法:使用单引号
'、双引号"或反引号(模板字符串)`来定义字符串。let greeting = 'Hello, world!'; let message = "Welcome to JavaScript."; let multiline = `This is a string that spans multiple lines.`; -
构造函数:使用
String构造函数来创建一个新的字符串对象。let stringObject = new String('Another string');
字符串的方法和属性:
-
访问字符:可以通过索引访问字符串中的字符,或者使用
charAt()方法。console.log(greeting[0]); // 输出: "H" console.log(greeting.charAt(0)); // 输出: "H" -
获取长度:使用
length属性来获取字符串的长度。console.log(greeting.length); // 输出: 13 -
查找子串:
indexOf()和lastIndexOf():分别返回指定值首次和最后一次出现的索引,如果找不到则返回 -1。includes():检查字符串是否包含指定的子字符串,返回布尔值。startsWith()和endsWith():分别检查字符串是否以指定的子字符串开头或结尾,返回布尔值。
-
提取子串:
slice():提取字符串的一部分,并返回新的字符串。substring()和substr():也用于提取字符串,但substring()使用起始和结束索引,而substr()使用起始索引和要提取的字符数。
-
替换内容:
replace():用一些文本替换与指定的正则表达式匹配的子串。
-
转换大小写:
toLowerCase():将整个字符串转换为小写。toUpperCase():将整个字符串转换为大写。
-
修剪空白:
trim():去除字符串两端的空白字符。
-
拼接字符串:
concat():用于连接两个或更多的字符串,并返回结果字符串。
-
分割字符串:
split():根据指定的分隔符将字符串分割成数组。
-
模板字符串:允许嵌入表达式,使用
${expression}语法。let name = 'Alice'; let age = 30; let info = `My name is ${name} and I am ${age} years old.`;
这些是 JavaScript 中处理数组和字符串的一些基本方式。随着 ES6+ 的引入,JavaScript 的字符串和数组功能变得更加丰富和强大。
4.JQuery
jQuery 是一个快速、小巧且功能丰富的库,它简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互等操作。以下是 jQuery 的简单使用指南,包括 DOM 对象的选取和事件的回调。
引入 jQuery
在使用 jQuery 之前,你需要确保已经在网页中引入了 jQuery 库。可以通过下载 jQuery 文件并本地引用,或者通过 CDN 引用:
<!-- 使用CDN引入 -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
DOM 对象的选取
jQuery 提供了一种类似 CSS 选择器的方式来选取 DOM 元素。以下是一些常见的选择器示例:
-
按 ID 选择元素:
$('#myElement') // 选取 id 为 "myElement" 的元素 -
按类选择元素:
$('.myClass') // 选取所有 class 为 "myClass" 的元素 -
按标签选择元素:
$('p') // 选取所有的 <p> 段落元素 -
组合选择器:
$('#container .item') // 选取 id 为 "container" 下所有 class 为 "item" 的元素 -
层级选择器:
- 子元素选择器:
$('ul > li')选取<ul>直接子元素中的所有<li>。 - 后代选择器:
$('ul li')选取<ul>内部的所有<li>,不论层次关系。 - 相邻兄弟选择器:
$('.class + p')选取紧跟在.class元素之后的第一个<p>元素。 - 通用兄弟选择器:
$('.class ~ p')选取.class元素之后的所有<p>元素。
- 子元素选择器:
-
属性选择器:
$('input[name="username"]')选取所有name属性等于"username"的<input>元素。
-
伪类选择器:
$('a:first')选取第一个<a>链接。$('li:odd')选取索引为奇数的<li>元素(从0开始计数)。
事件的回调
jQuery 简化了事件处理,提供了多种方法来绑定事件监听器到 DOM 元素上。下面是一些常用的事件处理方法:
-
click():为指定的元素绑定点击事件。$('#myButton').click(function() {alert('Button was clicked!'); }); -
on():用于绑定多个事件类型,或者为动态添加的元素绑定事件。// 绑定 click 事件 $('#myButton').on('click', function() {alert('Button was clicked!'); });// 绑定多个事件 $('#myElement').on({mouseenter: function() {$(this).css('background-color', 'yellow');},mouseleave: function() {$(this).css('background-color', '');} });// 为将来添加的元素绑定事件(委托事件) $(document).on('click', '.dynamicElement', function() {alert('Dynamic element was clicked!'); }); -
hover():为指定的元素绑定鼠标进入和离开事件。$('#myElement').hover(function() {$(this).css('background-color', 'yellow'); // 鼠标进入时},function() {$(this).css('background-color', ''); // 鼠标离开时} ); -
submit():为表单元素绑定提交事件。$('form').submit(function(event) {event.preventDefault(); // 阻止表单默认提交行为alert('Form submitted!'); }); -
ready():确保代码在 DOM 完全加载后执行。$(document).ready(function() {// 这里的代码会在DOM完全加载后执行console.log('DOM is ready'); });// 或者更简洁的方式 $(function() {console.log('DOM is ready'); });
问题一:DOM原生对象与jQuery对象如何相互转换?
-
从 DOM 原生对象到 jQuery 对象:
- 使用
$(element),其中element是一个 DOM 元素。
var domElement = document.getElementById('myElement'); var $jqElement = $(domElement); - 使用
-
从 jQuery 对象到 DOM 原生对象:
- 使用
.get()方法或直接使用[index]访问。
var $jqElement = $('#myElement'); var domElement = $jqElement.get(0); // 或者 $jqElement[0] - 使用
问题二:jQuery如何获取页面中id为myDiv的div元素的最近一个兄弟元素?
- 使用
.next()方法来获取紧邻的下一个兄弟元素。
var nextSibling = $('#myDiv').next();
问题三:jQuery中设置DOM节点属性的方法有哪些?
-
.data():用于存储和检索自定义数据。$('#myElement').data('user-id', 123); // 存储数据 var userId = $('#myElement').data('user-id'); // 获取数据
问题四:jQuery遍历元素的方式有哪些?
-
.each():遍历每个匹配的元素,并执行一个函数。$('li').each(function(index, element) {console.log(index, element); });
5.HTTP

6.Servlet
Servlet的基本介绍




Servlet的创建

Servlet的路径配置


注解
通过配置注解为相应的java类设置不同的形态



Servlet的生命周期






多线程单实例



HttpServletRequest,HttpServletResponse


获取请求参数
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/example")
public class ExampleServlet extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 设置响应内容类型response.setContentType("text/plain");response.setCharacterEncoding("UTF-8");// 获取参数String username = request.getParameter("username");String password = request.getParameter("password");// 写入响应内容response.getWriter().println("GET Request - Username: " + (username != null ? username : "Not provided"));response.getWriter().println("GET Request - Password: " + (password != null ? "Provided" : "Not provided"));}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 设置响应内容类型response.setContentType("text/plain");response.setCharacterEncoding("UTF-8");// 获取参数String username = request.getParameter("username");String password = request.getParameter("password");// 写入响应内容response.getWriter().println("POST Request - Username: " + (username != null ? username : "Not provided"));response.getWriter().println("POST Request - Password: " + (password != null ? "Provided" : "Not provided"));// 简单的登录验证if ("admin".equals(username) && "password".equals(password)) {response.getWriter().println("Login successful!");} else {response.getWriter().println("Invalid username or password.");}}
}

转发与重定向


ServletConfig,ServletContent
ServletConfig
在init()的时候传给Servlet,该Servlet在之后可以通过ServletConfig对象获取对应的Config



ServletContext


JDBC


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;public class SimpleJDBCExample {public static void main(String[] args) {// 加载驱动程序(对于现代JDBC驱动通常不需要显式加载)Class.forName("com.mysql.cj.jdbc.Driver");// 连接数据库Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password");// 创建Statement对象Statement statement = connection.createStatement();// 执行查询ResultSet resultSet = statement.executeQuery("SELECT * FROM mytable");// 处理结果集while (resultSet.next()) {int id = resultSet.getInt("id");String name = resultSet.getString("name");System.out.println("ID: " + id + ", Name: " + name);}// 关闭资源resultSet.close();statement.close();connection.close();}
}
相关文章:
我的JAVA-Web基础(1)
1.HTML 2.css CSS(层叠样式表)提供了多种选择器来定位HTML文档中的元素,以便可以应用样式。以下是三种常用的选择器简述: ID 选择器: ID选择器使用HTML元素的id属性来定位单个元素。每个页面中id应该是唯一的…...
【Leetcode 热题 100】207. 课程表
问题背景 你这个学期必须选修 n u m C o u r s e s numCourses numCourses 门课程,记为 0 0 0 到 n u m C o u r s e s − 1 numCourses - 1 numCourses−1。 在选修某些课程之前需要一些先修课程。 先修课程按数组 p r e r e q u i s i t e s prerequisites p…...
从CreateDialogIndirectParam起---我与大模型对话
前言: 对当前的大模型来说,一切皆程序,皆标准。只能按照推定的线路行走,就像机器人走进死胡同,不停的踏步也不回头。除非人为去干预它。其实我提出的这个问题前是因为我不清楚了解一部分WinAPI有着严格的检查机制和自毁…...
重温设计模式--建造者模式
文章目录 建造者模式(Builder Pattern)概述建造者模式UML图作用:建造者模式的结构产品(Product):抽象建造者(Builder):具体建造者(Concrete Builderÿ…...
CSS(五):定位
目录 相对定位 绝对定位 固定定位 在 CSS 中,position 属性用于控制元素的定位方式,使我们可以精确地控制元素在页面上的位置。定位分为相对定位、绝对定位、和固定定位 相对定位 相对定位:position: relative; 相对定位意味着元素的位置…...
JSON 系列之2:JSON简单查询
本文为Oracle数据库JSON学习系列的第2篇,讲述如何对存储在数据库中的JSON文档进行简单的查询。 创建测试表,插入2条数据: DROP TABLE colortab PURGE;CREATE TABLE colortab (id NUMBER,color VARCHAR2(4000),CONSTRAINT ensure_json CH…...
SQL 简单查询
目录 一、投影查询 1、指定特定列查询 2、修改返回列名查询 3、计算值查询 二、选择查询 1、使用关系表达式 2、使用逻辑表达式 3、使用 BETWEEN关键字 4、使用 IN关键字 5、使用 LIKE关键字 6、使用 IS NULL/ NOT NULL关键字 7、符合条件查询 三、聚合函数查询 一…...
YOLOv9-0.1部分代码阅读笔记-metrics.py
metrics.py utils\metrics.py 目录 metrics.py 1.所需的库和模块 2.def fitness(x): 3.def smooth(y, f0.05): 4.def ap_per_class(tp, conf, pred_cls, target_cls, plotFalse, save_dir., names(), eps1e-16, prefix""): 5.def compute_ap(recall, prec…...
KaiOS 4.0 | DataCall and setupData implemention
相关文档 1、KaiOS 3.1 系统介绍 KaiOS 系统框架和应用结构(APP界面逻辑)文章浏览阅读842次,点赞17次,收藏5次。对于Java开发者而言,理解JS的逻辑调用是有点困难的。而KaiOS webapp开发又不同于现代的web开发,更像chrome浏览器内嵌模式。在这里梳理一下kaios平台web应用…...
nginx-rtmp服务器搭建
音视频服务器搭建 本文采用 nginx/1.18.0和nginx-rtmp-module模块源代码搭建RTMP流媒体服务器 流程 查看当前服务器的nginx版本下载nginx和nginx-rtmp-module源代码重新编译nginx,并进行相关配置(nginx.conf、防火墙等)客户端测试连接测试搭…...
[c++进阶(三)]单例模式及特殊类的设计
1.前言 在实际场景中,总会遇见一些特殊情况,比如设计一个类,只能在堆上开辟空间, 或者是设计一个类只能实例化一个对象。那么我们应该如何编写代码呢?本篇将会详细的介绍 本章重点: 本篇文章着重讲解如何设计一些特殊 的类,包括不能被拷贝,只能在栈/堆上…...
企业内训|高智能数据构建和多模态数据处理、Agent研发及AI测评技术内训-吉林省某汽车厂商
吉林省某汽车厂商为提升员工在AI大模型技术方面的知识和实践能力,举办本次为期8天的综合培训课程。本课程涵盖“高智能数据构建与智驾云多模态数据处理”、“AI Agent的研发”和“大模型测评”三大模块。通过系统梳理从非结构化数据的高效标注与融合,到L…...
009 Qt_显示类控件_QLCDNumber、ProgressBar、Calendar
文章目录 前言LCD NumberProgressBarCalendar Widget 小结 前言 本文将会向你介绍显示类控件中QLCDNumber显示数字、ProgressBar进度条、Calendar日历 LCD Number QLCDNumer 是⼀个专门用来显示数字的控件. 类似于 “老式计算器” 的效果. 属性说明intValueQLCDNumber 显示…...
--spring.profiles.active=prod
rootproduct-qualification:~# ps -ef | grep java root 5110 1 3 16:57 ? 00:00:54 java -jar productQualification.jar --spring.profiles.activeprod root 6476 5797 0 17:26 pts/0 00:00:00 grep --colorauto java好的,你使用 ps …...
深入解析JVM中对象的创建过程
1. 引言 对象是面向对象编程的核心概念之一,它们封装了数据和行为,构成了应用程序的基本构建块。然而,在Java语言中,每当使用new关键字或其他方式创建一个新对象时,背后发生了什么?这个问题的答案隐藏在JV…...
使用开源在线聊天工具Fiora轻松搭建个性化聊天平台在线交流
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家:人工智能教程 文章目录 前言1.关于Fiora2.安装Docker3.本地部署Fiora4.使用Fiora5.cpolar内网穿透工具安装6.创建远程连接公网地址7.固定Uptime …...
ffmpeg之显示一个yuv照片
显示YUV图片的步骤 1.初始化SDL库 目的:确保SDL库正确初始化,以便可以使用其窗口、渲染和事件处理功能。操作:调用 SDL_Init(SDL_INIT_VIDEO) 来初始化SDL的视频子系统。 2.创建窗口用于显示YUV图像: 目的:创建一个…...
MySQL中Performance Schema库的详解(下)
昨天说了关于SQL语句相关的,今天来说说性能相关的,如果没有看过上篇请点传送门https://blog.csdn.net/2301_80479959/article/details/144693574?fromshareblogdetail&sharetypeblogdetail&sharerId144693574&sharereferPC&sharesource…...
【Rust自学】7.1. Package、Crate和定义Module
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 7.1.1. Rust的代码组织 代码组织主要包括: 那些细节可以对外暴露,而哪些细节是私有的在作用域内哪些名称有效… …...
【Git】-- 版本说明
Alpha:是内部测试版,一般不向外部发布,会有很多 Bug .一般只有测试人员使用。Beta:也是测试版,这个阶段的版本会一直加入新的功能。在 Alpha 版之后推出。RC:(Release Candidate) 顾名思义么 ! 用在软件上就是候选版本。系统平台…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...
嵌入式面试常问问题
以下内容面向嵌入式/系统方向的初学者与面试备考者,全面梳理了以下几大板块,并在每个板块末尾列出常见的面试问答思路,帮助你既能夯实基础,又能应对面试挑战。 一、TCP/IP 协议 1.1 TCP/IP 五层模型概述 链路层(Link Layer) 包括网卡驱动、以太网、Wi‑Fi、PPP 等。负责…...
