<meta charset="utf-8">
JavaWeb:
使用Java语言开发基于互联网的项目
软件架构:
1. C/S: Client/Server 客户端/服务器端
在用户本地有一个客户端程序,在远程有一个服务器端程序
如:QQ,迅雷...
优点:
1. 用户体验好
缺点:
[图片上传中...(image.png-409ca4-1570967855977-0)]
1. 开发、安装,部署,维护 麻烦
2. B/S: Browser/Server 浏览器/服务器端
只需要一个浏览器,用户通过不同的网址(URL),客户访问不同的服务器端程序
优点:
1. 开发、安装,部署,维护 简单
缺点:
1. 如果应用过大,用户的体验可能会受到影响
2. 对硬件要求过高
B/S架构详解
资源分类:
1. 静态资源:
使用静态网页开发技术发布的资源。
特点:
所有用户访问,得到的结果是一样的。
如:文本,图片,音频、视频, HTML,CSS,JavaScript
如果用户请求的是静态资源,那么服务器会直接将静态资源发送给浏览器。浏览器中内置了静态 资源 的解析引擎,可以展示静态资源
2. 动态资源:
使用动态网页及时发布的资源。
特点:
所有用户访问,得到的结果可能不一样。
如:jsp/servlet,php,asp...
如果用户请求的是动态资源,那么服务器会执行动态资源,转换为静态资源,再发送给浏览器
HTML
代码格式:
<html>
<head>
<title>title</title>
内容....
</head>
<body>
内容...
</body>
</html>
HTML基础标签:
1. 文件标签:构成html最基本的标签
html:html文档的根标签
head:头标签。用于指定html文档的一些属性。引入外部的资源
title:标题标签。
body:体标签
<!DOCTYPE html>:html5中定义该文档是html文档
2. 文本标签:和文本有关的标签
<h1> to <h6>:标题标签
h1~h6:字体大小逐渐递减
<p>:段落标签
:换行标签
:展示一条水平线
属性:
color:颜色
width:宽度
size:高度
align:对齐方式
center:居中
left:左对齐
right:右对齐
<b>:字体加粗
<i>:字体斜体
<font>:字体标签
属性:
color:颜色
size:大小
face:字体
<center>:文本居中
属性定义:
color:
1. 英文单词:red,green,blue
2. rgb(值1,值2,值3):值的范围:0~255 如 rgb(0,0,255)
3. #值1值2值3:值的范围:00~FF之间。如: #FF00FF
width:
1. 数值:width='20' ,数值的单位,默认是 px(像素)
2. 数值%:占比相对于父元素的比例
3. 图片标签:
img:展示图片
属性:
src:指定图片的位置
代码:
<img src="image/jingxuan_2.jpg" align="right" alt="古镇" width="500" height="500"/>
相对路径
以.开头的路径
./:代表当前目录 ./image/1.jpg
../:代表上一级目录
当前目录
<img src="./image/jiangwai_1.jpg">
上一级目录
<img src="../image/jiangwai_1.jpg">
4. 列表标签:
有序列表:
ol:
li:
格式
<0l type = ".." start = "..">
<li> ... </li>
<0l>
无序列表:(disc ,square,circle)
ul:
li:
格式
<ul type = ".." >
<li> ... </li>
<ul>
5. 链接标签:<a>
:定义一个超链接
属性:
href:指定访问资源的URL(统一资源定位符)
target:指定打开资源的方式
_self:默认值,在当前页面打开
_blank:在空白页面打开
格式:
<a href="http://www.itcast.cn" target="_self 或者 _blank">点我</a>
链接地址可以为发送邮箱
<a href="mailto:itcast@itcast.cn">联系我们</a>
可以为本地中的html文件
<a href="./5_列表标签.html">列表标签</a>
图片链接:
<a href="http://www.itcast.cn"><img src="image/jiangwai_1.jpg"></a>
6. div和span:
div:每一个div占满一整行。块级标签
span:文本信息在一行展示,行内标签 内联标签
7. 语义化标签:html5中为了提高程序的可读性,提供了一些标签。
1. <header>:页眉
2. <footer>:页脚
8. 表格标签:
table:定义表格
属性
width:宽度
border:边框
cellpadding:定义内容和单元格的距离
cellspacing:定义单元格之间的距离。如果指定为0,则单元格的线会合为一条、
bgcolor:背景色
align:对齐方式
子标签
tr:定义行
属性
bgcolor:背景色
align:对齐方式
td:定义单元格
属性
colspan:合并列
rowspan:合并行
th:定义表头单元格
<caption>:表格标题
<thead>:表示表格的头部分
<tbody>:表示表格的体部分
<tfoot>:表示表格的脚部分
注:头体脚 将表分为三个部分,互不影响,比如无法合并两个不同部位的表单元格
HTML表单标签:
概念:用于采集用户输入的数据的。用于和服务器进行交互。
form:用于定义表单的。可以定义一个范围,范围代表采集用户数据的范围
属性:
action:指定提交数据的URL
method:指定提交方式
分类:一共7种,2种比较常用
get:
1. 请求参数会在地址栏中显示。会封装到请求行中(HTTP协议后讲解)。
2. 请求参数大小是有限制的。
3. 不太安全。
post:
2. 请求参数不会再地址栏中显示。会封装在请求体中(HTTP协议后讲解)
2. 请求参数的大小没有限制。
3. 较为安全。
格式:
<form action="#" method="post/get">
用户名:<input type="text" name="username">
密码:<input name="password">
<input type="submit" value="登录" >
</form>
注: name属性必须声明,否则无法提交
表单项中的数据要想被提交:必须指定其name属性
表单项标签:
input:可以通过type属性值,改变元素展示的样式
type属性:
{
text:文本输入框,默认值
placeholder:显示 提示输入信息
password:密码输入框
radio:单选框
注意:
要想让多个单选框实现单选的效果,则多个单选框的name属性值必须一样。
一般会给每一个单选框提供value属性,指定其被选中后提交的值
checked属性,可以指定默认值
checkbox:复选框
注意:
一般会给每一个单选框提供value属性,指定其被选中后提交的值
checked属性,可以指定默认值
file:文件选择框
hidden:隐藏域,用于提交一些信息。
按钮:
submit:提交按钮。可以提交表单
button:普通按钮
image:图片提交按钮
属性src:属性指定图片的路径
}
label标签:指定输入项的文字描述信息
属性
for
注意:
label的for属性一般会和 input 的 id属性值 对应。如果对应了,则点击label区域,会让input输入框获取焦点。
select标签: 下拉列表
子标签option:指定列表项
textarea标签:文本域
属性
cols:指定列数,每一行有多少个字符
rows:默认多少行。
CSS
1. 内联样式
在标签内使用style属性指定css代码
如:<div style="color:red;">hello css</div>
2. 内部样式
在head标签内,定义style标签,style标签的标签体内容就是css代码
如:
<style>
div{
color:blue;
}
</style>
<div>hello css</div>
3. 外部样式
①. 定义css资源文件。
②. 在head标签内,定义link标签,引入外部的资源文件
a.css文件:
div{
color:green;
}
<link rel="stylesheet" href="css/a.css">
<div>hello css</div>
<div>hello css</div>
- 注意:
1,2,3种方式 css作用范围越来越大
*1方式不常用,后期常用2,3
第3种格式可以写为:
<style>
@import "css/a.css";
</style>
4. css语法:
格式:
选择器 {
属性名1:属性值1;
属性名2:属性值2;
...
}
选择器:筛选具有相似特征的元素
注意:
每一对属性需要使用;隔开,最后一对属性可以不加;
5. 选择器:筛选具有相似特征的元素
1. 基础选择器
①. id选择器:选择具体的id属性值的元素.建议在一个html页面中id值唯一
语法:#id属性值{}
②. 元素选择器:选择具有相同标签名称的元素
语法: 标签名称{}
注意:id选择器优先级高于元素选择器
③. 类选择器:选择具有相同的class属性值的元素。
语法:.class属性值{}
注意:类选择器选择器优先级高于元素选择器
2. 扩展选择器:
①. 选择所有元素:
语法: *{}
②. 并集选择器:
选择器1,选择器2{}
③. 子选择器:筛选选择器1元素下的选择器2元素
语法: 选择器1 选择器2{}
④. 父选择器:筛选选择器2的父元素选择器1
语法: 选择器1 > 选择器2{}
⑤. 属性选择器:选择元素名称,属性名=属性值的元素
语法: 元素名称[属性名="属性值"]{}
⑥. 伪类选择器:选择一些元素具有的状态
语法: 元素:状态{}
如: <a>
状态:
link:初始化的状态
hover:鼠标悬浮状态
active:正在访问状态
visited:被访问过的状态
css属性
1. 字体、文本
font-size:字体大小
color:文本颜色
text-align:对其方式 right left 左右对齐
line-height:行高
vertical-align: middle;垂直居中
2. 背景
background:颜色 / url("图片图片位置") no-repeat(去重) center(摆放位置)
3. 边框
border:设置边框大小(1px) 符合属性solid 颜色
border-radius: 3px; 设置边角圆
4. 尺寸
width:宽度
height:高度
5. 盒子模型:控制布局
margin:外边距 auto(居中) (仅仅适用于div,d对于已经使用了float的div也不管用)
padding:内边距
margin/padding-left :左边距
margin/padding-right :右边距
margin/paddingt-rop:上边距
注:默认情况下内边距会影响整个盒子的大小
box-sizing: border-box : 设置盒子的属性,让width和height就是最终盒子的大小
float:浮动(left,right)
JavaScript
概念:一门客户端脚本语言
运行在客户端浏览器中的。每一个浏览器都有JavaScript的解析引擎
脚本语言:不需要编译,直接就可以被浏览器解析执行了
JavaScript = ECMAScript + JavaScript自己特有的东西(BOM+DOM)
ECMAScript:客户端脚本语言的标准
1.基本语法: 与html结合方式
1. 内部JS:
定义<script>标签,标签体内容就是js代码
2. 外部JS:
定义<script src="xxxx.js">,通过src属性引入外部的js文件
2. 注释
1. 单行注释://注释内容
2. 多行注释:/注释内容/
3. 数据类型:
原始数据类型(基本数据类型):
1. number:数字。 整数/小数/NaN(not a number 一个不是数字的数字类型)
2. string:字符串。 字符串 "abc" "a" 'abc'
3. boolean: true和false
4. null:一个对象为空的占位符
5. undefined:未定义。如果一个变量没有给初始化值,则会被默认赋值为undefined
引用数据类型:对象
4. 变量
变量:一小块存储数据的内存空间
java语言是强类型语言,而JavaScript是弱类型语言。
强类型:在开辟变量存储空间时,定义了空间将来存储的数据的数据类型。只能存储固定类型的数据.
弱类型:在开辟变量存储空间时,不定义空间将来的存储数据类型,可以存放任意类型的数据。
语法:
var 变量名 = 初始化值;
typeof()运算符:获取变量的类型。
注:null值运算后得到的值是object类型,默认为undefined(类型为undefined值也为undefined)
5. 运算符
一元运算符:只有一个运算数的运算符
++(--) 在前,先自增(自减),再运算
++(--) 在后,先运算,再自增(自减)
+(-):正负号
注:使用医院运算符,会使其他类型的变量转化为number型
其他类型转number:
string转number:按照字面值转换。如果字面值不是数字,则转为NaN(不是数字的数字),null转为0,undefined为NaN
boolean转number:true转为1,false转为0
算数运算符
- / % ...
除String为连接(加一元运算符时也为相加),其他类型运算以number类型为桥梁计算结果。
赋值运算符
= += -+....
比较运算符
< >= <= == ===(全等于)
*比较方式
1. 类型相同:直接比较
字符串:按照字典顺序比较。按位逐一比较,直到得出大小为止。
2. 类型不同:先进行类型转换以number型为桥梁,再比较。NAN和任何比较都为false.null只和null相比才返回true
===:全等于。在比较之前,先判断类型,如果类型不一样,则直接返回false
逻辑运算符
&& || !
其他类型转boolean:
1. number:0或NaN为假,其他为真
2. string:除了空字符串(""),其他都是true
3. null&undefined:都是false
4. 对象:所有对象都为true
三元运算符
语法:
表达式? 值1:值2;
判断表达式的值,如果是true则取值1,如果是false则取值2;
6. 流程控制语句:
1. if...else...
2. switch:
在java中,switch语句可以接受的数据类型: byte int shor char,枚举(1.5) ,String(1.7)
- switch(变量):
case 值:
在JS中,switch语句可以接受任意的原始数据类型
3. while
4. do...while
5. for
7. JS特殊语法:
1. 语句以;结尾,如果一行只有一条语句则 ;可以省略 (不建议)
2. 变量的定义使用var关键字,也可以不使用
用var: 定义的变量是局部变量
不用var:定义的变量是全局变量(不建议)
8. 对象
基本对象:
1. Function:函数(方法)对象
创建:
方式一
var fun = new Function(形式参数列表,方法体);
方式二
function 方法名称(形式参数列表){
方法体
}
方式三
var 方法名 = function(形式参数列表){
方法体
}
属性:
length:代表形参的个数
特点:
1. 方法是一个对象,如果定义名称相同的方法,会覆盖
2. 参数可以放任意个数,未赋值的赋值为默认值,多赋的值也会放入arguments数组中.
3. 在方法声明中有一个隐藏的数组,arguments,封装所有的实际参数
调用:
方法名称(参数1,参数2....);
2. Array:数组对象
创建:
1. var arr = new Array(元素列表);
2. var arr = new Array(默认长度);
3. var arr = [元素列表];
方法
join(参数):将数组中的元素按照指定的分隔符拼接为字符串默认为逗号
push() 向数组的末尾添加一个或更多元素,并返回新的长度。
属性
length:数组的长度
特点:
1. JS中,数组元素的类型可变的。
2. JS中,数组长度可变的。
3. Boolean
4. Date:日期对象
创建:
var date = new Date();
方法:
toLocaleString():返回当前date对象对应的时间本地字符串格式
getTime():获取毫秒值。返回当前如期对象描述的时间到1970年1月1日零点的毫秒值差
5. Math(工具对象不需要创建对象):数学对象
方法:
random():返回 0 ~ 1 之间的随机数。 含0不含1
ceil(x):对数进行上舍入。
floor(x):对数进行下舍入。
round(x):把数四舍五入为最接近的整数。
属性:
PI
6. Number
7. String
8. RegExp:正则表达式对象
正则表达式:定义字符串的组成规则。
1. 单个字符:[]
如: [a] [ab] [a-zA-Z0-9_]
- 特殊符号代表特殊含义的单个字符:
\d:代表单个数字字符 [0-9]
\w:代表单个单词字符[a-zA-Z0-9_]
2. 量词符号:
?:表示字符个数0个或1个
*:表示字符个数0个或多个
+:字符1个数个或多个
{m,n}:表示 m<= 字符数量 <= n
{,n}:最多n个
{m,} 最少m个
3. 开始结束符号
^:开始
$:结束
[a-z]:字符只能是a-z中的字符
[a-z]{X,Y}:字符串中只能出现a-z中的字符,且总个数不能超出X-Y的范围
2. 正则对象:
1. 创建
1. var reg = new RegExp("^\表达式$");
2. var reg = /^\正则表达式$/;
2. 方法
test(参数):验证指定的字符串是否符合正则定义的规范
9. Global
特点:全局对象,这个Global中封装的方法不需要对象就可以直接调用。 方法名();
方法:
encodeURI():url编码
decodeURI():url解码
encodeURIComponent():url编码,编码的字符更多
decodeURIComponent():url解码
parseInt():将字符串转为数字
isNaN():判断一个值是否是NaN
eval():将 字符串解析,并把它作为脚本代码来执行。
9.BOM对象
概念:Browser Object Model 浏览器对象模型
- 将浏览器的各个组成部分封装成对象。
2. 组成:
Window:窗口对象
Navigator:浏览器对象
Screen:显示器屏幕对象
History:历史记录对象
Location:地址栏对象
3. Window:窗口对象
方法
1. 与弹出框有关的方法:
alert() 显示带有一段消息和一个确认按钮的警告框。
confirm() 显示带有一段消息以及确认按钮和取消按钮的对话框。
如果用户点击确定按钮,则方法返回true
如果用户点击取消按钮,则方法返回false
prompt("显示的文字") 显示可提示用户输入的对话框。
- 返回值:获取用户输入的值
2. 与打开关闭有关的方法:
close() 关闭浏览器窗口。
open() 打开一个新的浏览器窗口
返回新的Window对象
3. 与定时器有关的方式
var i = setTimeout( 方法名 /"完整的执行语句;" , 毫秒):按照指定的时间调用一次函数货方法
- 返回值:唯一标识,用于取消定时器
clearTimeout(i) 取消由 setTimeout() 方法设置的 timeout。
setInterval() 按照指定的周期(以毫秒计)来循环调用函数或计算表达式。
两种参数写法 ("完整的执行语句 fun(a);" , 毫秒数)
(方法名,毫秒数)
clearInterval() 取消由 setInterval() 设置的 timeout。
属性
1. 获取其他BOM对象:(通过window窗口 . 属性调用,本窗口可以省略window)
history
location
Navigator
Screen:
2. 获取DOM对象
document
Location:地址栏对象
方法:
reload() 重新加载当前文档。刷新
属性
href = "htttp://www.xxx.com" 本窗口跳转或返回完整的 URL地址。
History:本窗口历史记录对象
1. 创建(获取):
1. window.history
2. history
2. 方法:
back() 加载 history 列表中的前一个 URL。
forward() 加载 history 列表中的下一个 URL。
go(参数) 根据参数正负值前进或后退
参数:
正数:前进几个历史记录
负数:后退几个历史记录
3. 属性:
length 返回当前窗口历史列表中的 URL 数量。
10.DOM对象
document.getElementById("id值"):通过元素的id获取元素对象。
Document:文档对象
1. 创建(获取):在html dom模型中可以使用window对象来获取
1. window.document
2. document
2. 方法:
获取元素对象:
1. getElementById() : 根据id属性值获取元素对象。id属性值一般唯一
2. getElementsByTagName():根据元素名称获取元素对象们。返回值是数组
3. getElementsByClassName():根据Class属性值获取元素对象们。返回值是数组
4. getElementsByName(): 根据name属性值获取元素对象们。返回值是数组
创建并获取元素对象:
createAttribute(name) (节点元素)
createComment() (注释元素)
createElement("内容") (标签元素)
createTextNode("标签类型") (标签内容元素)
3. 属性
Element:元素对象
1. 获取/创建:
通过document来获取和创建
2. 方法:
removeAttribute():删除属性
setAttribute():设置属性
Node:节点对象,其他5个的父对象
特点:所有dom对象都可以被认为是一个节点
方法:
appendChild():向节点的子节点列表的结尾添加新的子节点。
removeChild() :删除(并返回)当前节点的指定子节点。
replaceChild():用新节点替换一个子节点。
属性:
parentNode :返回节点的父元素对象。
innerHTML:设置标签体内容和返回标签体内容
元素对象的标签属性 style className id ......
HTML DOM
1. 标签体的设置和获取:innerHTML
3. 控制元素样式
方式一:使用元素的style属性来设置
div1.style.border = "1px solid red";
div1.style.width = "200px";
div1.style.fontSize = "20px";
方式二:提前定义好类选择器的样式,通过元素的className属性来设置其class属性值。
div1.className = "样式类名"
11.事务
概念:
某些组件被执行了某些操作后,触发某些代码的执行。
事件:某些操作。如: 单击,双击,键盘按下了,鼠标移动了
事件源:组件。如: 按钮 文本输入框...
监听器:代码。
监听:将事件,事件源,监听器结合在一起。 当事件源上发生了某个事件,则触发执行某个监听器代码。
onclick--- 单击事件:(通过点击元素触发 事件(方法))
var fun = Function(){
.......
}
使用方法一:
<img src = "XXX" id= ""img onclick = "完整的执行语句 fun(参数);">
使用方法二:
var i = document.getElementById("img");
i.onclick = fun(方法名); (通过元素对象修改属性使用)
注:方法二常用,并且常规写法为
i.onclick = function(){
.....
}
常见的事件:
1. 点击事件:
1. onclick:单击事件
2. ondblclick:双击事件
2. 焦点事件
1. onblur:失去焦点
2. onfocus:元素获得焦点。
3. 加载事件:
1. onload:一张页面或一幅图像完成加载。
4. 鼠标事件:
1. onmousedown 鼠标按钮被按下。
2. onmouseup 鼠标按键被松开。
3. onmousemove 鼠标被移动。
4. onmouseover 鼠标移到某元素之上。
5. onmouseout 鼠标从某元素移开。
[图片上传失败...(image-beff2e-1570967628030)]
5. 键盘事件:
1. onkeydown 某个键盘按键被按下。
2. onkeyup 某个键盘按键被松开。
3. onkeypress 某个键盘按键被按下并松开。
[图片上传失败...(image-f24077-1570967628030)]
6. 选择和改变
1. onchange 域的内容被改变。
2. onselect 文本被选中。
7. 表单事件:
1. onsubmit 确认按钮被点击。
2. onreset 重置按钮被点击。
若需要触发事件的元素对象较多,可配合for循环使用
for (var i =0;i<alltr.length;i++){
alltr[i].onmouseover = function () { //当鼠标位于元素时,所有tr元素class改为red
this.className = "red";
}
alltr[i].onmouseout = function () { //当鼠标移开元素时 所有tr元素class改为 nored
this.className = "nored";
}
}
————————————————————————————————————————————
BootStrap
概念: 一个前端开发的框架,Bootstrap,来自 Twitter。Bootstrap 是基于 HTML、CSS、JavaScript 的,它简洁灵活,使得 Web 开发更加快捷。
功能:
使同一套页面可以兼容不同分辨率的设备。
快速入门
1. 下载Bootstrap
2. 将Bootstrap中三个文件夹复制项目中
3. 创建html页面,引入必要的资源文件
基础格式
①定义容器 将class值设为 container 两边留白 / container-fluid 每行格数占满整行
②定义行 在设置一个容器将class值设为 row
③定义元素所占格数
定义标签元素并设class值为 col - 适用像素 - 该元素所占格数 class名
使用像素种类:
lg:大屏幕
md:中屏幕
sm:小屏幕
xs:手机屏幕
注:每行格数上限为12,占满后自动换行
适用像素向大兼容,如col - xs - 1 将屏幕放大 此元素所占仍为一格
无法向小兼容,无论所占格数为多少,将屏幕缩小至适用像素以下后每个元素 都占一行
步骤:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Bootstrap 101 Template</title>
<link href="css/bootstrap.min.css" rel="stylesheet">
<script src="js/jquery-3.2.1.min.js"></script>
<script src="js/bootstrap.min.js"></script>
<style>
.gos{
border: 1px solid red;
}
</style>
</head>
<body>
<div class="container/container-fluid"> 定义容器
<div class="row"> 定义行(一行为12格)
<div class="col-sm-1 gos">1</div> 设置元素并设置其所占格数
<div class="col-lg-1 gos">1</div>
</div>
</div>
</body>
</html>
图片整行样式
<img class = img-responsive"">
边框样式
<div class="thumbnail">
具体各种Bootstrap样式模板进入索引观看
————————————————————————————————————————————
XML
概念:标签都是自定义的。 <user> <student>
功能 存储数据
配置文件
在网络中传输
xml与html的区别
1. xml标签都是自定义的,html标签是预定义。
2. xml的语法严格,html语法松散
3. xml是存储数据的,html是展示数据
语法:
基本语法:
xml文档的后缀名 .xml
xml第一行必须定义为文档声明
xml文档中有且仅有一个根标签
属性值必须使用引号(单双都可)引起来
标签必须正确关闭
xml标签名称区分大小写
快速入门:
<?xml version='1.0' ?>
<users>
<user id='1'>
<name>zhangsan</name>
<age>23</age>
<gender>male</gender>
</user>
<user id='2'>
<name>lisi</name>
<age>24</age>
<gender>female</gender>
</user>
</users>
组成部分:
1. 文档声明
1. 格式:<?xml 属性列表 ?>
2. 属性列表:
version:版本号,必须的属性
encoding:编码方式。默认值:ISO-8859-1
standalone:是否独立 yes/no
yes:不依赖其他文件
no:依赖其他文件
2. 指令(了解):结合css的
<?xml-stylesheet type="text/css" href="a.css" ?>
3. 标签:标签名称自定义的
规则:
名称可以包含字母、数字以及其他的字符
名称不能以数字或者标点符号开始
名称不能以字母 xml(或者 XML、Xml 等等)开始
名称不能包含空格
5. 文本:
CDATA区:在该区域中的数据会被原样展示
若要使用逻辑语句.则需要放入CDATA 区中
格式: <![CDATA[ 逻辑语句]]>
约束:规定xml文档的书写规则
分类:
DTD:一种简单的约束技术
Schema:一种复杂的约束技术
DTD:(dtd文件)
引入dtd文档到xml文档中
内部dtd:将约束规则定义在xml文档中
<!DOCTYPE 根标签名 SYSTEM [ DTD约束语句 ]>
外部dtd:将约束的规则定义在外部的dtd文件中
本地:<!DOCTYPE 根标签名 SYSTEM "dtd文件的位置">
网络:<!DOCTYPE 根标签名 PUBLIC "dtd文件名字" "dtd文件的位置URL">
Schema: (xsd文件)
引入:
1.填写xml文档的根元素
2.引入xsi前缀. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3.引入xsd文件命名空间. xsi:schemaLocation="http://www.itcast.cn/xml student.xsd"
4.为每一个xsd约束声明一个前缀,作为标识 xmlns="http://www.itcast.cn/xml"
<students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns(此处可加便签)="http://www.itcast.cn/xml"
xsi:schemaLocation="http://www.itcast.cn/xml student.xsd">
注明调用该标签的元素被改标签的schema约束
解析:操作xml文档,将文档中的数据读取到内存中
解析xml的方式:
1. DOM:将标记语言文档一次性加载进内存,在内存中形成一颗dom树
优点:操作方便,可以对文档进行CRUD的所有操作
缺点:占内存
2. SAX:逐行读取,基于事件驱动的。
优点:不占内存。
缺点:只能读取,不能增删改
xml常见的解析器:
JAXP:sun公司提供的解析器,支持dom和sax两种思想
DOM4J:一款非常优秀的解析器
PULL:Android操作系统内置的解析器,sax方式的。
Jsoup:jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
Jsoup:jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
快速入门:
步骤:
1. 导入jar包
2. 获取Document对象
3. 获取对应的标签Element对象
4. 获取数据
代码:
获取xml文件路径
String path = JsoupDemo1.class.getClassLoader().getResource("student.xml").getPath();
解析xml文档,加载文档进内存,获取dom树--->Document
Document document = Jsoup.parse(new File(path), "utf-8");
获取元素对象 Element
Elements elements = document.getElementsByTag("name");
对象的使用:
1. 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的文档对象
2. Document:文档对象。代表内存中的dom树
获取Element对象
getElementById(String id):根据id属性值获取唯一的element对象
getElementsByTag(String tagName):根据标签名称获取元素对象集合
getElementsByAttribute(String key):根据属性名称获取元素对象集合
getElementsByAttributeValue(String key, String value):根据对应的属性名和属性值获取元素对象集合
3. Elements:元素Element对象的集合。可以当做 ArrayList<Element>来使用
4. 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():获取标签体的所有内容(包括字标签的字符串内容)
5. Node:节点对象
是Document和Element的父类
快捷查询方式
selector:选择器
使用的方法:Elements select(String cssQuery(选择器语句))
选择器语句:
div
id
.class
div p
div > p
div[class = ' cl ' ]
XPath:XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子 集)文档中某部分位置的语言
使用Jsoup的Xpath需要额外导入jar包。
查询w3cshool参考手册,使用xpath的语法完成查询
———————————————————————————————————————————
web服务器软件:Tomcat
服务器:安装了服务器软件的计算机
服务器软件:接收用户的请求,处理请求,做出响应
web服务器软件:接收用户的请求,处理请求,做出响应。
在web服务器软件中,可以部署web项目,让用户通过浏览器来访问这些项目
web容器
常见的java相关的web服务器软件:
webLogic:oracle公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
webSphere:IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
JBOSS:JBOSS公司的,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
Tomcat:Apache基金组织,中小型的JavaEE服务器,仅仅支持少量的JavaEE规范servlet/jsp。开源的,免费的。
JavaEE:Java语言在企业级开发中使用的技术规范的总和,一共规定了13项大的规范
Tomcat:web服务器软件
1. 下载:http://tomcat.apache.org/
2. 安装:解压压缩包即可。
- 注意:安装目录建议不要有中文和空格
3. 卸载:删除目录就行了
4. 启动:
bin/startup.bat ,双击运行该文件即可
访问:浏览器输入:http://localhost:8080 回车访问自己
http://别人的ip:8080 访问别人
6. 配置:
部署项目的方式:
1. 直接将项目放到webapps目录下即可。
hello:项目的访问路径-->虚拟目录
简化部署:将项目打成一个war包,再将war包放置到webapps目录下。
- war包会自动解压缩
2. 配置conf/server.xml文件
在<Host>标签体中配置
<Context docBase="D:\hello" path="/hehe" />
docBase:项目存放的路径
path:虚拟目录
3. 在conf\Catalina\localhost创建任意名称的xml文件。在文件中编写
<Context docBase="D:\hello" />
虚拟目录:xml文件的名称
静态项目和动态项目:
目录结构
java动态项目的目录结构:
-- 项目的根目录
-- WEB-INF目录:
-- web.xml:web项目的核心配置文件
-- classes目录:放置字节码文件的目录
-- lib目录:放置依赖的jar包
————————————————————————————————————————————
Servlet: server applet
概念:运行在服务器端的小程序
Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。
将来我们自定义一个类,实现Servlet接口,复写方法。
若无法使用server相关结构则导入tomcat中lib目录下server的jar包
快速入门:
1. 创建JavaEE项目
2. 定义一个类,实现Servlet接口
3. 实现接口中的抽象方法
4. 配置Servlet
在web.xml中配置:
<servlet>
<servlet-name>demo1</servlet-name>
<servlet-class>cn.itcast.web.servlet.ServletDemo1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo1</servlet-name>
<url-pattern>/demo1</url-pattern>
</servlet-mapping>
执行原理:
1. 当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
2. 查找web.xml文件,是否有对应的<url-pattern>标签体内容。
3. 如果有,则在找到对应的<servlet-class>全类名
4. tomcat会将字节码文件加载进内存,并且创建其对象
5. 调用其方法
Servlet中的生命周期方法:
1. 被创建:执行init方法,只执行一次
Servlet什么时候被创建?
默认情况下,第一次被访问时,Servlet被创建
可以配置执行Servlet的创建时机。
在<servlet>标签下配置
1. 第一次被访问时,创建
<load-on-startup>的值为负数
2. 在服务器启动时,创建
<load-on-startup>的值为0或正整数
Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的
多个用户同时访问时,可能存在线程安全问题。
解决:尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要对修改值
2. 提供服务:执行service方法,执行多次
每次访问Servlet时,Service方法都会被调用一次。
3. 被销毁:执行destroy方法,只执行一次
Servlet被销毁时执行。服务器关闭时,Servlet被销毁
只有服务器正常关闭时,才会执行destroy方法。
destroy方法在Servlet被销毁之前执行,一般用于释放资源
Servlet3.0:
好处:
支持注解配置。可以不需要web.xml了。
步骤:
1. 创建JavaEE项目,选择Servlet的版本3.0以上,可以不创建web.xml
2. 定义一个类,实现Servlet接口
3. 复写方法
4. 在类上使用@WebServlet注解,进行配置
Servlet的体系结构
Servlet -- 接口
|
GenericServlet -- 抽象类
|
HttpServlet -- 抽象类
GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象
将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可
HttpServlet:对http协议的一种封装,简化操作
定义类继承HttpServlet
复写doGet/doPost方法
Servlet相关配置
1. urlpartten:Servlet访问路径
一个Servlet可以定义多个访问路径 : @WebServlet({"/d4","/dd4","/ddd4"})
路径定义规则:
/xxx:路径匹配
/xxx/xxx:多层路径,目录结构
*.do:扩展名匹配,后缀名可任意选择
————————————————————————————————————————————
HTTP
概念:Hyper Text Transfer Protocol 超文本传输协议
传输协议:定义了,客户端和服务器端通信时,发送数据的格式
特点:
1. 基于TCP/IP的高级协议
2. 默认端口号:80
3. 基于请求/响应模型的:一次请求对应一次响应
4. 无状态的:每次请求之间相互独立,不能交互数据
历史版本:
1.0:每一次请求响应都会建立新的连接
1.1:复用连接
请求消息数据格式
1. 请求行
请求方式 请求url 请求协议/版本
GET /login.html HTTP/1.1
请求方式:
HTTP协议有7中请求方式,常用的有2种
GET:
1. 请求参数在请求行中,在url后。
2. 请求的url长度有限制的
3. 不太安全
POST:
1. 请求参数在请求体中
2. 请求的url长度没有限制的
3. 相对安全
2. 请求头:客户端浏览器告诉服务器一些信息
请求头名称: 请求头值
常见的请求头:
1. User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息
可以在服务器端获取该头的信息,解决浏览器的兼容性问题
2. Referer:http://localhost/login.html
告诉服务器,我(当前请求)从哪里来?
作用:
1. 防盗链:
2. 统计工作:
3. 请求空行
空行,就是用于分割POST请求的请求头,和请求体的。
4. 请求体(正文):
封装POST请求消息的请求参数的
字符串格式:
POST /login.html HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://localhost/login.html
Connection: keep-alive
Upgrade-Insecure-Requests: 1
username=zhangsan