首页 > 编程语言 > 详细

JavaWeb总结

时间:2020-01-10 13:42:44      阅读:75      评论:0      收藏:0      [点我收藏+]

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);

JavaWeb总结

原文:https://www.cnblogs.com/liujiashun/p/12175540.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!