Mysql数据库

<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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容