@HTML学习
@CSS学习
@JAVASCRIPT
HTML
1.概念:是最基础的网页开发语言
- Hyper Text Markup Language 超文本标记语言
- 超文本:
- 超文本是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本。
- 标记语言:
- 由标签构成的语言。<标签名称> 如 html,xml
- 标记语言不是编程语言
- 超文本:
2.快速入门:
- 语法:
- html文档后缀名 .html 或者 .htm
- 标签分为
- 围堵标签:有开始标签和结束标签。如
- 自闭标签:开始标签和结束标签在一起。如
- 标签可以嵌套:
需要正确嵌套,不能你中有我,我中有你
错误:
正确: - 在开始标签中可以定义属性。属性是由键值对构成,值需要用引号(单双都可)引起来
- html的标签不区分大小写,但是建议使用小写。
3.标签学习:
- 文件标签:构成html最基本的标签
- html:html文档的根标签
- head:头标签。用于指定html文档的一些属性。引入外部的资源
- title:标题标签
- body:体标签
- :html5中定义该文档是html文档
- 文本标签:和文本有关的标签
- 注释:<! --注释内容 -->
- < h1 > to < h6 > :标题标签
- h1~h6:字体大小逐渐递减
- < p >:段落标签
- < br >:换行标签
- < hr >:展示一条水平线
- 属性:
- color:颜色
- width:宽度
- size:高度
- align:对其方式
- center:居中
- left:左对齐
- right:右对齐
- < b >:字体加粗
- < i >:字体斜体
- < font >:字体标签
- < center >:文本居中
- 属性:
- color:颜色
- size:大小
- face:字体
- 属性:
- 属性定义:
- color:
- 英文单词:red,green,blue
- rgb(值1,值2,值3):值的范围:0~255 如 rgb(0,0,255)
- #值1值2值3:值的范围:00~FF之间。如:#FF00FF
- width:
- 数值:width=‘20’,数值的单位,默认是px(像素)
- 数值%:占比相对于父元素的比例
- color:
- 属性:
- 图片标签:
- img:展示图片
- 属性:
- src:指定图片的位置
- 属性:
- img:展示图片
- 列表标签:
- 有序列表:
- ol:
- li:
- 无序列表:
- ul:
- li:
- 有序列表:
- 链接标签:
- a:定义一个超链接
- href:指定访问资源的URL(统一资源定位符)
- target:指定打开资源的方式
- _self:默认值,在当前页面打开
- _blank:在空白页面打开
- a:定义一个超链接
- div和span:
- div:每一个div占满一整行。块级标签
- span:文本信息在一行展示,行内标签 内联标签
- 语义化标签:html5中为了提高程序的可读性,提供了一些标签。
- < header >:页眉
- < footer >:页脚
- 表格标签:
- table:定义表格
- width:宽度
- border:边框
- cellpadding:定义内容和单元格的距离
- cellspacing:定义单元格之间的距离。如果指定为0,则单元格的线会合为一条
- bgcolor:背景色
- align:对齐方式
- tr:定义行
- bgcolor:背景色
- align:对齐方式
- td:定义单元格
- colspan:合并列
- rowspan:合并行
- th:定义表头单元格
- < caption >:表格标题
- < thead >:表示表格的头部分
- < tbody >:表示表格的体部分
- < tfoot >:表示表格的脚部分
- table:定义表格
- 表单标签:
- 概念: 用于采集用户输入的数据的。用于和服务器进行交互。
- form:用于定义表单的。可以定义一个范围,范围代表采集用户数据的范围
- 属性:
- action:指定提交数据的URL
- method:指定提交方式
- 分类:一共7种,2种比较常用
- get:
- 请求参数会在地址栏中显示。会封装到请求行中(HTTP协议后讲解)。
- 请求参数大小是有限制的。
- 不太安全
- post:
- 请求参数不会在地址栏中显示。会封装在请求体中(HTTP协议后讲解)
- 请求参数的大小没有限制。
- 较为安全。
- get:
- 分类:一共7种,2种比较常用
- 表单项中的数据要想被提交:必须指定其name属性
- 表单项标签:
- input:可以通过type属性值,改变元素展示的样式
- type属性:
- text:文本输入框,默认值
- placeholder:指定输入框的提示信息,当输入框的内容发生变化,会自动清空提示信息
- password:密码输入框
- radio:单选框
- 注意:
- 要想让多个单选框实现单选的效果,则多个单选框的name属性值必须一样。
- 一般会给每一个单选框提供value属性,指定其被选中后提交的值
- checked属性,可以指定默认值
- 注意:
- checkbox:复选框
- 注意:
- 一般会给每一个单选框提供value属性,指定其被选中后提交的值
- checked属性,可以指定默认值
- 注意:
- file:文件选择框
- hidden:隐藏域,用于提交一些信息。
- 按钮:
- submit:提交按钮。可以提交表单
- button:普通按钮
- image:图片提交按钮
- src属性指定图片的路径
- text:文本输入框,默认值
- label:指定输入项的文字描述信息
- 注意:
- label的for属性一般会和input的id属性值对应。如果对应了,则点击label区域,会让input输入框获取焦点。
- label的for属性一般会和input的id属性值对应。如果对应了,则点击label区域,会让input输入框获取焦点。
- 注意:
- type属性:
- select:下拉列表
- 子元素:option,指定列表项
- textarea:文本域
- cols:指定列数,每一行有多少个字符
- rows:默认多少行。
- input:可以通过type属性值,改变元素展示的样式
- 属性:
CSS:页面美化和布局控制
1.概念:Cascading Style Sheets 层叠样式表
- 层叠:多个样式可以作用在同一个html的元素上,同时生效
2.好处:
- 功能强大
- 将内容展示和样式控制分离
- 降低耦合度。解耦
- 让分工协作更容易
- 提高开发效率
3.CSS的使用:CSS和html结合方式
- 内联样式
- 在标签内使用style属性指定css代码
- 如:< div style=“color:red;”>hello css< /div>
- 内部样式
- 在head标签内,定义style标签,style标签的标签体内容就是css代码
- 如:
< style>
div{
color:blue;
}
< /style>
< div>hello css< /div>
- 外部样式
- 定义css资源文件。
- 在head标签内,定义link标签,引入外部的资源文件
- 如:
- a.css文件:
div{
color:green;
}
< link rel=“stylesheet” href=“css/a.css”>
< div>hello css< div>
< div>hello css< div>
- a.css文件:
- 注意:
- 1,2,3种方式 css作用范围越来越大
- 1方式不常用,后期常用2,3
- 3种格式可以写为:
< style>
@import “css/a.css”;
< /style>
- 如:
- css语法:
- 格式:
选择器{
属性名1:属性值1;
属性名2:属性值2;
…
} - 选择器:筛选具有相似特征的元素
- 注意:
- 每一对属性需要使用:隔开,最后一对属性可以不加;
- 格式:
- 选择器:筛选具有相似特征的元素
- 分类:
- 基础选择器
- id选择器:选择具体的id属性值的元素,建议在一个html页面中id值唯一
- 语法:#id属性值{}
- 元素选择器:选择具有相同标签名称的元素
- 语法:标签名称{}
- 注意:id选择器优先级高于元素选择器
- 类选择器:选择具有相同的class属性值的元素。
- 语法:.class属性值{}
- 注意:类选择器优先级高于元素选择器,低于id选择器
- id选择器:选择具体的id属性值的元素,建议在一个html页面中id值唯一
- 扩展选择器:
- 选择所有元素:
- 语法:*{}
- 并选择器:
- 选择器1,选择器2{}
- 子选择器:筛选选择器1元素下的选择器2元素
- 语法:选择器1 选择器2{}
- 父选择器:筛选选择器2的父元素选择器1
- 语法:选择器1>选择器2{}
- 属性选择器:选择元素名称,属性名=属性值的元素
- 语法:元素名称[属性名=“属性值”]{}
- 伪类选择器:选择一些元素具有的状态
- 语法:元素:状态{}
- 如:< a>
- 状态:
- link:初始化的状态
- visited:被访问过的状态
- active:正在访问的状态
- hover:鼠标悬浮状态
- 状态:
- 选择所有元素:
- 基础选择器
- 分类:
- 属性
- 字体、文本
- font-size:字体大小
- color:文本颜色
- text-align:对其方式
- line-height:行高
- 背景
- background
- 边框:
- border:设置边框,符合属性
- 尺寸
- width:宽度
- height:高度
- 盒子模型:控制布局
- margin:外边距
- padding:内边距
- 默认情况下内边距会影响整个盒子的大小
- box-sizing:border-box;设置盒子的属性,让width和height就是最终盒子的大小
- float:浮动
- left
- right
- 字体、文本
JavaScript
- 概念:一门客户端脚本语言
- 运行在客户端浏览器中的。每一个浏览器都有JavaScript的解析引擎
- 脚本语言:不需要编译,直接就可以被浏览器解析执行了
- 功能:
- 可以来增强用户和html页面的交互过程,可以来控制html元素,让页面有一些动态的效果,增强用户的体验。
- JavaScript发展史:
- 1992年,Nombase公司,开发出第一门客户端脚本语言,专门用于表单的校验。命名为:C- -,后来更名为ScriptEase
- 1995年,Netscape(网景)公司,开发了一门客户端脚本语言:LiveScript。后来,请来SUN公司的专家,修改LiveScript,命名为JavaScript
- 1997年,ECMA(欧洲计算机制造商协会),ECMAScript,就是所有客户端脚本语言的标准。
- JavaScript = ECMAScript + JavaScript自己特有的东西(BOM+DOM)
ECMAScript:客户端脚本语言的标准
- 基本语法:
- 与html结合方式
- 内部JS:
- 定义< script>,标签体内容就是js代码
- 外部JS:
- 定义< script>,通过src属性引入外部的js文件
- 注意:
- < script>可以定义在html页面的任何地方。但是定义的位置会影响执行顺序。
- < script>可以定义多个。
- 内部JS:
- 注释
- 单行注释://注释内容
- 多行注释:/* 注释内容*/
- 数据类型
- 原始数据类型(基本数据类型):
- number:数字。 整数/小数/NaN(not a number 一个不是数字的数字类型)
- string:字符串。
- boolean:true和false
- null:一个对象为空的占位符
- undefined:未定义。如果一个变量没有给初始化值,则会默认赋值为undefined
- 引用数据类型:对象
- 原始数据类型(基本数据类型):
- 变量
- 变量:一小块储存数据的内存空间
- Java语言是强类型语言,而JavaScript是弱类型语言。
- 强类型:在开辟变量储存空间时,定义了空间将来储存的数据的数据类型,只能储存固定类型的数据
- 弱类型:在开辟变量储存空间时,不定义空间将来储存的数据类型,可以存放任意类型的数据。
- 语法:
- var 变量名 = 初始化值;
- typeof运算符:获取变量的类型。
- 注:null运算后得到的是object
- 运算符
-
一元运算符:只有一个运算数的运算符
++,- -,+(正号)- ++ - -:自增(自减)
- ++(- -)在前,先自增(自减),再运算
- ++(- -)在后,先运算,再自增(自减)
- ++ - -:自增(自减)
-
算术运算符
-
赋值运算符
-
比较运算符:
- 比较方式
- 类型相同:直接比较
- 字符串:按照字典顺序比较。按位逐一比较,直到得出大小为止。
- 类型不同:先进行类型转换,再比较
- ===:全等于。在比较之前,先判断类型,如果类型不一样,则直接返回false
- 类型相同:直接比较
- 比较方式
-
逻辑运算符
&& || !- 其他类型转Boolean:
- number:0或NaN为假,其他为真
- string:除了空字符串(" "),其他都是true
- null&undefined:都是false
- 对象:所有对象都为true
- 其他类型转Boolean:
-
三元运算符
?:表达式
var a = 3;
var b = 4;
var c = a > b ? 1:0;- 语法:
- 表达式?值1:值2;
- 判断表达式的值,如果是true则取值1,如果是false则取值2;
- 语法:
-
- 流程控制语句
- if…else…
- switch:
- 在Java中,switch语句可以接受的数据类型:byte int shot char ,枚举(1.5),String(1.7)
- switch(变量):
case 值: - 在JS中,switch语句可以接受任意的原始数据类型
- switch(变量):
- 在Java中,switch语句可以接受的数据类型:byte int shot char ,枚举(1.5),String(1.7)
- while
- do…while
- for
- JS特殊语法:
- 语句以;结尾,如果一行只有一条语句则;可以省略(不建议)
- 变量的定义使用var关键字,也可以不使用
- 用:定义的变量是局部变量
- 不用:定义的变量是全局变量(不建议)
- 与html结合方式
- 基本对象:
-
Function:函数(方法)对象
- 创建:
- var fun = new Function(形式参数列表,方法体);//忘掉吧
- function 方法名称(形式参数列表){
方法体
} - var 方法名 = function(形式参数列表){
方法体
}
- 方法:
- 属性:
length:代表形参的个数 - 特点:
- 方法定义是,形参的类型不用写,返回值类型也不写。
- 方法是一个对象,如果定义名称相同的方法,会覆盖
- 在JS中,方法的调用只与方法的名称有关,和参数列表无关
- 在方法声明中有一个隐藏的内置对象(数组),arguments,封装所有的实际参数
- 调用:
方法名称(实际参数列表);
- 创建:
-
Array:数组对象
- 创建:
- var arr = new Array(元素列表);
- var arr = new Array(默认长度);
- var arr = [元素列表];
- 方法
join(参数):将数组中的元素按照指定的分隔符拼接为字符串
push() 向数组的末尾添加一个或更多元素,并返回新的长度。 - 属性
length:数组的长度 - 特点:
- JS中,数组元素的类型可变的。
- JS中,数组长度可变的。
- 创建:
-
Boolean
-
Date:日期对象
- 创建:
var date = new Date(); - 方法:
toLocaleString():返回当前date对象对应的时间本地字符串格式
getTime():获取毫秒值。返回当前日期对象描述的时间到1970年1月1日零点的毫秒值差
- 创建:
-
Math:数学对象
- 创建:
- 特点:Math对象不用创建,直接使用。 Math.方法名();
- 方法:
random():返回0~1之间的随机数。含0不含1
ceil(x):对数进行上舍入。
floor(x):对数进行下舍入。
round(x):把数四舍五入为最接近的整数。
3.属性:
PI
- 创建:
-
Number
-
String
-
RegExp:正则表达式对象
- 正则表达式:定义字符串的组成规则。
- 单个字符:[]
如:[a] [ab] [a-zA-Z0-9_]- 特殊符号代表特殊含义的单个字符:
\d:单个数字字符[0-9]
\w:单个单词字符[a-zA-Z0-9_]
- 特殊符号代表特殊含义的单个字符:
- 量词符号:
?:表示出现0次或1次
*:表示出现0次或多次
+:表示出现1次或多次
{m,n}:表示m<= 数量 <=n
* m如果缺省:{,n}:最多n次
* n如果缺省:{m,}:最少m次
- 单个字符:[]
- 正则对象:
- 创建
- var reg = new RegExp(“正则表达式”);
- var reg = /正则表达式/;
- 方法
- test(参数):验证指定的字符串是否符合正则定义的规范
- 创建
- 正则表达式:定义字符串的组成规则。
-
Global
-
特点:全局对象,这个Global中封装的方法不需要对象就可以直接调用。 方法名();
-
方法:
encodeURI():url编码
decodeURI():url解码encodeURIComponent():url编码,编码的字符更多
decodeURIComponent():url解码parseInt():将字符串转为数字
* 逐一判断每一个字符是否是数字,直到不是数字为止,将前边数字部分转为number
isNaN():判断一个值是否是NaN
* NaN六亲不认,连自己都不认。NaN参与的==比较全部为falseeval():将JavaScript字符串作为脚本代码来运行。
-
-
DOM简单学习
- 功能:控制html文档的内容
- 获取页面标签(元素)对象:Element
- document.getElementById(“id值”):通过元素的id获取元素对象
- 操作Element对象:
- 修改属性值:
- 明确获取的对象是哪一个?
- 查看API文档,找其中有哪些属性可以设置
- 修改标签体内容:
- 属性:innerHTML
- 获取元素对象
- 使用innerHTML属性修改标签体内容
- 修改属性值:
事件简单学习
- 功能:某些组件被执行了某些操作后,触发某些代码的执行。
- 造句:xxx被xxx,我就xxx
- 如何绑定事件
BOM
-
概念:Browser Object Model 浏览器对象模型
- 将浏览器的各个组成部分封装成对象。
-
组成:
- Window:窗口对象
- Navigator:浏览器对象
- Screen:显示器屏幕对象
- History:历史记录对象
- Location:地址栏对象
-
Window:窗口对象
- 创建
- 方法
1.与弹出框有关的方法:
alert() 显示带有一段消息和一个确认按钮的警告框。
comfirm() 显示带有一段消息以及确认按钮和取消按钮的对话框。
* 如果用户点击确定按钮,则方法返回true
* 如果用户点击取消按钮,则方法返回false
prompt() 显示可提示用户输入的对话框。
* 返回值:获取用户输入的值- 与打开关闭有关的方法:
close() 关闭浏览器窗口。
* 谁调用我,我关谁
open() 打开一个新的浏览器窗口
* 返回新的Window对象 - 与定时器有关的方法:
setTimeout() 在指定的毫秒数后调用函数或计算表达式。
* 参数:
1. js代码或者方法对象
2. 毫秒值
* 返回值:唯一标识,用于取消定时器
clearTimeout()取消由setTimeout()方法设置的timeout
setInterval()按照指定的周期(以毫秒计)来调用函数或计算表达式。
clearInterval()取消由setInterval()设置的timeout。
- 与打开关闭有关的方法:
- 属性
- 获取其他BOM对象:
history
location
Navigator
Screen - 获取DOM对象
document
- 获取其他BOM对象:
- 特点
* Window对象不需要创建可以使用window使用。window.方法名();
* window引用可以省略。方法名();
-
Location对象:地址栏对象
1. 创建(获取):
1. window.location
2. location
2. 方法:
* reload() 重新加载当前文档。刷新
3. 属性
* href 设置或返回完整的URL。 -
History:历史记录对象
- 创建(获取):
- window.history
- history
- 方法:
- back() 加载history列表中的前一个URL。
- forward() 加载history列表中的下一个URL。
- go(参数) 加载history列表中的某个具体页面。
- 参数:
- 正数:前进几个历史记录
- 负数:后退几个历史记录
- 参数:
- 属性:
- length 返回当前窗口历史列表中的URL数量。
- 创建(获取):
DOM
- 概念:Document Object Model 文档对象模型
- 将标记语言文档的各个组成部分,封装为对象。可以使用这些对象,对标记语言文档进行CRUD的动态操作
- W3C DOM 标准被分为3个不同的部分:
- 核心DOM-针对任何结构化文档的标准模型
-
Document:文档对象
-
Element:元素对象
-
Attribute:属性对象
-
Text:文本对象
-
Comment:注释对象
-
Node:节点对象,其他5个的父对象
-
- XML DOM -针对XML文档的标准模型
- HTML DOM-针对HTML文档的标准模型
- 核心DOM-针对任何结构化文档的标准模型
- 核心DOM模型:
- Document:文档对象
- 创建(获取):在html dom模型中可以使用window对象来获取
- window.document
- document
- 方法:
- 获取Element对象:
- getElementById():根据id属性值获取元素对象。id属性值一般唯一
- getElementsByTagName():根据元素名称获取元素对象们。返回值是一个数组
- getElementsByClassName():根据Class属性值获取元素对象们。返回值是一个数组
- getElementsByName():根据name属性值获取元素对象们。返回值是一个数组
- 创建其他DOM对象:
createAttribute(name)
createComment()
createElement()
createTextNode()
- 获取Element对象:
- 属性
- 创建(获取):在html dom模型中可以使用window对象来获取
- Element:元素对象
- 获取/创建:通过document来获取和创建
- 方法:
- removeAttribute():删除属性
- setAttribute():设置属性
- Node:节点对象,其他5个的父对象
- 特点:所有dom对象都可以被认为是一个节点
- 方法:
- CRUD dom树:
- appendChild():向节点的子节点列表的结尾添加新的子节点。
- removeChild():删除(并返回)当前节点的指定子节点。
- replaceChild():用新节点替换一个子节点。
- CRUD dom树:
- 属性:
- parentNode 返回节点的父节点。
- Document:文档对象
- HTML DOM
- 标签体的设置和获取:innerHTML
- 使用html元素对象的属性
- 控制样式
- 使用元素的style属性来设置
如:
//修改样式方式1
div1.style.border = “1px solid red”;
div1.style.width = “200px”;
//font-size–>fontSize
div.style.fontSize = “20px”; - 提前定义好类选择器的样式,通过元素的className属性来设置其class属性值
- 使用元素的style属性来设置
Bootstrap
- 概念:一个前端开发的框架,Bootstrap,来自Twitter,是目前很受欢迎的前端框架。Bootstrap是基于HTML、CSS、JavaScript的,它简洁灵活,使得web开发更加快捷。
- 框架:一个半成品软件,开发人员可以在框架基础上,再进行开发,简化编码。
- 好处:
- 定义了很多的css样式和js插件。我们开发人员直接可以使用这些样式和插件得到丰富的页面效果。
- 响应式布局。
- 同一套页面可以兼容不同分辨率的设备。
- 快速入门
- 下载bootstrap
- 在项目中将这3个文件夹复制
- 创建html页面,引入必要的资源文件
响应式布局
- 同一套页面可以兼容不同分辨率的设备。
- 实现:依赖于栅格系统:将一行平均分成12个格子,可以指定元素占几个格子
- 步骤:
- 定义容器。相当于之前的table
- 容器分类:
- container:两边留白
- container-fluid:每一种设备都是100%宽度
- 容器分类:
- 定义行。相当于之前的tr 样式:row
- 定义元素。指定该元素在不同的设备上,所占的格子数目。样式:col-设备代号-格子数目
- 设备代号:
- xs:超小屏幕 手机 (<768px):col-xs-12
- sm:小屏幕 平板 (>=768px)
- md:中等屏幕 桌面显示器(笔记本电脑) (>=992px)
- lg:大屏幕 大桌面显示器(台式电脑) (>=1200px)
- 设备代号:
- 注意:
- 一行中如果格子数目超过12,则超出部分自动换行。
- 栅格类属性可以向上兼容。栅格类适用于与屏幕宽度大于或等于分界点大小的设备。
- 如果真实设备宽度小于了设置栅格类属性的设备代码的最小值,会一个元素占满一整行
- 定义容器。相当于之前的table
CSS样式和JS插件
- 全局CSS样式:
- 按钮:class=“btn btn-default”
- 图片:
- class=“img-responsive”:图片在任意尺寸都占100%
- 图片形状
- < img src="…" alt="…" class=“img-rounded”>:方形
- < img src="…" alt="…" class=“img-circle”>:圆形
- < img src="…" alt="…" class=“img-thumbnail”>:相框
- 表格
- 表单
- 组件:
- 导航条
- 分页条
- 插件:
- 轮播图
事件监听机制:
- 概念:某些组件被执行了某些操作后,触发某些代码的执行。
- 事件:某些操作。如:单击,双击,键盘按下了,鼠标移动了
- 事件源:组件。如:按钮 文本输入框…
- 监听器:代码。
- 注册监听:将事件,事件源,监听器结合在一起。当事件源上发生了某个事件,则触发执行某个监听器代码。
- 常见的事件:
- 点击事件:
- onclick:单击事件
- ondblclick:双击事件
- 焦点事件:
- onblur:失去焦点
- 一般用于表单验证
- onfocus:元素获得焦点
- onblur:失去焦点
- 加载事件:
- onload:一张页面或一幅图像完成加载。
- 鼠标事件:
- onmousedown 鼠标按钮被按下。
- 定义方法时,定义一个形参,接收event对象。
- onmouseup 鼠标按钮被松开。
- onmousemove 鼠标被移动。
- onmouseover 鼠标移到某元素之上。
- onmouseout 鼠标从某元素移开。
- onmousedown 鼠标按钮被按下。
- 键盘事件:
- onkeydown 某个键盘按键被按下。
- onkeyup 某个键盘按键被松开。
- onkeypress 某个键盘按键被按下并松开。
- 选择和改变:
- onchange 域的内容被改变。
- onselect 重置按钮被点击。
- 表单事件:
- onsubmit 确认按钮被点击。
- 可以阻止表单的提交
- 方法返回false则表单被阻止提交。
- 可以阻止表单的提交
- onreset 重置按钮被点击。
- onsubmit 确认按钮被点击。
- 点击事件:
XML
1. 概念:Extensible Markup Language 可扩展标记语言
- 可扩展:标签都是自定义的。
- 功能
- 储存数据
- 配置文件
- 在网络中传输
- 储存数据
- xml与html的区别
- xml标签都是自定义的,html标签是预定义。
- xml的语法严格,html语法松散
- xml是存储数据的,html是展示数据
- w3c:万维网联盟
2. 语法:
- 基本语法:
- xml文档的后缀名:.xml
- xml第一行必须定义为文档声明
- xml文档中有且仅有一个根标签
- 属性值必须使用引号(单双都可)引起来
- 标签必须正确关闭
- xml标签名称区分大小写
- 组成部分:
- 文档声明
- 格式:<?xml 属性列表 ?>
- 属性列表:
- verson:版本号,必须的属性
- encoding:编码方式。告知解析引擎 当前文档使用的字符集,默认值:ISO-8859-1
- standalone:是否独立
- 取值:
- yes:不依赖其他文件
- no:依赖其他文件
- 取值:
- 指令(了解):结合css的
- <?xml-stylesheet type="text/css" href="a.css" ?>
- 标签:标签名称自定义的
- 规则:
* 名称可以包含字母、数字以及其他的字符
* 名称不能以数字或者标点符号开始
* 名称不能以字母xml(或者XML、Xml等等)开始
* 名称不能包含空格
- 规则:
- 属性:
id属性值唯一 - 文本:
- CDATA区:在该区域中的数据会被原样展示
- 格式:<![CDATA[数据]]>
- CDATA区:在该区域中的数据会被原样展示
- 文档声明
- 约束:规定xml文档的书写规则
- 作为框架的使用者(程序员):
- 能够在xml中引入约束文档
- 能够简单的读懂约束文档
- 分类:
- DTD:一种简单的约束技术
- Schema:一种复杂的约束技术
- DTD:
- 引入dtd文档到xml文档中
- 内部dtd:将约束规则定义在外部的dtd文件中
- 外部dtd:将约束规则定义在外部的dtd文件中
- 本地:
- 网络:
- 引入dtd文档到xml文档中
- Schema:
- 引入:
- 填写xml文档的根元素
- 引入xsi前缀. xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
- 引入xsd文件命名空间. xsi:schemaLocation=“http://www.itcast.cn/xml student.xsd”
- 为每一个xsd约束声明一个前缀,作为标识 xmlns=“http://www.itcast.cn/xml”
- 引入:
- 作为框架的使用者(程序员):
3.解析:操作xml文档,将文档中的数据读取到内存中
- 操作xml文档
- 解析(读取):将文档中的数据读取到内存中
- 写入:将内存中的数据保存到xml文档中。持久化的存储
- 解析xml的方式:
- DOM:将标记语言文档一次性加载进内存,在内存中形成一颗dom树
- 优点:操作方便,可以对文档进行CRUD的所有操作
- 缺点:占内存
- SAX:逐行读取,基于事件驱动的。
- 优点:不占内存
- 缺点:只能读取,不能增删改
- DOM:将标记语言文档一次性加载进内存,在内存中形成一颗dom树
- xml常见的解析器:
- JAXP:sun公司提供的解析器,支持dom和sax两种思想
- DOM4J:一款非常优秀的解析器
- Jsoup:Jsoup是一款Java的HTML解析器,可以直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可以通过DOM,jQuery的操作方法来取出和操作数据。
- 4.PULL:Android操作系统内置的解析器,sax方式的。
- Jsoup
- 快速入门:
- 步骤:
- 导入jar包
- 获取Dpcument对象
- 获取对应的标签Element对象
- 获取数据
- 步骤:
- 快速入门:
- 对象的使用:
- Jsoup:工具类,可以解析html或xml文档,返回Document
- parse:工具类,可以解析html或xml文档,返回Document
- parse(File in,String charsetName):解析xml或html文件的。
- parse(String html):解析xml或html字符串
- parse(URL url,int timeoutMillis):通过网络路径获取指定的html或xml的文档对象
- parse:工具类,可以解析html或xml文档,返回Document
- Jsoup:工具类,可以解析html或xml文档,返回Document
- Document:文档对象。代表内存中的dom树
- 获取Element对象
- getElementById(String id):根据id属性值获取唯一的element对象
- getElementsByTag(String tagName):根据标签名称获取元素对象集合
- getElementsByAttribute(String key):根据属性名称获取元素对象集合
- getElementsByAttributeValue(String key,String value):根据对应的属性名和属性值获取元素对象集合
- 获取Element对象
- Elements:元素Element对象的集合。可以当做ArrayList< Element>来使用
- Element:元素对象
- 获取子元素对象
- getElementById(String id):根据id属性值获取唯一的element对象
- getElementsByTag(String tagName):根据标签名称获取元素对象集合
- getElementsByAttribute(String key):根据属性名称获取元素对象集合
- getElementsByAttributeValue(String key,String value):根据对应的属性名和属性值获取元素对象集合
- 获取属性值
- String attr(String key):根据属性名称获取属性值
- 获取文本内容
- String text():获取文本内容
- String html():获取标签体的所有内容(包括字标签的字符串内容)
- 获取子元素对象
- Node:节点对象
- 是Document和Element的父类
- 快捷查询方式:
- selector:选择器
- 使用的方法:Elements select(String cssQuery)
- 语法:参考Selector类中定义的语法
- 使用的方法:Elements select(String cssQuery)
- XPath:XPath即为xml路径语言,它是一种用来确定xml(标准通用标记语言的子集)文档中某部分位置的语言
- 使用Jsoup的Xpath需要额外导入jar包
- 查询w3cshool参考手册,使用Xpath的语法完成查询
- selector:选择器
web相关概念回顾
- 软件架构
- C/S:客户端/服务器端
- B/S:浏览器/服务器端
- 资源分类
- 静态资源:所有用户访问后,得到的结果都是一样的,称为静态资源,静态资源可以直接被浏览器解析
- 如:html,css,JavaScript
- 动态资源:每个用户访问相同资源后,得到的结果可能不一样,称为动态资源,动态资源被访问后,需要先转换为静态资源,再返回给浏览器解析
- 如:servlet/jsp,php,asp…
- 静态资源:所有用户访问后,得到的结果都是一样的,称为静态资源,静态资源可以直接被浏览器解析
- 网络通信三要素
- IP:电子设备(计算机)在网络中的唯一标识。
- 端口:应用程序在计算机中的唯一标识。 0~65536
- 传输协议:规定了数据传输的规则
- 基础协议:
- tcp:安全协议,三次握手。 速度稍慢
- udp:不安全协议。 速度快
- 基础协议:
web服务器软件
- 服务器:安装了服务器软件的计算机
- 服务器软件:接收用户的请求,处理请求,做出响应
- web服务器软件:接收用户的请求,处理请求,做出响应。
- 在web服务器软件中,可以部署web项目,让用户通过浏览器来访问这些项目
- web容器
- 常见的Java相关的web服务器软件:
- webLogic:oracle公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
- webSphere:IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
- JBOSS:JBOSS公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
- Tomcat:Apache公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
- JavaEE:java语言在企业级开发中使用的技术规范的总和,一共规定了13项大的规范
Servlet: server applet
- 概念:运行在服务器端的小程序
- Servlet就是一个接口,定义了Java类被浏览器访问到(Tomcat识别)的规则。
- 将来我们自定义一个类,实现Servlet接口,复写方法。
- 快速入门:
- 创建JavaEE项目
- 定义一个类,实现Servlet接口
- public class ServletDeom1 implements Servlet
- 实现接口中的抽象方法
- 配置Servlet
<!--配置Servlet-->
<servlet>
<servlet-name>demo1</servlet-name>
<servlet-class>cn.itcast.web.servlet.ServletDeom1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo1</servlet-name>
<url-pattern>/demo1</url-pattern>//注:此处斜杠不要忽略了,会报错
</servlet-mapping>
- 执行原理:
- 当服务器接受到客户端浏览器的请求后,会解析请求URL全路径,获取访问的Servlet的资源路径
- 查找web.xml文件,是否有对应的< url-pattern>标签体内容。
- 如果有,则在找到对应的< servlet-class>全类名
- tomcat会将字节码文件加载进内存,并创建其对象
- 调用其方法
- Servlet中的生命周期:
- 被创建:执行init方法,只执行一次
- Servlet什么时候被创建?
- 默认情况下,第一次被访问时,Servlet被创建
- 可以配置执行Servlet的创建时机
- 在< servlet>标签下配置
- 第一次被访问时,创建
- < load-on-startup>的值为负数
- 在服务器启动时,创建
- < load-on-startup>的值为0或正整数
- 第一次被访问时,创建
- 在< servlet>标签下配置
- Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的
- 多个用户同时,可能存在线程安全问题。
- 解决:尽量不要再Servlet中定义成员变量。即使定义了成员变量,也不要对其修改值
- Servlet什么时候被创建?
- 提供服务:执行service方法,执行多次
- 每次访问Servlet时,Service方法都会被调用一次。
- 被销毁:执行destroy方法,只执行一次
- Servlet被销毁时执行。服务器关闭时,Servlet被销毁
- 只有父亲正常关闭时,才会执行destroy方法。
- destroy方法在Servlet被销毁之前执行,一般用于释放资源
- 被创建:执行init方法,只执行一次
- Servlet3.0:
- 好处:
- 支持注解配置。可以不需要web.xml了。
- 步骤:
- 创建JavaEE项目,选择Servlet的版本3.0以上,可以不创建web.xml
- 定义一个类,实现Servlet接口
- 复写方法
- 在类上使用@webServlet注解,进行配置
- @WebServlet("/demo2")
- 好处:
IDEA与tomcat的相关配置
- IDEA会为每一个tomcat部署的项目单独建立一份配置文件
- 查看控制台的log:Using CATALINA_BASE: “C:\Users\Tedu\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat\Tomcat_8_5_66_day14_tomcat_2”
- 工作空间项目和tomcat部署的web项目
- tomcat真正访问的是“tomcat部署的web项目”,“tomcat部署的web项目”对应着“工作空间项目”的web目录下的所有资源
- WEB-INF目录下得资源不能被浏览器直接访问。
- 断点调试:使用“小虫子”启动 debug启动
Servlet的体系结构
Servlet – 接口
GenericServlet – 抽象类
HttpServlet – 抽象类
- GenericServlet :将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象
- 将来定义Servlet类时,可以继承GenericServlet ,实现service()方法即可
- HttpServlet:对http协议的一种封装,简化操作
- 定义类继承HttpServlet
- 复写doGet/doPost方法
Servlet的相关配置
- urlpartten:Servlet访问路径
- 一个Servlet可以定义多个访问路径:@WebServlet({"/d4","/dd4","/ddd4"})
- 路径定义规则:
- /xxx
- /xxx/xxx:多层路径,目录结构
- *.do
HTTP:
- 概念:Hyper Text Transfer Protocol 超文本传输协议
- 传输协议:定义了,客户端和服务器端通信时,发送数据的格式
- 特点:
- 基于TCP/IP的高级协议
- 默认端口号:80
- 基于请求、响应模型的:一次请求对应一次响应
- 无状态的:每次请求之间相互独立,不能交互数据
- 历史版本:
- 1.0:每一次请求响应都会建立新的连接
- 1.1:复用连接
- 请求消息数据格式
- 请求行
- 请求头
- 请求空行
- 请求体
- 发送消息数据格式
Request:
- request对象和response对象的原理
- request和response对象是由服务器创建的。我们来使用它们
- request对象是来获取请求消息的,response对象是来设置响应消息
- request对象继承体系结构:
ServletRequest – 接口
| 继承
HttpSerletRequest --接口
| 实现
org.apache.catalina.connector.RequestFacade --类(tomcat) - request功能:
- 获取请求消息数据
- 获取请求行消息数据
- GET/day14/demo1?name=zhangsan HTTP/1.1
- 方法:
- 获取请求方式:GET
- String getMethod()
- 获取虚拟目录:/day14
- String getContextPath()
- 获取Servlet路径:/demo1
- String getServletPath()
- 获取get方式请求参数:name=zhangsan
- String getQueryString()
- 获取请求URI:/day14/demo1
-
String getRequestURI(): /day14/demo1
-
StringBuffer getRequestURL() :http://localhost/day14/demo1
-
URL:统一资源定位符:http://localhost:8080/day14_servlet/requestDemo1
-
URI:统一资源标识符:/day14_servlet/requestDemo1
-
- 获取协议及版本:HTTP/1.1
- String getProtocol()
- 获取客户机的IP地址:
- String getRemoteAddr()
- 获取请求方式:GET
- 获取请求头消息数据
- 方法:
- (*)String getHeader(String name):通过请求头的名称获取请求头的值
- Enumeration< String> getHeaderNames():获取所有的请求头名称
- 方法:
- 获取请求体消息数据
- 请求体:只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数
- 步骤:
- 获取流对象
- BufferedReader getReader():获取字符输入流,只能操作字符数据
- ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据
- 再从流对象中拿数据.
- 获取流对象
- 获取请求行消息数据
- 其他功能:
- 获取请求参数通用方式
- String getParameter(String name):根据参数名称获取参数值 username=zs&password=123
- String[] getParameterValues(String name):根据参数名称获取参数值的数组 hobby=xx&hobby=game
- Enumeration< String> getParameterNames():获取所有请求的参数名称
- Map< String,String[]> getParameterMap():获取所有参数的map集合
- 中文乱码问题:
- get方式:tomcat8已经将get方式乱码问题解决了
- post方式:会乱码
- 解决:在获取参数前,设置request的编码request.setCharacterEncoding(“utf-8”)
- 请求转发
- 步骤:
- 通过request对象获取请求转发器对象RequestDispatcher getRequestDispatcher(String path)
- 使用RequestDispatcher对象来进行转发:forward(ServletRequest request,ServletResponse response)
- 特点:
- 浏览器地址栏路径不发生变化
- 只能转发到当前服务器内部资源中。
- 转发是一次请求
- 步骤:
- 共享数据
- 域对象:一个有作用范围的对象,可以在范围内共享数据
- request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
- 方法:
- void setAttribute(String name,Object obj):储存数据
- Object getAttribude(String name):通过键获取值
- void removeAttribute(String name):通过键移除键值对
- 获取ServletContext
- ServletContext getServletContext()
- 获取请求参数通用方式
- 获取请求消息数据
HTTP协议:
- 请求消息:客户端发送给服务器端的数据
- 数据格式:
- 请求行
- 请求头
- 请求空行
- 请求体
- 数据格式:
- 响应消息:服务器端发送给客户端的数据
- 数据格式:
-
响应行
- 组成:协议/版本 响应状态码 状态码描述
- 响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态
- 状态码都是3位数字
- 分类:
- 1xx:服务器就收客户端消息,单没有接受完成,等待一段时间后,发送1xx多状态码
- 2xx:成功。代表:200
- 3xx:重定向。代表:302(重定向),304(访问缓存)
- 4xx:客户端错误。
- 代表:
- 404:请求路径没有对应 的资源
- 405:请求方式没有对应的doxxx方法
- 代表:
- 5xx:服务器端错误。代表:500(服务器内部出现异常)
-
响应头
- 格式:头名称:值
- 常见的响应头:
- Content-Type:服务器告诉客户端本次响应体数据格式以及编码格式
- Content-disposition:服务器告诉客户端以什么格式打开响应体数据
- 值:
- in-line:默认值,在当前页面内打开
- attachment;filename=xxx:以附件形式打开响应体。文件下载
- 值:
-
响应空行
-
响应体
-
- 数据格式:
Response对象:
- 功能:设置响应消息
- 设置响应行
- 格式:HTTP/1.1 200 ok
- 设置状态码:setStatus(int sc)
- 设置响应头:setHeader(String name,String value)
- 设置响应体:
- 使用步骤:
- 获取输出流
- 字符输出流:PrintWriter getWriter()
- 字符输出流:ServletOutputStream()
- 使用输出流,将数据输出到客户端浏览器
- 获取输出流
- 使用步骤:
- 设置响应行
- 案例:
- 完成重定向
- 重定向:资源跳转的方式
- 代码实现:
//1. 设置状态码为302
response.setStatus(302);
//2. 设置响应头location
response.setHeader(“location”,"/day15/responseDemo2");
//简单重定向方法
response.sendRedirect("/day15/responseDemo2"); - 重定向的特点:redirect
- 地址栏发生变化
- 重定向可以访问其他站点(服务器)的资源
- 重定向是两次请求。不能使用request对象来共享数据
- 转发的特点:forward
- 转发地址栏路径不变
- 转发只能访问当前服务器下的资源
- 转发是一次请求,可以使用request对象来共享数据
- 路径写法:
- 路径分类
- 相对路径:通过相对路径不可以确定唯一资源
- 如:./index.html
- 不以/开头,以.开头路径
- 规则:找到当前资源和目标资源之前的相对位置关系
- ./:当前目录
- …/:后退一级目录
- 绝对路径:通过绝对路径可以确定唯一资源
- 客户端浏览器使用:需要加虚拟目录(项目的访问路径)
- 建议虚拟目录动态获取:request.getContextPath()
- < a>,< form> 重定向
- 给服务器使用:不需要加虚拟目录
- 转发路径
- 客户端浏览器使用:需要加虚拟目录(项目的访问路径)
- 相对路径:通过相对路径不可以确定唯一资源
- 路径分类
- 服务器输出字符数据到浏览器
- 步骤:
- 获取字符输出流
- 输出数据
- 注意:
- 乱码问题:
- PrintWriter pw = response.getWriter();获取的流的默认编码是ISO-8859-1
- 设置该流的默认编码
- 告诉浏览器响应体使用的编码
//简单的形式,设置编码,是在获取流之前设置
response.setContentType(“text/html;charset=utf-8”);
- 乱码问题:
- 步骤:
- 服务器输出字节数据到浏览器
- 步骤:
- 获取字节输出流
- 输出数据
- 步骤:
- 验证码
- 本质:图片
- 目的:防止恶意表单注册
- 完成重定向
ServletContext对象:
- 概念:代表整个web应用,可以和程序的容器(服务器)来通信
- 获取:
- 通过request对象获取
request.getServletContext(); - 通过HttpServlet获取
this.getServletContext();
- 通过request对象获取
- 功能:
- 获取MIME类型:
- MIME类型:在互联网通信过程中定义的一种文件数据类型
- 格式:大类型/小类型 text/html image/jepg
- 获取:String getMimeType(String file)
- MIME类型:在互联网通信过程中定义的一种文件数据类型
- 域对象:共享数据
- setAttribute(String name,Object value)
- getAttribute(String name)
- removeAttribute(String name)
- ServletContext对象范围:所有用户所有请求的数据
- 获取文件的真实(服务器)路径
- 方法:String getRealPath(String path)
- 获取MIME类型:
案例:
- 文件下载需求:
- 页面显示超链接
- 点击超链接后弹出下载提示框
- 完成图片文件下载
- 分析:
- 超链接指向的资源如果能够被浏览器解析,则在浏览器中展示,如果不能解析,则弹出下载提示框。不满足需求
- 任何资源都必须弹出下载提示框
- 使用响应头设置资源的打开方式:
- content-disposition:attachment;filename=xxx
- 步骤:
- 定义页面,编辑超链接href属性,指向Servlet,传递资源名称filename
- 定义Servlet
- 获取文件名称
- 使用字节输入流加载文件进内存
- 指定response的响应头:content-disposition:attachment;filename=xxx
- 将数据写出到response输出流
- 问题:
- 中文文件问题:
- 解决思路:
- 获取客户端使用的浏览器版本信息
- 根据不同的版本信息,设置filename的编码方式不同
- 解决思路:
- 中文文件问题: