JavaWeb总结

JavaWeb总结

1、HTML

标签


*有序列表

<ol type="A" start="5">
	<li>睁眼</li>
	<li> 看手机</li>
	<li> 穿衣服</li>
	<li> 洗漱</li>
</ol>

*无序列表

<ul>
	<li>睁眼</li>
	<li> 看手机</li>
	<li> 穿衣服</li>
	<li> 洗漱</li>
</ul>

*连接标签

//当前页打开(也是默认值)
<a href="http://www.itcast.cn" target="_self">点我</a>
//在空白页面打开
<a href="http://www.itcast.cn" target="_blank">点我</a>

*表格标签

		<table>
        <thead>
            <caption></caption>
            <tr>
                <th></th>
                <th></th>
                <th></th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td></td>
                <td></td>
                <td></td>
            </tr>
        </tbody>
        <tfoot>
            <tr>
                <td></td>
                <td></td>
                <td></td>
            </tr>
        </tfoot>
    	</table>

*表单标签

	* 表单项标签:
		* input:
			* type属性:
				* text:文本输入框,默认值
					* placeholder:指定输入框的提示信息,当输入框的内容发生变化,会自动清空提示信息
				* password:密码输入框
				* radio:单选框
					* 注意:
						1. 要想让多个单选框实现单选的效果,则多个单选框的name属性值必须一样。
						2. 一般会给每一个单选框提供value属性,指定其被选中后提交的值
						3. checked属性,可以指定默认值
				* checkbox:复选框
					* 注意:
						1. 一般会给每一个单选框提供value属性,指定其被选中后提交的值
						2. checked属性,可以指定默认值

				* file:文件选择框
				* hidden:隐藏域,用于提交一些信息。
                * submit:提交按钮。可以提交表单
                	*value:按钮上显示的内容
                * button:普通按钮
                	*value:按钮上显示的内容
                * image:图片提交按钮
                	* src属性指定图片的路径	

		* label:指定输入项的文字描述信息
			* 注意:
			* label的for属性一般会和 input 的 id属性值 对应。如果对应了,则点击label区域,会让input输入框获取焦点。如:
			<label for="age">年龄:</label>
            <input type="text" name="age" placeholder="请输入年龄" />
			
			
		* select: 下拉列表
			* 子元素:<option value="值1" selected>指定提交的内容<option/>   默认选中
		* textarea:文本域
			* cols:指定列数,每一行有多少个字符
			* rows:默认多少行。

2、CSS

CSS与HTML结合方式

1. 内联样式
	* 在标签内使用style属性指定css代码
	* 如:<div style="color:red;">hello css</div>
2. 内部样式
	* 在head标签内,定义style标签,style标签的标签体内容就是css代码
	* 如:
    <style>
    div{
    color:blue;
    }
	</style>
3. 外部样式
	1. 定义css资源文件。
	2. 在head标签内,定义link标签,引入外部的资源文件
	* 如:
	* a.css文件:
	div{
	color:green;
	}
	<link rel="stylesheet" href="css/a.css">
* 注意:
* 1,2,3种方式 css作用范围越来越大
* 1方式不常用,后期常用2,3
* 第3种格式可以写为:
<style>
@import "css/a.css";
</style>

选择器(选择的是标签)

1、基础选择器
	1. id选择器:优先级最高
		* 语法:#id属性值{}       如#div1{}
	2. 类选择器:优先级其次
		* 语法:.class属性值{}	如.cls1{}
	3. 元素选择器:优先级最低
		* 语法: 标签名称{}	    如div{}
2、扩展选择器
	1. 选择所有元素:所有元素都选择
		* 语法: *{}
	2. 并集选择器:
		* 选择器1,选择器2{}
	3. 子选择器:筛选选择器1元素下的选择器2元素
		* 语法:  选择器1 选择器2{}
	4. 父选择器:筛选选择器2的父元素选择器1
		* 语法:  选择器1 > 选择器2{}
	5. 属性选择器:选择元素名称,属性名=属性值的元素
		* 语法:  元素名称[属性名="属性值"]{}
	6. 伪类选择器:选择一些元素具有的状态
		* 语法: 元素:状态{}
		* 如: <a>
		* 状态:
        * link:初始化的状态
        * visited:被访问过的状态
        * active:正在访问状态
        * hover:鼠标悬浮状态
3、属性(在选择器的大括号内)
	1. 字体、文本
        * font-size:字体大小
        * color:文本颜色
        * text-align:对其方式
        * line-height:行高 
	2. 背景
		* background:
	3. 边框
		* border:设置边框,符合属性
	4. 尺寸
    * width:宽度
    * height:高度
	5. 盒子模型:控制布局
    * margin:外边距
    * padding:内边距
    	* 默认情况下内边距会影响整个盒子的大小
    	* box-sizing: border-box;  设置盒子的属性,让width和height就是最终盒子的大小
    * float:浮动
        * left
        * right

3、JavaScript

与HTML结合方式

1. 内部JS:
	* 定义<script>,标签体内容就是js代码
2. 外部JS:
	* 定义<script>,通过src属性引入外部的js文件
	*<script src="js/a.js"></script>
* 注意:
	1. <script>可以定义在html页面的任何地方。但是定义的位置会影响执行顺序。
	2. <script>可以定义多个。

基本语法

1、注释
	1. 单行注释://注释内容
	2. 多行注释:/*注释内容*/
2. 数据类型:
	1. 原始数据类型(基本数据类型):
        1. number:数字。 整数/小数/NaN(not a number 一个不是数字的数字类型)
        2. string:字符串。 字符串  "abc" "a" 'abc'
        3. boolean: true和false
        4. null:一个对象为空的占位符
        5. undefined:未定义。如果一个变量没有给初始化值,则会被默认赋值为undefined
	2. 引用数据类型:对象	
3、typeof()运算符
	用于获取变量的类型,返回值类型为字符串,如:
5. 运算符
1. 一元运算符:只有一个运算数的运算符(与java相同)
	* 注意:在JS中,如果运算数不是运算符所要求的类型,那么js引擎会自动的将运算数进行类型转换
		* string转number:按照字面值转换。如果字面值不是数字,则转为NaN(不是数字的数字)
		* boolean转number:true转为1,false转为0
2. 算数运算符
3. 赋值运算符
4. 比较运算符
	* ===:全等于。在比较之前,先判断类型,如果类型不一样,则直接返回false
5. 逻辑运算符
	&& || !
	* 其他类型转boolean:
        1. number:0或NaN为假,其他为真
        2. string:除了空字符串(""),其他都是true
        3. null&undefined:都是false
        4. 对象:所有对象都为true

6. 三元运算符
	var c = a > b ? 1:0;
6. 流程控制语句:
	1. if...else...
	2. switch:
		* 在JS中,switch语句可以接受任意的原始数据类型
	3. while
	4. do...while
	5. for
7. JS特殊语法:
	1. 语句以;结尾,如果一行只有一条语句则 ;可以省略 (不建议)
	2. 变量的定义使用var关键字,也可以不使用
		* 用: 定义的变量是局部变量
		* 不用:定义的变量是全局变量(不建议)

基本对象

1. Function:函数(方法)对象
	1. 创建:
		1. var fun = new Function(形式参数列表,方法体);  //忘掉吧
		2. 
			function 方法名称(形式参数列表){
			方法体
			}
		3. 
			var 方法名 = function(形式参数列表){
			方法体
			}
	2. 方法:
	3. 属性:
	length:代表形参的个数
	4. 特点:
        1. 方法定义是,形参的类型不用写,返回值类型也不写。
        2. 方法是一个对象,如果定义名称相同的方法,会覆盖
        3. 在JS中,方法的调用只与方法的名称有关,和参数列表无关
        4. 在方法声明中有一个隐藏的内置对象(数组),arguments,封装所有的实际参数
	5. 调用:
		方法名称(实际参数列表);
2. Array:数组对象
	1. 创建:
		1. var arr = new Array(元素列表);
		2. var arr = new Array(默认长度);
		3. var arr = [元素列表];
	2. 方法
        join(参数):将数组中的元素按照指定的分隔符拼接为字符串
        push()	向数组的末尾添加一个或更多元素,并返回新的长度。
	3. 属性
		length:数组的长度
	4. 特点:
        1. JS中,数组元素的类型可变的。
        2. JS中,数组长度可变的。
3. Boolean
4. Date:日期对象
	1. 创建:
		var date = new Date();
	2. 方法:
		toLocaleString():返回当前date对象对应的时间本地字符串格式
		getTime():获取毫秒值。返回当前如期对象描述的时间到1970年1月1日零点的毫秒值差
5. Math:数学对象
	1. 创建:
		* 特点:Math对象不用创建,直接使用。  Math.方法名();
	2. 方法:
        random():返回 0 ~ 1 之间的随机数。 含0不含1
        ceil(x):对数进行上舍入。
        floor(x):对数进行下舍入。
        round(x):把数四舍五入为最接近的整数。
	3. 属性:
		PI
6. Number
7. String
8. RegExp:正则表达式对象
	1. 正则表达式:定义字符串的组成规则。
		1. 单个字符:[]
			如: [a] [ab] [a-zA-Z0-9_]
			* 特殊符号代表特殊含义的单个字符:
				\d:单个数字字符 [0-9]
				\w:单个单词字符[a-zA-Z0-9_]
		2. 量词符号:
			?:表示出现0次或1次
			*:表示出现0次或多次			如\w*
			+:出现1次或多次
			{m,n}:表示 m<= 数量 <= n		如\w{6,12}
			* m如果缺省: {,n}:最多n次
			* n如果缺省:{m,} 最少m次
		3. 开始结束符号
            * ^:开始
            * $:结束
	2. 正则对象:
		1. 创建
			1. var reg = new RegExp("正则表达式");
			2. var reg = /正则表达式/;
		2. 方法	
			1. test(参数):验证指定的字符串是否符合正则定义的规范	
9. Global
	1. 特点:全局对象,这个Global中封装的方法不需要对象就可以直接调用。  方法名();
	2. 方法:
		encodeURI():url编码
		decodeURI():url解码
		encodeURIComponent():url编码,编码的字符更多
		decodeURIComponent():url解码
		parseInt():将字符串转为数字
			* 逐一判断每一个字符是否是数字,直到不是数字为止,将前边数字部分转为number
		isNaN():判断一个值是否是NaN
			* NaN六亲不认,连自己都不认。NaN参与的==比较全部为false
		eval():将 JavaScript 字符串,并把它作为脚本代码来执行。
	3. URL编码
		传智播客 =  %E4%BC%A0%E6%99%BA%E6%92%AD%E5%AE%A2

JavaScript之BOM

1. 概念:Browser Object Model 浏览器对象模型
	* 将浏览器的各个组成部分封装成对象。
2. 组成:
	* Window:窗口对象
	* Navigator:浏览器对象
	* Screen:显示器屏幕对象
	* History:历史记录对象
	* Location:地址栏对象
3. Window:窗口对象
	1. 创建
		不需要创建,直接使用如:  window.close()
		window可以省略,直接调用方法名。
	2. 方法(一般与事件绑定)
		1. 与弹出框有关的方法:
			alert()	显示带有一段消息和一个确认按钮的警告框。
			confirm()	显示带有一段消息以及确认按钮和取消按钮的对话框。
				* 如果用户点击确定按钮,则方法返回true
				* 如果用户点击取消按钮,则方法返回false
			prompt()	显示可提示用户输入的对话框。
				* 返回值:获取用户输入的值
		2. 与打开关闭有关的方法:
			close()	关闭浏览器窗口。
				* 谁调用我 ,我关谁
			open()	打开一个新的浏览器窗口
				* 返回新的Window对象
		3. 与定时器有关的方式
			setTimeout()	在指定的毫秒数后调用函数或计算表达式。
				* 参数:
					1. js代码或者方法对象
					2. 毫秒值
				* 返回值:唯一标识,用于取消定时器
			clearTimeout()	取消由 setTimeout() 方法设置的 timeout。
				如var id = setTimeout(fun,300); clearTimeout(id);
			setInterval()	按照指定的周期(以毫秒计)来调用函数或计算表达式。
			clearInterval()	取消由 setInterval() 设置的 timeout。
	3. 属性:
		1. 获取其他BOM对象:
			history
			location
			Navigator
			Screen:
		2. 获取DOM对象
			document
	4. 特点
		* Window对象不需要创建可以直接使用 window使用。 window.方法名();
		* window引用可以省略。  方法名();
4. Location:地址栏对象
	1. 创建(获取):
		1. window.location
		2. location     (直接内置在之中)

	2. 方法:(一般与事件绑定)
		* reload()	重新加载当前文档。刷新
	3. 属性
		* href	设置或返回完整的 URL。(URL编码后的样子)
5. History:历史记录对象
	1. 创建(获取):
		1. window.history
		2. history					(直接内置在script中)
	2. 方法:(一般与事件绑定)
		* back()	加载 history 列表中的前一个 URL。
		* forward()	加载 history 列表中的下一个 URL。
		* go(参数)	加载 history 列表中的某个具体页面。
			* 参数:
				* 正数:前进几个历史记录
				* 负数:后退几个历史记录
	3. 属性:
		* length	返回当前窗口历史列表中的 URL 数量。

JavaScript之DOM

1 概念: Document Object Model 文档对象模型
	* 将标记语言文档的各个组成部分,封装为对象。可以使用这些对象,对标记语言文档进行CRUD的动态操作
2 W3C DOM 标准被分为 3 个不同的部分:
	* 核心 DOM - 针对任何结构化文档的标准模型
		* Document:文档对象
		* Element:元素对象
		* Attribute:属性对象
		* Text:文本对象
		* Comment:注释对象
		* Node:节点对象,其他5个的父对象
	* XML DOM - 针对 XML 文档的标准模型
	* HTML DOM - 针对 HTML 文档的标准模型
3 核心DOM模型:
	1. Document:文档对象
		1. 创建(获取):在html dom模型中可以使用window对象来获取
			1. window.document
			2. document
		2. 方法:
			1. 获取Element对象:
				1. getElementById()	: 根据id属性值获取元素对象。id属性值一般唯一
				2. getElementsByTagName():根据元素名称获取元素对象们。返回值是一个数组
				3. getElementsByClassName():根据Class属性值获取元素对象们。返回值是一个数组
				4. getElementsByName(): 根据name属性值获取元素对象们。返回值是一个数组
			2. 创建其他DOM对象:
				createAttribute(name)
                createComment()
                createElement()
                createTextNode()
		3. 属性
	2. Element:元素对象
		1. 获取/创建:通过document来获取和创建:
			document.createElement();
		2. 方法:
			1. removeAttribute():删除属性。
			2. setAttribute():设置属性。
	3. Node:节点对象,其他5个的父对象
		* 特点:所有dom对象都可以被认为是一个节点
		* 方法:
			* CRUD dom树:
				* appendChild():向节点的子节点列表的结尾添加新的子节点。参数为结点对象
				* removeChild()	:删除(并返回)当前节点的指定子节点。参数为结点对象
				* replaceChild():用新节点替换一个子节点。参数为结点对象
		* 属性:
			* parentNode 返回节点的父节点。
4 HTML DOM
	*属性
		1. innerHTML:用于获取或设置标签体内容(结点对象的属性)
		2. 设置元素样式
			*style:   用于设置元素属性(结点对象的属性),如:
				var div1=document.getElementById("div1");
				div1.style.border="1px solid red";
			*提前定义好类选择器的样式,通过元素的className属性来设置其class属性值。如:
				<style>
					.d1{border: 1px solid red;}
				</style>
				var div1=document.getElementById("div1");
				div1.className=d1;

JavaScript之事件监听机制

* 概念:某些组件被执行了某些操作后,触发某些代码的执行。	
	* 事件:某些操作。如: 单击,双击,键盘按下了,鼠标移动了
	* 事件源:组件。如: 按钮 文本输入框,事件一般都是作用在事件源上。
	* 监听器:代码。
	* 注册监听:将事件,事件源,监听器结合在一起。 当事件源上发生了某个事件,则触发执行某个监听器代码。
	* 常见的事件:
1. 点击事件:(点击组件会触发)
	1. onclick:单击事件
	2. ondblclick:双击事件
2. 焦点事件:(获得或失去焦点会触发)
	1. onblur:失去焦点      (文本框上的属性,一般用它来表单验证)
	2. onfocus:元素获得焦点。
3. 加载事件:
	1. onload:一张页面或一幅图像完成加载。加载完后会触发效果
4. 鼠标事件:(是在组件上进行这些操作,所以这些属性都是组件的属性)
	1. onmousedown	鼠标按钮被按下。
	2. onmouseup	鼠标按键被松开。
	3. onmousemove	鼠标被移动。
	4. onmouseover	鼠标移到某元素之上。
	5. onmouseout	鼠标从某元素移开。
5. 键盘事件:
	1. onkeydown	某个键盘按键被按下。	
	2. onkeyup		某个键盘按键被松开。
	3. onkeypress	某个键盘按键被按下并松开。
6. 选择和改变     一般是用于文本域里
	1. onchange	域的内容被改变。
	2. onselect	文本被选中。
7. 表单事件:
	1. onsubmit	确认按钮被点击。
		*方法要返回false才能阻止表单被提交
	2. onreset	重置按钮被点击。
	
例子
	document.getElementById("username").onblur = function(){
    	alert("失去焦点了...");
    }
    window.onload = function(){}    //窗口加载完执行,里面可以定义别的事件

4、JQuery

快速入门

1. 概念: 一个JavaScript框架。简化JS开发
	* JavaScript框架:本质上就是一些js文件,封装了js的原生代码而已
2. 快速入门
	1. 步骤:
		1. 下载JQuery
			* jquery-xxx.js 与 jquery-xxx.min.js区别:
				1. jquery-xxx.js:开发版本。给程序员看的,有良好的缩进和注释。体积大一些
				2. jquery-xxx.min.js:生产版本。程序中使用,没有缩进。体积小一些。程序加载更快

		2. 导入JQuery的js文件:导入min.js文件
		3. 使用
			var div1 = $("#div1");
			alert(div1.html());

JQuery对象与JavaScript对象相互转换

* jq -- > js : jq对象[索引] 或者 jq对象.get(索引)
* js -- > jq : $(js对象)

JQuery选择器

1. 基本选择器
	1. 标签选择器(元素选择器)
		* 语法: $("html标签名") 获得所有匹配标签名称的元素
	2. id选择器 
		* 语法: $("#id的属性值") 获得与指定id属性值匹配的元素
	3. 类选择器
		* 语法: $(".class的属性值") 获得与指定的class属性值匹配的元素
	4. 并集选择器:
		* 语法: $("选择器1,选择器2....") 获取多个选择器选中的所有元素
2. 层级选择器
	1. 后代选择器
		* 语法: $("A B ") 选择A元素内部的所有B元素		
	2. 子选择器
		* 语法: $("A > B") 选择A元素内部的所有B子元素
3. 属性选择器
	1. 属性名称选择器 
		* 语法: $("A[属性名]") 包含指定属性的选择器
	2. 属性选择器
		* 语法: $("A[属性名='值']") 包含指定属性等于指定值的选择器
3. 复合属性选择器
	* 语法: $("A[属性名='值'][]...") 包含多个属性条件的选择器
4. 过滤选择器
	1. 首元素选择器 
		* 语法: :first 获得选择的元素中的第一个元素
	2. 尾元素选择器 
		* 语法: :last 获得选择的元素中的最后一个元素
	3. 非元素选择器
		* 语法: :not(selector) 不包括指定内容的元素
	4. 偶数选择器
		* 语法: :even 偶数,从 0 开始计数
	5. 奇数选择器
		* 语法: :odd 奇数,从 0 开始计数
	6. 等于索引选择器
		* 语法: :eq(index) 指定索引元素
	7. 大于索引选择器 
		* 语法: :gt(index) 大于指定索引元素
	8. 小于索引选择器 
		* 语法: :lt(index) 小于指定索引元素
	9. 标题选择器
		* 语法: :header 获得标题(h1~h6)元素,固定写法
	例子:
		$("div:first").css("backgroundColor","pink");
5. 表单过滤选择器
	1. 可用元素选择器 
		* 语法: :enabled 获得可用元素
	2. 不可用元素选择器 
		* 语法: :disabled 获得不可用元素
	3. 选中选择器 
		* 语法: :checked 获得单选/复选框选中的元素
	4. 选中选择器 
		* 语法: :selected 获得下拉框选中的元素

jQuery之DOM操作

1. 内容操作
	1. html(): 获取/设置元素的标签体内容   <a><font>内容</font></a>  --> <font>内容</font>
		*无参数:返回标签体内容		
        *有参数:参数代表要设置的标签体内容
	2. text(): 获取/设置元素的标签体纯文本内容   <a><font>内容</font></a> --> 内容
	3. val(): 获取/设置元素的value属性值
2. 属性操作
	1. 通用属性操作
		1. attr(): 获取/设置元素的属性
			*1个参数:获取属性值(参数代表属性)
			*2个参数:设置属性(属性,属性值)
		2. removeAttr():删除属性
		3. prop():获取/设置元素的属性
		4. removeProp():删除属性
		* attr和prop区别?
			1. 如果操作的是元素的固有属性,则建议使用prop
			2. 如果操作的是元素自定义的属性,则建议使用attr
	2. 对class属性操作    (用于添加样式)
		1. addClass():添加class属性值
		2. removeClass():删除class属性值
		3. toggleClass():切换class属性
			* toggleClass("one"): 
				* 判断如果元素对象上存在class="one",则将属性值one删除掉。  
				* 如果元素对象上不存在class="one",则添加
		4. css():添加或者获取样式属性
			*1个参数:获取参数对应的样式属性
			*2个参数:添加或修改样式属性(属性,属性值)
			如:$("#one").css("backgroundColor","green");
		例子:
		$("#one").addClass("second");
 3. CRUD操作:
 	1. append():父元素将子元素追加到末尾
 		* 对象1.append(对象2): 将对象2添加到对象1元素内部,并且在末尾
 	2. prepend():父元素将子元素追加到开头
 		* 对象1.prepend(对象2):将对象2添加到对象1元素内部,并且在开头
 	3. appendTo():
		* 对象1.appendTo(对象2):将对象1添加到对象2内部,并且在末尾
 	4. prependTo():
 		* 对象1.prependTo(对象2):将对象1添加到对象2内部,并且在开头
 	5. after():添加元素到元素后边
 		* 对象1.after(对象2): 将对象1的后边设置为对象2。对象1和对象2是兄弟关系
 	6. before():添加元素到元素前边
 		* 对象1.before(对象2): 将对象1的前面设置为对象1。对象1和对象2是兄弟关系
 	7. insertAfter()
 		* 对象1.insertAfter(对象2):将对象1插入到对象2后边。对象1和对象2是兄弟关系
 	8. insertBefore()
 		* 对象1.insertBefore(对象2): 将对象1插入到对象2前边。对象1和对象2是兄弟关系
	9. remove():移除元素
		* 对象.remove():将本对象删除掉
	10. empty():清空元素的所有后代元素。
		* 对象.empty():将对象的后代元素全部清空,但是保留当前对象以及其属性节点	

JQuery之动画效果

用于对组件的显示和隐藏
1. 默认显示和隐藏方式
	1. show([speed,[easing],[fn]])
		1. 参数:
			1. speed:动画的速度。三个预定义的值("slow","normal", "fast")或表示动画时长的毫秒数值(如:1000)
			2. easing:用来指定切换效果,默认是"swing",可用参数"linear"
				* swing:动画执行时效果是 先慢,中间快,最后又慢
				* linear:动画执行时速度是匀速的
			3. fn:在动画完成时执行的函数,每个元素执行一次。

	2. hide([speed,[easing],[fn]])
	3. toggle([speed],[easing],[fn])
		
2. 滑动显示和隐藏方式
	1. slideDown([speed],[easing],[fn])   显示
	2. slideUp([speed,[easing],[fn]])		隐藏
	3. slideToggle([speed],[easing],[fn])

3. 淡入淡出显示和隐藏方式
	1. fadeIn([speed],[easing],[fn])
	2. fadeOut([speed],[easing],[fn])
	3. fadeToggle([speed,[easing],[fn]])
例子:
	$("#showDiv").fadeIn("slow");			

JQuery之遍历

1. js的遍历方式
	* for(初始化值;循环结束条件;步长)
2. jq的遍历方式
	1. jq对象.each(callback)
		1. 语法:
			jquery对象.each(function(index,element){});
				* index:就是元素在集合中的索引
				* element:就是集合中的每一个元素对象
				* this:集合中的每一个元素对象(转化为jq对象则是:$(this)
		2. 回调函数返回值:
			* true:如果当前function返回为false,则结束循环(break)。
			* false:如果当前function返回为true,则结束本次循环,继续下次循环(continue)
		例子:
		var citys = $("#city li");
		 citys.each(function () {
                    alert($(this).html());
                    });
         citys.each(function (index,element) {
                   	alert(index+":"+$(element).html());
                    if("上海" == $(element).html()){ 
                        return true;
                    }
                    alert(index+":"+$(element).html());
                	});
	2. $.each(object, [callback])
		例子:
        	$.each(citys,function () {
            		alert($(this).html());
                	});
	3. for..of: jquery 3.0 版本之后提供的方式
		for(元素对象 of 容器对象)
		例子:
			for(li of citys){
                    alert($(li).html());
                	}

JQuery之事件绑定

1. jquery标准的绑定方式
	* jq对象.事件方法(回调函数);
	* 注:如果调用事件方法,不传递回调函数,则会触发浏览器默认行为。
	* 表单对象.submit();//让表单提交(意思说不传回调函数参数就默认是提交)
	例子:
		$("#name").click(function () {
               alert("我被点击了...")
           });
2. on绑定事件/off解除绑定
	* jq对象.on("事件名称",回调函数)
	* jq对象.off("事件名称")
	* 如果off方法不传递任何参数,则将组件上的所有事件全部解绑
	例子:
		 $("#btn").on("click",function () {
               alert("我被点击了。。。")
           }) ;
3. 事件切换:toggle
	* jq对象.toggle(fn1,fn2...)
	* 当单击jq对象对应的组件后,会执行fn1.第二次点击会执行fn2.....

* 注意:1.9版本 .toggle() 方法删除,jQuery Migrate(迁移)插件可以恢复此功能。

JQuery之入口函数

* $(function () {
	});
* window.onload  和 $(function) 区别
	* window.onload 只能定义一次,如果定义多次,后边的会将前边的覆盖掉
	* $(function)可以定义多次的。

JQuery之插件

1. $.fn.extend(object) 
	* 增强通过Jquery获取的对象的功能  $("#id")
	例子:
		$.fn.extend({
            //定义了一个check()方法。所有的jq对象都可以调用该方法
            check:function () {
               //让复选框选中
                //this:调用该方法的jq对象
                this.prop("checked",true);
            },
            uncheck:function () {
                //让复选框不选中
                this.prop("checked",false);
            }      
        });
2. $.extend(object)
	* 增强JQeury对象自身的功能  $或者jQuery	
	例子:
		$.extend({
            max:function (a,b) {
                //返回两数中的较大值
                return a >= b ? a:b;
            },
            min:function (a,b) {
                //返回两数中的较小值
                return a <= b ? a:b;
            } 
        });
        //调用
        var min = $.min(1,2);

5、BootStrap:前端框架

快速入门

1. 快速入门
	1. 下载Bootstrap
	2. 在项目中将这三个文件夹复制
	3. 创建html页面,引入必要的资源文件
	
	<!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">
	    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
	    <title>Bootstrap HelloWorld</title>
	
	    <!-- Bootstrap -->
	    <link href="css/bootstrap.min.css" rel="stylesheet">
        <!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
		    <script src="js/jquery-3.2.1.min.js"></script>
		    <!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
		    <script src="js/bootstrap.min.js"></script>
		</head>
		<body>
		<h1>你好,世界!</h1>
		</body>
	</html>

BootStrap之响应式布局

* 概念:同一套页面可以兼容不同分辨率的设备。
* 实现:依赖于栅格系统:将一行平均分成12个格子,可以指定元素占几个格子
* 步骤:
	1. 定义容器。相当于之前的table、
		* 容器分类:
			1. container:两边留白
			2. container-fluid:每一种设备都是100%宽度
	2. 定义行。相当于之前的tr   样式:row
	3. 定义元素。指定该元素在不同的设备上,所占的格子数目。样式:col-设备代号-格子数目   (相当于td)
		* 设备代号:
			1. xs:超小屏幕 手机 (<768px):col-xs-12
			2. sm:小屏幕 平板 (≥768px)
			3. md:中等屏幕 桌面显示器 (≥992px)
			4. lg:大屏幕 大桌面显示器 (≥1200px)

	* 注意:
		1. 一行中如果格子数目超过12,则超出部分自动换行。
		2. 栅格类属性可以向上兼容。栅格类适用于与屏幕宽度大于或等于分界点大小的设备。
		3. 如果真实设备宽度小于了设置栅格类属性的设备代码的最小值,会一个元素沾满一整行。
*例子:
<body>
    <!--1.定义容器-->
    <div class="container">
        <!--2.定义行-->
        <div class="row">
            <!--3.定义元素
                在大显示器一行12个格子
                在pad上一行6个格子
            -->
            <div class="col-lg-3 col-sm-6 inner">栅格</div>
            <div class="col-lg-3 col-sm-6 inner">栅格</div>
            <div class="col-lg-3 col-sm-6 inner">栅格</div>
            <div class="col-lg-3 col-sm-6 inner">栅格</div>
        </div>
    </div>
</body>

BootStrap之CSS样式和JS插件

1. 全局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"> :相框
	* 表格
		* table
		* table-bordered
		* table-hover
		<table class="table table-hover">
	* 表单
		* 给表单项添加:class="form-control" 
2. 组件:
	* 导航条
	* 分页条
3. 插件:
	* 轮播图
*具体操作就到官网查询,然后复制粘贴

6、XML

概念

1. 概念:Extensible Markup Language 可扩展标记语言
	* 可扩展:标签都是自定义的。 <user>  <student>

	* 功能
		* 存储数据
			1. 配置文件
			2. 在网络中传输
	* xml与html的区别
		1. xml标签都是自定义的,html标签是预定义。
		2. xml的语法严格,html语法松散
		3. xml是存储数据的,html是展示数据

	* w3c:万维网联盟

XML之语法


2. 语法:
	* 基本语法:
		1. xml文档的后缀名 .xml
		2. xml第一行必须定义为文档声明
		3. xml文档中有且仅有一个根标签
		4. 属性值必须使用引号(单双都可)引起来
		5. 标签必须正确关闭
		6. xml标签名称区分大小写
	* 快速入门:
		<?xml version='1.0' ?>
		<users>      //根标签
			<user id='1'>
				<name>zhangsan</name>
				<age>23</age>
				<gender>male</gender>
				<br/>
			</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:依赖其他文件
		2. 指令(了解):结合css的        (主要是因为xml主要用于文件配置和数据传输)
			* <?xml-stylesheet type="text/css" href="a.css" ?>
		3. 标签:标签名称自定义的
			* 规则:
				* 名称可以包含字母、数字以及其他的字符 
				* 名称不能以数字或者标点符号开始 
				* 名称不能以字母 xml(或者 XML、Xml 等等)开始 
				* 名称不能包含空格 
		4. 属性:
			id属性值唯一
		5. 文本:
			* CDATA区:在该区域中的数据会被原样展示			切记
				* 格式:  <![CDATA[ 数据 ]]>

XML之约束(了解)

* DTD:简单的约束技术
	* 引入dtd文档到xml文档中
		* 内部dtd:将约束规则定义在xml文档中
		* 外部dtd:将约束的规则定义在外部的dtd文件中
			* 本地:<!DOCTYPE 根标签名 SYSTEM "dtd文件的位置">
			* 网络:<!DOCTYPE 根标签名 PUBLIC "dtd文件名字" "dtd文件的位置URL">			
			注意:dtd文件名字是自己起的
	例子:
		<!ELEMENT students (student+) >     //根标签students(里面放student标签)
        <!ELEMENT student (name,age,sex)>	//student标签(里面顺序放三个标签)
        <!ELEMENT name (#PCDATA)>			//name标签(字符串格式)
        <!ELEMENT age (#PCDATA)>
        <!ELEMENT sex (#PCDATA)>
        <!ATTLIST student number ID #REQUIRED>  //给students设置属性number(类型为ID)
* Schema:
	* 引入:
		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">

XML之解析

解析:操作xml文档,将文档中的数据读取到内存中
	* 操作xml文档
		1. 解析(读取):将文档中的数据读取到内存中
		2. 写入:将内存中的数据保存到xml文档中。持久化的存储

	* 解析xml的方式:
		1. DOM:将标记语言文档一次性加载进内存,在内存中形成一颗dom树
			* 优点:操作方便,可以对文档进行CRUD的所有操作
			* 缺点:占内存
		2. SAX:逐行读取,基于事件驱动的。
			* 优点:不占内存。
			* 缺点:只能读取,不能增删改

* Jsoup解析器:基于DOM方式
	* 快速入门:
		* 步骤:
			1. 导入jar包
			2. 获取Document对象
			3. 获取对应的标签Element对象
			4. 获取数据
		* 代码:
			 //2.1获取student.xml的path
	        String path = 					JsoupDemo1.class.getClassLoader().getResource("student.xml").getPath();
	        //2.2解析xml文档,加载文档进内存,获取dom树--->Document
	        Document document = Jsoup.parse(new File(path), "utf-8");
	        //3.获取元素对象 Element
	        Elements elements = document.getElementsByTag("name");
	        System.out.println(elements.size());
	        //3.1获取第一个name的Element对象
	        Element element = elements.get(0);
	        //3.2获取数据
	        String name = element.text();
	        System.out.println(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):根据对应的属性名和属性值获取元素对象集合
				* select(String s):根据标签选择器选择对象集合,如
					document.select("#div1") :选择id为div1的标签对象集合
					
					Elements elements2 =
                    document.select("student[number=\"heima_0001\"]");
                    
		3. Elements:元素Element对象的集合。可以当做 ArrayList<Element>来使用
		4. Element:元素对象
			1. 获取子元素对象
				* getElementById(String id):根据id属性值获取唯一的element对象
				* getElementsByTag(String tagName):根据标签名称获取元素对象集合
				* getElementsByAttribute(String key):根据属性名称获取元素对象集合
				* getElementsByAttributeValue(String key, String value):根据对应的属性名和属性值获取元素对象集合

			2. 获取属性值
				* String attr(String key):根据属性名称获取属性值
			3. 获取文本内容
				* String text():获取文本内容
				* String html():获取标签体的所有内容(包括字标签的字符串内容)
		5. Node:节点对象
			* 是Document和Element的父类
			
			
			
			
* 快捷查询方式:
	1. selector:选择器
		* 使用的方法:Elements	select(String cssQuery)
			* 语法:参考Selector类中定义的语法
	2. XPath:XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言
		* 使用Jsoup的Xpath需要额外导入jar包。
		* 查询w3cshool参考手册,使用xpath的语法完成查询
		* 代码:
			    Document document = Jsoup.parse(new File(path), "utf-8");
			         //3.根据document对象,创建JXDocument对象
		        JXDocument jxDocument = new JXDocument(document);
		
		        //4.结合xpath语法查询
		        //4.1查询所有student标签
		        List<JXNode> jxNodes = jxDocument.selN("//student");
		        for (JXNode jxNode : jxNodes) {
		            System.out.println(jxNode);
		        }
		
		        System.out.println("--------------------");
		
		        //4.2查询所有student标签下的name标签
		        List<JXNode> jxNodes2 = jxDocument.selN("//student/name");
		        for (JXNode jxNode : jxNodes2) {
		            System.out.println(jxNode);
		        }
		
		        System.out.println("--------------------");
		
		        //4.3查询student标签下带有id属性的name标签
		        List<JXNode> jxNodes3 = jxDocument.selN("//student/name[@id]");
		        for (JXNode jxNode : jxNodes3) {
		            System.out.println(jxNode);
		        }
		        System.out.println("--------------------");
		        //4.4查询student标签下带有id属性的name标签 并且id属性值为itcast
		
		        List<JXNode> jxNodes4 = jxDocument.selN("//student/name[@id='itcast']");
		        for (JXNode jxNode : jxNodes4) {
		            System.out.println(jxNode);
		        }

7、servlet

快速入门

1. 创建JavaEE项目(基于xml配置)
	2. 定义一个类,实现Servlet接口
		* public class ServletDemo1 implements Servlet
	3. 实现接口中的抽象方法
	4. 配置Servlet
		 在web.xml中配置:
	    <!--配置Servlet -->
	    <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. 调用其方法
2. 1. 创建JavaEE项目(基于注解配置)
	* 步骤:
		1. 创建JavaEE项目,选择Servlet的版本3.0以上,可以不创建web.xml
		2. 定义一个类,实现Servlet接口
		3. 复写方法
		4. 在类上使用@WebServlet注解,进行配置
			* @WebServlet("/domo1")
3. Servlet相关配置
	1. urlpartten:Servlet访问路径
		1. 一个Servlet可以定义多个访问路径 : @WebServlet({"/d4","/dd4","/ddd4"})
		2. 路径定义规则:
			1. /xxx:路径匹配
			2. /xxx/xxx:多层路径,目录结构
			3. *.txt:扩展名匹配				(前面一定不要加/)

servlet之HTTP协议(请求数据和响应数据)

* 请求消息数据格式
	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请求消息的请求参数的

2. 响应消息数据格式
	1. 响应行
		1. 组成:协议/版本 响应状态码 状态码描述
		2. 响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态。
			1. 状态码都是3位数字 
			2. 分类:
				1. 1xx:服务器就收客户端消息,但没有接受完成,等待一段时间后,发送1xx多状态码
				2. 2xx:成功。代表:200
				3. 3xx:重定向。代表:302(重定向),304(访问缓存)
				4. 4xx:客户端错误。
					* 代表:
						* 404(请求路径没有对应的资源) 
						* 405:请求方式没有对应的doXxx方法
				5. 5xx:服务器端错误。代表:500(服务器内部出现异常)
	2. 响应头:
		1. 格式:头名称: 值
		2. 常见的响应头:
			1. Content-Type:服务器告诉客户端本次响应体数据格式以及编码格式
			2. Content-disposition:服务器告诉客户端以什么格式打开响应体数据
				* 值:
					* in-line:默认值,在当前页面内打开
					* attachment;filename=xxx:以附件形式打开响应体。文件下载
		3. 响应空行
		4. 响应体:传输的数据

Servlet之Request

1. request功能:
	1. 获取请求行数据
		* GET /day14/demo1?name=zhangsan HTTP/1.1
		1. 获取请求方式 :GET
			* String getMethod()  
		2. (*)获取虚拟目录:/day14
			* String getContextPath()
		3. 获取Servlet路径: /demo1
			* String getServletPath()
		4. 获取get方式请求参数:name=zhangsan
			* String getQueryString()
		5. (*)获取请求URI:/day14/demo1
			* String getRequestURI():		/day14/demo1
			* StringBuffer getRequestURL()  :http://localhost/day14/demo1

			* URL:统一资源定位符 : http://localhost/day14/demo1	中华人民共和国
			* URI:统一资源标识符 : /day14/demo1					共和国
                    
		6. 获取协议及版本:HTTP/1.1
			* String getProtocol()
		7. 获取客户机的IP地址:
			* String getRemoteAddr()			
	2. 获取请求头数据
		* 方法:
		* (*)String getHeader(String name):通过请求头的名称获取请求头的值
		* Enumeration<String> getHeaderNames():获取所有的请求头名称
	3. 获取请求体数据:
		* 请求体:只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数
		* 步骤:
			1. 获取流对象
				*  BufferedReader getReader():获取字符输入流,只能操作字符数据
				*  ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据
					* 在文件上传知识点后讲解
				2. 再从流对象中拿数据
	4. 其他功能:
		1. 获取请求参数通用方式:不论get还是post请求方式都可以使用下列方法来获取请求参数
			1. String getParameter(String name):根据参数名称获取参数值 
			2. String[] getParameterValues(String name):根据参数名称获取参数值的数组  
			3. Enumeration<String> getParameterNames():获取所有请求的参数名称
			4. Map<String,String[]> getParameterMap():获取所有参数的map集合
	5.乱码问题
		* get方式:tomcat 8 已经将get方式乱码问题解决了
		* post方式:会乱码
			* 解决:在获取参数前,设置request的编码request.setCharacterEncoding("utf-8");
	6. 请求转发:一种在服务器内部的资源跳转方式
		1. 步骤:
			1. 通过request对象获取请求转发器对象:
				RequestDispatcher getRequestDispatcher(String path)
			2. 使用RequestDispatcher对象来进行转发:
				forward(ServletRequest request, ServletResponse response) 
		2. 特点
			1. 浏览器地址栏路径不发生变化
			2. 只能转发到当前服务器内部资源中。
			3. 转发是一次请求(即请求仅请求一次)
	7. 共享数据(通过request域:作用范围是一次请求,所以可用于请求转发)
		1. void setAttribute(String name,Object obj):存储数据
		2. Object getAttitude(String name):通过键获取值
		3. void removeAttribute(String name):通过键移除键值对
	8. 获取ServletContext:
		* ServletContext getServletContext()

BeanUtils方法

1. setProperty()
2. getProperty(Object obj,String prop)
	*获取对象的属性
	*obj:代表被操作的对象
	*prop:属性名
3. populate(Object obj , Map map)
	*将map集合的键值对信息,封装到对应的JavaBean对象中
	*obj:接收封装好的对象

Servlet之Response

* 功能:设置响应消息
	1. 设置响应行
		1. 格式:HTTP/1.1 200 ok
		2. 设置状态码:setStatus(int sc) 
	2. 设置响应头:setHeader(String name, String value) 	
	3. 设置响应体:
		* 使用步骤:
			1. 获取输出流
				* 字符输出流:PrintWriter getWriter()
				* 字节输出流:ServletOutputStream getOutputStream()
			2. 使用输出流,将数据输出到客户端浏览器
	4.重定向
		方式一:
			response.setStatus(302);     //设置状态码
			response.setHeader("location","/day15/responseDemo2");  //设置重定向位置
		方式二:
		response.sendRedirect("/day15/responseDemo2");
	5. 输出乱码问题(解决办法)
		方式一:
			response.setCharacterEncoding("utf-8");  //设置编码方式
			response.setHeader("conten-type","text/html;charset=utf-8") //告诉浏览器如何解码
		方式二:
        	response.setContentType("text/html;charset=utf-8");
        之后再获取流
        	PrintWriter pw = response.getWriter() 	

Servlet之ServletContext对象

1. 概念:代表整个web应用,可以和程序的容器(服务器)来通信
2. 获取:
	1. 通过request对象获取
		request.getServletContext();
	2. 通过HttpServlet获取
		this.getServletContext();
3. 功能:
	1. 获取MIME类型:
		* MIME类型:在互联网通信过程中定义的一种文件数据类型
			* 格式: 大类型/小类型   text/html		image/jpeg

		* 获取:String getMimeType(String file)  
	2. 域对象:共享数据
		1. setAttribute(String name,Object value)
		2. getAttribute(String name)
		3. removeAttribute(String name)

		* ServletContext对象范围:所有用户所有请求的数据
	3. 获取文件的真实(服务器)路径      (是文件,文件)
		1. 方法:String getRealPath(String path)  
			 String b = context.getRealPath("/b.txt");//web目录下资源访问
	         System.out.println(b);
	
	        String c = context.getRealPath("/WEB-INF/c.txt");//WEB-INF目录下的资源访问
	        System.out.println(c);
	
	        String a = context.getRealPath("/WEB-INF/classes/a.txt");//src目录下的资源访问
	        System.out.println(a);

8、会话技术(Cookie&Session)

概念

1. 会话:一次会话中包含多次请求和响应。
	* 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止
2. 功能:在一次会话的范围内的多次请求间,共享数据
3. 方式:
	1. 客户端会话技术:Cookie
	2. 服务器端会话技术:Session
1. 概念:客户端会话技术,将数据保存到客户端
2. 快速入门:
	* 使用步骤:
		1. 创建Cookie对象,绑定数据
			* new Cookie(String name, String value) 
		2. 发送Cookie对象
			* response.addCookie(Cookie cookie) 
		3. 获取Cookie,拿到数据
			* Cookie[]  request.getCookies()
3. 实现原理
	* 基于响应头set-cookie和请求头cookie实现
4. cookie的细节
	1. 一次可不可以发送多个cookie?
		* 可以
		* 可以创建多个Cookie对象,使用response调用多次addCookie方法发送cookie即可。
	2. cookie在浏览器中保存多长时间?
		1. 默认情况下,当浏览器关闭后,Cookie数据被销毁
		2. 持久化存储:
			* setMaxAge(int seconds)
				1. 正数:将Cookie数据写到硬盘的文件中。持久化存储。并指定cookie存活时间
				2. 负数:默认值
				3. 零:删除cookie信息
	3. cookie能不能存中文?
		* 在tomcat 8 之前 cookie中不能直接存储中文数据。
			* 需要将中文数据转码---一般采用URL编码(%E3)
		* 在tomcat 8 之后,cookie支持中文数据。特殊字符还是不支持,建议使用URL编码存储,URL解码解析
	4. cookie共享问题?
		1. 假设在一个tomcat服务器中,部署了多个web项目,那么在这些web项目中cookie能不能共享?
			* 默认情况下cookie不能共享

			* setPath(String path):设置cookie的获取范围。默认情况下,设置当前的虚拟目录
				* 如果要共享,则可以将path设置为"/"  (就是说该Tomcat根目录下所有项目都能共享)
		2. 不同的tomcat服务器间cookie共享问题?
			* setDomain(String path):如果设置一级域名相同,那么多个服务器之间cookie可以共享
			* setDomain(".baidu.com"),那么tieba.baidu.com和news.baidu.com中cookie可以共享
	5. Cookie的特点和作用
		1. cookie存储数据在客户端浏览器
		2. 浏览器对于单个cookie 的大小有限制(4kb) 以及 对同一个域名下的总cookie数量也有限制(20个)
		* 作用:
			1. cookie一般用于存出少量的不太敏感的数据
			2. 在不登录的情况下,完成服务器对客户端的身份识别

Session

1. 概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。HttpSession
2. 快速入门:
	1. 获取HttpSession对象:
		HttpSession session = request.getSession();
	2. 使用HttpSession对象:
		Object getAttribute(String name)  
		void setAttribute(String name, Object value)
		void removeAttribute(String name)  

3. 原理
	* Session的实现是依赖于Cookie的。
4. 细节:
	1. 当客户端关闭后,服务器不关闭,两次获取session是否为同一个?
		* 默认情况下。不是。(默认情况下客户端关闭就是会话结束)
		* 如果需要相同,则可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存。
			 Cookie c = new Cookie("JSESSIONID",session.getId());
		     c.setMaxAge(60*60);
	         response.addCookie(c);
	2. 客户端不关闭,服务器关闭后,两次获取的session是同一个吗?
		* 不是同一个,但是要确保数据不丢失。tomcat自动完成以下工作
			* session的钝化:
				* 在服务器正常关闭之前,将session对象系列化到硬盘上
			* session的活化:
				* 在服务器启动后,将session文件转化为内存中的session对象即可。
			
	3. session什么时候被销毁?
		1. 服务器关闭
		2. session对象调用invalidate() 。
		3. session默认失效时间 30分钟
			选择性配置修改	(conf下的web.xml)
			<session-config>
		        <session-timeout>30</session-timeout>
		    </session-config>

 5. session的特点
	 1. session用于存储一次会话的多次请求的数据,存在服务器端
	 2. session可以存储任意类型,任意大小的数据

	* session与Cookie的区别:
		1. session存储数据在服务器端,Cookie在客户端
		2. session没有数据大小限制,Cookie有
		3. session数据安全,Cookie相对于不安全

9、JSP

基本概念

1. 原理
	* JSP本质上就是一个Servlet
	
2. 指令
	* 作用:用于配置JSP页面,导入资源文件
	* 格式:
		<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>
	* 分类:
		1. page		: 配置JSP页面的
			* contentType:等同于response.setContentType()
				1. 设置响应体的mime类型以及字符集
				2. 设置当前jsp页面的编码
				(只能是高级的IDE才能生效,如果使用低级工具,
				  则需要设置pageEncoding属性设置当前页面的字符集)
			* import:导包
			* errorPage:当前页面发生异常后,会自动跳转到指定的错误页面
			* isErrorPage:标识当前也是是否是错误页面。
				* true:是,可以使用内置对象exception
				* false:否。默认值。不可以使用内置对象exception
		2. include	: 页面包含的。导入页面的资源文件
			* <%@include file="top.jsp"%>
		3. taglib	: 导入资源
			* <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
				* prefix:前缀,自定义的
3. 注释:
	1. html注释:
		<!-- -->:只能注释html代码片段
	2. jsp注释:推荐使用
		<%-- --%>:可以注释所有

4. JSP的脚本:JSP定义Java代码的方式
	1. <%  代码 %>:定义的java代码,在service方法中。service方法中可以定义什么,该脚本中就可以定义什么。
	2. <%! 代码 %>:定义的java代码,在jsp转换后的java类的成员位置。(成员变量和成员方法,静态代码块等)
	3. <%= 代码 %>:定义的java代码,会输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么。
	system.out.println()是输出到控制台上,注意两者区别

内置对象

1. JSP的内置对象:
	* 在jsp页面中不需要创建,直接使用的对象
	* 一共有9个:
	变量名					      真实类型						   作用
	* pageContext				PageContext					当前页面共享数据,还可以获取其																他八个内置对象
	* request					HttpServletRequest			一次请求访问的多个资源(转发)
	* session					HttpSession					一次会话的多个请求间
	* application				ServletContext				所有用户间共享数据
	* response					HttpServletResponse			响应对象
	* page						Object						当前页面(Servlet)的对象  this
	* out						JspWriter					输出对象,数据输出到页面上
	* config					ServletConfig				Servlet的配置对象
	* exception					Throwable					异常对象

2. out对象
	* 字符输出流对象。可以将数据输出到页面上。和response.getWriter()类似
		* response.getWriter()和out.write()的区别:
			* 在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。
			* response.getWriter()数据输出永远在out.write()之前

EL表达式

1. 概念:Expression Language 表达式语言
2. 作用:替换和简化jsp页面中java代码的编写
3. 语法:${表达式}
4. 注意:
	* jsp默认支持el表达式的。如果要忽略el表达式
		1. 设置jsp中page指令中:isELIgnored="true" 忽略当前jsp页面中所有的el表达式
		2. \${表达式} :忽略当前这个el表达式
5. 使用:
	1. 运算符:
		1. 算数运算符: + - * /(div) %(mod)
		2. 比较运算符: > < >= <= == !=
		3. 逻辑运算符: &&(and) ||(or) !(not)
		4. 空运算符: empty
			* 功能:用于判断字符串、集合、数组对象是否为null或者长度是否为0
			* ${empty list}:判断字符串、集合、数组对象是否为null或者长度为0
			* ${not empty str}:表示判断字符串、集合、数组对象是否不为null 并且 长度>0
	2. 获取值
		1. el表达式只能从域对象中获取值
		2. 语法:
			1. ${域名称.键名}:从指定域中获取指定键的值   (没有就显示空字符串)
				* 域名称:
					1. pageScope		--> pageContext
					2. requestScope 	--> request
					3. sessionScope 	--> session
					4. applicationScope --> application(ServletContext)
				* 举例:在request域中存储了name=张三
				* 获取:${requestScope.name}

			2. ${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止。

	3. 获取对象、List集合、Map集合的值
		1. 对象:${域名称.键名.属性名}
			* 本质上会去调用对象的getter方法

		2. List集合:${域名称.键名[索引]}

		3. Map集合:
			* ${域名称.键名.key名称}
			* ${域名称.键名["key名称"]}
	4. 隐式对象:
		* el表达式中有11个隐式对象
		* pageContext:
			* 获取jsp其他八个内置对象
				* ${pageContext.request.contextPath}:动态获取虚拟目录

JSTL

1. 概念:JavaServer Pages Tag Library  JSP标准标签库
	* 是由Apache组织提供的开源的免费的jsp标签		<标签>

2. 作用:用于简化和替换jsp页面上的java代码		

3. 使用步骤:
	1. 导入jstl相关jar包
	2. 引入标签库:taglib指令:  <%@ taglib %>
		<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
	3. 使用标签

4. 常用的JSTL标签
	1. if:相当于java代码的if语句
		1. 属性:
            * test 必须属性,接受boolean表达式
                * 如果表达式为true,则显示if标签体内容,如果为false,则不显示标签体内容
                * 一般情况下,test属性值会结合el表达式一起使用
   		2. 注意:
       		 * c:if标签没有else情况,想要else情况,则可以在定义一个c:if标签
    	3.模板
    		<c:if test="boolean表达式">
    			具体内容
    		</c:if>
	2. choose:相当于java代码的switch语句
		1. 使用choose标签声明         			相当于switch声明
        2. 使用when标签做判断         			相当于case
        3. 使用otherwise标签做其他情况的声明    	相当于default
        4. 模板
        	<c:choose>
        		<c:when test="${number == 1}">星期一</c:when>
        		<c:when test="${number == 2}">星期二</c:when>
        		<c:otherwise>数字输入有误</c:otherwise>
    		</c:choose>

	3. foreach:相当于java代码的for语句
		 foreach:相当于java代码的for语句
        1. 完成重复的操作
            * 属性:
                begin:开始值
                end:结束值
                var:临时变量
                step:步长
                varStatus:循环状态对象
                    index:容器中元素的索引,从0开始
                    count:循环次数,从1开始
        2. 遍历容器
            List<User> list;
            for(User user : list){
            }

        * 属性:
        	items:容器对象
        	var:容器中元素的临时变量(取啥值自己定义,代表临时变量)
            varStatus:循环状态对象(也是自己定义,但是其含义代表循环状态对象)
            	index:容器中元素的索引,从0开始
            	count:循环次数,从1开始
		3. 模板
			<c:forEach items="${list}" var="user" varStatus="s">
       	 		<c:if test="${s.count % 2 != 0}">
            		<tr bgcolor="red">
                		<td>${s.count}</td>
                		<td>${user.name}</td>
                		<td>${user.age}</td>
                		<td>${user.birStr}</td>
            		</tr>
        		</c:if>
        		<c:if test="${s.count % 2 == 0}">

            		<tr  bgcolor="green">
                		<td>${s.count}</td>
                		<td>${user.name}</td>
                		<td>${user.age}</td>
                		<td>${user.birStr}</td>
            		</tr>
        		</c:if>
    		</c:forEach>

10、Filter与Lisenter

过滤器Filter

1. 概念:
	* 当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。
	* 过滤器的作用:
		* 一般用于完成通用的操作。如:登录验证、统一编码处理、敏感字符过滤...

2. 快速入门:
	1. 步骤:
		1. 定义一个类,实现接口Filter
		2. 复写方法
		3. 配置拦截路径
			1. web.xml
			2. 注解:如
				@WebFilter("/*")
	2. 方法:
		doFilter():每次访问过滤资源就会访问它,定义拦截方式 
			*若放行则在方法里进行以下操作
				filterChain.doFilter(servletRequest,servletResponse);  //放行
		
	3. 过滤器细节:
		1. web.xml配置	
			<filter>
	        	<filter-name>demo1</filter-name>
	        	<filter-class>cn.itcast.web.filter.FilterDemo1</filter-class>
	    	</filter>
	    	<filter-mapping>
	        	<filter-name>demo1</filter-name>
				<!-- 拦截路径 -->
	        	<url-pattern>/*</url-pattern>
	    	</filter-mapping>
		2. 过滤器执行流程
			1. 执行过滤器
			2. 执行放行后的资源
			3. 回来执行过滤器放行代码下边的代码
		3. 过滤器生命周期方法
			1. init:在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次。用于加载资源
			2. doFilter:每一次请求被拦截资源时,会执行。执行多次
			3. destroy:在服务器关闭后,Filter对象被销毁。
				如果服务器是正常关闭,则会执行destroy方法。只执行一次。用于释放资源
		4. 过滤器配置详解
			* 拦截路径配置:
				1. 具体资源路径: /index.jsp   只有访问index.jsp资源时,过滤器才会被执行
				2. 拦截目录: /user/*	访问/user下的所有资源时,过滤器都会被执行
				3. 后缀名拦截: *.jsp		访问所有后缀名为jsp资源时,过滤器都会被执行
				4. 拦截所有资源:/*		访问所有资源时,过滤器都会被执行
		5. 拦截方式配置:资源被访问的方式
			* 注解配置:
				* 设置dispatcherTypes属性
					1. REQUEST:默认值。浏览器直接请求资源
					2. FORWARD:转发访问资源
					3. INCLUDE:包含访问资源
					4. ERROR:错误跳转资源
					5. ASYNC:异步访问资源
					浏览器直接请求index.jsp或者转发访问index.jsp。该过滤器才会被执行
@WebFilter(value="/*",dispatcherTypes ={ DispatcherType.FORWARD,DispatcherType.REQUEST})									
			* web.xml配置
				* 设置<dispatcher></dispatcher>标签即可(在<filter-mapping>标签下)
					1. REQUEST:默认值。浏览器直接请求资源
					2. FORWARD:转发访问资源
					3. INCLUDE:包含访问资源
					4. ERROR:错误跳转资源
					5. ASYNC:异步访问资源
		6. 过滤器链(配置多个过滤器)
			* 执行顺序:如果有两个过滤器:过滤器1和过滤器2
				1. 过滤器1
				2. 过滤器2
				3. 资源执行
				4. 过滤器2
				5. 过滤器1 
			* 过滤器先后顺序问题:
				1. 注解配置:按照类名的字符串比较规则比较,值小的先执行
					* 如: AFilter 和 BFilter,AFilter就先执行了。
				2. web.xml配置: <filter-mapping>谁定义在上边,谁先执行

监听器Lisenter

* 概念:web的三大组件之一。
	* 事件监听机制
		* 事件	:一件事情
		* 事件源 :事件发生的地方
		* 监听器 :一个对象
		* 注册监听:将事件、事件源、监听器绑定在一起。 当事件源上发生某个事件后,执行监听器代码
* ServletContextListener接口:
	* 监听ServletContext对象的创建和销毁
	* 方法:
		* void contextDestroyed(ServletContextEvent sce) :
			ServletContext对象被销毁之前会调用该方法
		* void contextInitialized(ServletContextEvent sce) :
			ServletContext对象创建后会调用该方法
	
	* 步骤:
		1. 定义一个类,实现ServletContextListener接口
		2. 复写方法
		3. 配置
			1. web.xml
			
			<listener>
 				<listener-class>
 					cn.itcast.web.listener.ContextLoaderListener
 				</listener-class>
 				<!-- 指定初始化参数 -->
   				<context-param>
      				<param-name>
      					contextConfigLocation
      				</param-name>
      				<param-value>
      					/WEB-INF/classes/applicationContext.xml
      				</param-value>
   				</context-param>
 			</listener>
 			
		* 指定初始化参数<context-param>
			2. 注解:
				* @WebListener

监听器方法实现例子:

 @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        //加载资源文件
        //1.获取ServletContext对象
        ServletContext servletContext = servletContextEvent.getServletContext();

        //2.加载资源文件
        String contextConfigLocation = 		
        		servletContext.getInitParameter("contextConfigLocation");

        //3.获取真实路径
        String realPath = servletContext.getRealPath(contextConfigLocation);

        //4.加载进内存
        try{
            FileInputStream fis = new FileInputStream(realPath);
            System.out.println(fis);
        }catch (Exception e){
            e.printStackTrace();
        }
        System.out.println("ServletContext对象被创建了。。。");
    }

11、AJAX与JSON

AJAX

1. 概念: ASynchronous JavaScript And XML	异步的JavaScript 和 XML
	1. 异步和同步:客户端和服务器端相互通信的基础上
		* 客户端必须等待服务器端的响应。在等待的期间客户端不能做其他操作。
		* 客户端不需要等待服务器端的响应。在服务器处理请求的过程中,客户端可以进行其他的操作。

	2. Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。 
		*通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。
		*提升用户的体验

2. 实现方式:
	1. 原生的JS实现方式(了解)
    //1.创建核心对象
    var xmlhttp;
    if (window.XMLHttpRequest)
    {// 如果是高版本浏览器,则用此方式创建对象
    	xmlhttp=new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
    	xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }

	2. 建立连接
		xmlhttp.open("GET","ajaxServlet?username=tom",true);
			参数:
				1. 请求方式:GET、POST
					* get方式,请求参数在URL后边拼接。send方法为空参
					* post方式,请求参数在send方法中定义
				2. 请求的URL:
				3. 同步或异步请求:true(异步)或 false(同步)


	3.发送请求
		xmlhttp.send();    //get方式

	4.接受并处理来自服务器的响应结果
		xmlhttp.responseText
			*什么时候获取?当服务器响应成功后再获取
<script> 
	function  fun() {
    	var xmlhttp;
    	if (window.XMLHttpRequest){
        	xmlhttp=new XMLHttpRequest();
    	}
    	else{
        	xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    	}
    	xmlhttp.open("GET","ajaxServlet?username=tom",true);
    	xmlhttp.send();

    	//当xmlhttp对象的就绪状态改变时,触发事件onreadystatechange。
    	xmlhttp.onreadystatechange=function()
    	{
        	//判断readyState就绪状态是否为4,判断status响应状态码是否为200
        	if (xmlhttp.readyState==4 && xmlhttp.status==200)
        	{
            	//获取服务器的响应结果
            	var responseText = xmlhttp.responseText;
            	alert(responseText);
        	}
    	}
	}
</script>
2. JQeury实现方式
1. $.ajax()
	* 语法:$.ajax({键值对});

		$.ajax({
			url:"ajaxServlet1111" , // 请求路径
			type:"POST" , //请求方式
			data:{"username":"jack","age":23},  //请求参数
			success:function (data) {
				alert(data);
			},//响应成功后的回调函数,data表示接收服务器响应的值
			error:function () {
				alert("出错啦...")
			},//表示如果请求响应出现错误,会执行的回调函数

			dataType:"text"//设置接受到的响应数据的格式
		});
2. $.get():发送get请求
	* 语法:$.get(url, [data], [callback], [type])
	* 参数:
		* url:请求路径
		* data:请求参数
		* callback:回调函数
		* type:响应结果的类型 :如指定

3. $.post():发送post请求
	* 语法:$.post(url, [data], [callback], [type])
	* 参数:
		* url:请求路径
		* data:请求参数
		* callback:回调函数
		* type:响应结果的类型   如指定返回结果的类型为json
<script>	//get方式
    function  fun() {
    	$.get("ajaxServlet",
              {username:"rose"},function (data) {alert(data);},
              "json");    //表明接收的类型为json类型
 	}      
</script>
<script>        //post方式
    function  fun() {
    $.post("ajaxServlet",
           {username:"rose"},
           function (data) {alert(data);},
           "text");
	}
</script>

JSON

1. 概念: JavaScript Object Notation		JavaScript对象表示法
	* json现在多用于存储和交换文本信息的语法
	* 进行数据的传输
	* JSON 比 XML 更小、更快,更易解析。
2. 语法:
	1. 基本规则
		* 数据在名称/值对中:json数据是由键值对构成的
			* 键用引号(单双都行)引起来,也可以不使用引号
			* 值得取值类型:
				1. 数字(整数或浮点数)
				2. 字符串(在双引号中)
				3. 逻辑值(true 或 false)
				4. 数组(在方括号中)	{"persons":[{},{}]}
				5. 对象(在花括号中) {"address":{"province":"陕西"....}}
				6. null
		* 数据由逗号分隔:多个键值对由逗号分隔
		* 花括号保存对象:使用{}定义json 格式
		* 方括号保存数组:[]
	2. 获取数据:
		1. json对象.键名
		2. json对象["键名"]
		3. 数组对象[索引]
		4. 遍历
	3.定义基本格式
<stript>
	var person = {"name": "张三", age: 23, 'gender': true};
		
	var ps = [{"name": "张三", "age": 23, "gender": true},
		      {"name": "李四", "age": 24, "gender": true},
		      {"name": "王五", "age": 25, "gender": false}];
	for(var key in person){
			            //这样的方式获取不行。因为相当于  person."name",因为他是字符串形式
			            //alert(key + ":" + person.key);
			            alert(key+":"+person[key]);
			        	}
			         //获取ps中的所有值
	for (var i = 0; i < ps.length; i++) {
		var p = ps[i];
		for(var key in p){
			alert(key+":"+p[key]);
         }
	}
</stript>
3. JSON数据和Java对象的相互转换(在java文件中完成)
	* JSON解析器:
	* 常见的解析器:Jsonlib,Gson,fastjson,jackson
	1. JSON转为Java对象
		1. 导入jackson的相关jar包
		2. 创建Jackson核心对象 ObjectMapper
		3. 调用ObjectMapper的相关方法进行转换
			1. readValue(json字符串数据,Class)
	2. Java对象转换JSON   (本质是转化为json格式的字符串)
		4. 使用步骤:
			1. 导入jackson的相关jar包
			2. 创建Jackson核心对象 ObjectMapper
			3. 调用ObjectMapper的相关方法进行转换
				1. 转换方法:
					* writeValue(参数1,obj):
					参数1:
						File:将obj对象转换为JSON字符串,并保存到指定的文件中
						Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
							如:
								 mapper.writeValue(response.getWriter(),map);
								 //传递给客户端(即传递给客户端的数据)
						OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中
					* writeValueAsString(obj):将对象转为json字符串

				2. 注解:(javabean上的注解)
					1. @JsonIgnore:排除属性。			在属性或get,set方法上
					2. @JsonFormat:属性值得格式化			同上
						* @JsonFormat(pattern = "yyyy-MM-dd")

	3. 复杂java对象转换
		1. List:数组
			String json = mapper.writeValueAsString(list);
		2. Map:对象格式一致
			String json = mapper.writeValueAsString(map);
posted @ 2020-01-10 12:24  小鱼以后  阅读(108)  评论(0)    收藏  举报