Collection集合

Collection集合

java.util.Collection接口

  • 所有单列集合的最顶层的接口,里边定义了所有单列集合共性的方法

  • 任意的单列集合都可以使用Collection接口中的方法

tc3XP1.md.jpg

Foreach增强for循环

  • 增强for循环:底层使用的也是迭代器,使用for循环的格式,简化了迭代器的书写

  • 是jdk1.5之后出现的新特性

  • Collection< E >extends Iterable< E >:所有的单列集合都可以使用增强for循环

  • public interface Iterable< T >实现这个接口允许对象成为 “foreach” 语句的目标。

  • 增强for循环用来遍历集合和数组

    • 格式:

      for(集合或数组的数据类型 变量名:集合名或数组名){
                  sout("变量名");
      }

注意:因为增强for循环本质上是迭代器,所以在循环过程中不能进行增删操作

Iterator迭代器

  • java.util.iterator接口:迭代器(对j集合进行遍历)

  • 两个常用方法:

    1. boolean hasNext(); 如果仍有元素可以迭代,则返回true,没有则返回false
    2. E next(); 返回迭代的下一个元素
  • Iterator是一个接口,无法直接使用,需要一个实现类对象,获取实现类的方式比较特殊

    • Collection接口中有一个方法叫iterator(),这个方法返回的就是迭代器的实现类对象
    • Iterator< E > iterator();
  • 使用步骤:

    1. 使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收
    2. 使用Iterator接口中的方法hasNext()判断还有没有下一个元素
    3. 使用Iterator接口中的方法Next()取出集合中的下一个元素

Set与List

Set

java.uti.Set接口 extends Collection接口

  • 特点:
    1. 不允许存储重复元素
    2. 没有索引

java.uti.HashSet集合 implements Set接口

  • 特点:
    1. 不允许存储重复元素
    2. 没有索引
    3. 是一个无序的集合,存储和取出的顺序有可能不一样
    4. 底层是一个哈希表结构(查询的速度非常快)

java.util.LinkedHashSet extends HashSet集合

  • 特点:
    • 底层是一个哈希表,多了一条链表(记录元素的存储顺序),保证元素有序

List

java.util.List接口 extends Collection接口

  • List接口的特点:

    1. 有序的集合,存储和取出的顺序是一样的(存储123 取出123)

    2. 有索引,包含了一些带索引的方法

    3. 允许存储重复的元素

Java.util.LinkedList集合 implements List接口

  • 底层是一个链表结构,查询慢,增删快

  • 里面包含了大量操作首尾元素的方法

可变参数

  • 可变参数:是JDK1.5之后出来的新特性

  • 使用前提:

    • 当方法的参数列表数据类型已经确定,但是参数的个数不确定,就可以使用可变参数。
  • 使用格式:定义方法时使用

    • 修饰符 返回值类型 方法名(数据类型…变量名){}
  • 可变参数的原理:

    • 可变参数底层就是一个数组,根据传递参数个数不同,会创建不同长度的数组,来存储这些参数
      传递的参数个数,可以是0个(不传递) 1个….多个

注意事项:

  1. 一个方法的参数列表,只能有一个可变参数
  2. 如果方法的参数有多个,那么可变参数必须写在参数列表的末尾

Collections集合工具类

java.util.Collections是集合工具类,用来对集合进行操作,部分方法如下:

  1. public static <T> boolean addAll(Collection<? super T> c, T... elements);将所有指定元素添加到指定 collection 中。

  2. public static void shuffle(List<?> list);使用指定的随机源对指定列表进行置换。

  3. public static <T extends Comparable<? super T>> void sort(List<T> list);根据元素的自然顺序 对指定列表按升序进行排序。

    • 此接口的使用前提:
      • 被排序的集合里面存储的元素必须实现接口Comparable,重写接口中的方法compareTo定义排序的规则
      • 有两种方法:
        1. Comparable:自己和参数比较,自己需要实现Comparable接口,重写比较的规则compareTo方法
        2. Comparator:相当于找一个第三方裁判,比较双方
  4. public static <T> void sort(List<T> list, Comparator<? super T> c);根据指定比较器产生的顺序对指定列表进行排序。

Map

Map

java.util.Map<K,V>接口:HashMap实现类 LinkedHashMap实现类

  • 特点:
    1. 是一个双列集合,一个元素包含两个值(key,value)
    2. key与value的数据类型可以相同,也可以不同
    3. key不允许重复
    4. 一个key只对应一个value

HashMap与LinkedHashMap

  1. HashMap

    • HashMap存储自定义类型键值
    • 作为key的元素,必须重写hashCode方法和equals方法
    • Person同名同年龄为同一个人
    • 底层原理:链表+数组 当长度超过8时变为红黑树
  2. LinkedHashMap

    • java.util.LinkedHashMap< K,V> extends HashMap< K,V>
    • Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序,有序的,存储和取出的顺序一样
    • 底层原理:哈希表 + 链表(记录元素的顺序)

循环遍历

  1. keyset

    • public Set< K> keySet();返回此映射中包含的键的 Set 视图。
    • 通过此方法遍历map集合
  2. entryset

    • public Set<Map.Entry<K,V>> entrySet();返回此映射中包含的映射关系的 Set 视图。
    • 通过此方法遍历map集合

JDK9中的一个特性

  • List接口,Set接口,Map接口:里边增加了一个静态的方法of,可以给集合一次性添加多个元素
    • 使用前提:
      • 当集合中存储的元素个数已经确定了,不在改变时使用
    • 注意:
      1. of方法只适用于List接口,Set接口,Map接口,不适用于接口的实现类
      2. of方法的返回值是一个不能改变的集合,集合不能再使用方法进行元素的添加删除等操作,会抛出异常
      3. Set接口和Map接口在使用时不能有重复的元素,否则会抛出异常

Maven

Maven

Maven的功能

  1. 依赖管理

    • 简单的说就是项目中的jar包不再放在项目中,而是放在Maven仓库中,项目中只存放jar包的坐标,那么就会减小项目的大小,比如如果有十个项目需要用到相同的一些jar包,那么需要在各自的项目中存放jar包,需要十份,而使用Maven,则只需要一份,放入Maven仓库中即可,项目通过对应的jar包坐标去Maven仓库中找到需要的jar包。
  2. 项目的一键构建

    • 项目往往都要经历编译、测试、运行、打包、安装 ,部署等一系列过程。构建就是项目从编译、测试、运行、打包、安装 ,部署整个过程都交给Maven进行管理。整个构建过程,使用Maven一个命令可以轻松完成整个工作。

Maven的安装

  • 与tomcat一样,去官网下载,下载完后是压缩包,然后将压缩包解压到你想要的指定位置即可完成安装。

Maven的环境变量配置

  • 与配置java变量差不多,在环境变量的系统变量中新建一个MAVEN_HOME,值为Maven的解压路径,然后编辑Path系统变量,添加%MAVEN_HOME%\bin。
  • 注意:Maven的配置需要依赖JAVA_HOME。

Maven的仓库和彼此依赖关系

  1. 本地仓库:即在自己的机器上存放jar包的Maven仓库。
  2. 远程仓库:即公司为了管理jar包所专属的一个Maven仓库。
  3. 中央仓库:即互联网中的一个大Maven仓库,存放数以亿计的jar包。
  • 关系:

    1. 如果没有远程仓库,则会先在本地仓库寻找,如果没有则再去中央仓库。(前提:联网。)
    2. 如果有远程仓库,则会先在本地仓库寻找,如果没有则再去远程仓库寻找,如果还没有则最后去中央仓库或者通过本地仓库上传。(前提:和远程仓库在一个局域网。)
  • 修改本地仓库的位置

    • 修改Maven安装目录的conf文件夹下的settings.xnl,添加<localRepository>此处为你的本地仓库的路径</localRepository>

Maven项目标准目录结构

  1. src/main/java目录 核心代码部分
  2. src/main/resources 配置文件部分
  3. src/test/java目录 测试代码部分
  4. src/test/resources 测试配置文件部分
  5. src/main/webapp 页面资源,js,css,图片等

Maven常用命令

  • mvn clean:删除本地编译后的信息,删除本地编译后的target文件夹。
  • mvn compile:编译src/main/java目录下的核心代码部分,将编译后的信息放在target文件夹。
  • mvn test:编译src/test/java目录下的测试代码部分,将编译后的信息放在target文件夹,同时也会编译src/main/java目录下的核心代码部
  • mvn package:编译核心代码部分与测试代码部分,将项目打包,信息存放在target文件夹。
  • mvn install:编译核心代码部分与测试代码部分,将项目打包,信息存放在target文件夹,将包发布到本地仓库。

Maven的生命周期

  • 默认生命周期:compile –> test –> package –> install –> deploy
  • 清理生命周期:clean
  • 站点生命周期

Maven概念模型

tmuMxe.png

IDEA集成Maven插件

  • configure –> Settings –> Maven –> 配置maven的路径以及settings.xml的路径
  • 可以在Runner的VM中添加-DarchetypeCatalog=internal保证不联网时也能创建Maven项目

使用骨架创建Maven的Java工程

  • 在创建Maven工程时勾选Create from archetype,然后选择使用的骨架即可完成创建。
  • 注意:创建完成后没有配置文件的目录,需要手动创建,创建完成后右键make directory as选择对应的配置文件类型。

不使用骨架创建Maven的Java工程

  • 创建时不勾选Create from archetype,其他与用骨架差不多
  • 创建后的项目目录结构与Maven标准目录结构差不多

使用骨架创建Maven的web工程*

  • 在创建Maven工程时勾选Create from archetype,然后选择webapp骨架即可完成创建。
  • 注意:创建完成后只有main下的webapp目录,其他都要自己创建。

解决jar包冲突

  • 可以在对应的depency中加入scope标签,标签内容为provided,意思是只在编译时生效。

Maven的依赖

  • 一个工程依赖另一个工程,会把依赖工程中的jar包传递过来,但是只有scope范围为compile的才能传递。

  • 依赖的排除:设置exclusions标签

Maven版本号统一管理

  • 在pom中设置properties标签,标签内容为自己随便取一个名字作为一个标签,然后其中的标签内容是版本号。
  • 在添加依赖的时候version标签内容可以使用${之前properties中取的名字}来控制版本号。当我们需要修改时直接修改properties即可。

Maven的继承

  • 在工程中使用的一些依赖的版本号可能不同,比如不同工程使用的junit版本号可能不同,操作可能会有些许不同,可以控制它们的版本号相同。
  • 步骤:
    1. 创建一个父工程,打包为pom类型
    2. 在子工程用parent标签声明对父工程的引用
    3. 将子工程中与父工程重复的内容删除(也可以不删)
    4. 在父工程统一管理依赖
    5. 删除子工程中依赖部分的版本号

Maven的聚合

  • 在pom中设置modules标签用于聚合,指定各个子工程的相对路径,然后在聚合工程上安装,所有子工程都会一起被安装。

Jedis

Jedis

一款java操作的redis数据库的工具。

  • 使用步骤:
    1. 下载jedis的jar包
    2. 步骤
      1. 获取连接Jedis jedis = new Jedis(ip地址,端口号)
      2. 进行数据库操作
      3. 关闭连接jedis.close()

Jedis操作各种数据类型

操作各种数据类型的方法名字和命令行中的命令名基本一样

  1. 字符串类型 string
    • set
    • get
    • setex:存储后指定时间过后会自动删除
  2. 哈希类型 hash:就是map格式的
    • hset
    • hget
    • hgetall
  3. 列表类型 list:链表,就是linkedlist格式的
    • lpush/rpush
    • lpop/rpop
    • lrange key start end 范围获取
  4. 集合类型 set:不允许重复元素
    • sadd
    • smembers 获取所有元素
  5. 有序集合类型 sortedset:不允许重复元素,会自动排序。
    • zadd
    • zrange key start end

Jedis连接池:JedisPool

  • 使用:
    1. 可以使用JedisPoolConfig方法创建配置对象然后配置连接池的参数
    2. 创建JedisPool连接池对象,可以空参创建,也可以传入参数创建,比如传入配置对象
    3. 调用方法getResource()方法获取Jedis连接

Jedis连接池工具类

//JedisPool的工具类
public class JedisPoolUtils {

    private static JedisPool jedisPool;

    static {
        InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
        Properties prop = new Properties();
        try {
            prop.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(Integer.parseInt(prop.getProperty("maxTotal")));
        jedisPoolConfig.setMaxIdle(Integer.parseInt(prop.getProperty("maxIdle")));
        jedisPool = new JedisPool(jedisPoolConfig, prop.getProperty("host"), Integer.parseInt(prop.getProperty("port")));
    }

    public static Jedis getJedis() {
        return jedisPool.getResource();
    }

}

Redis

Redis

1. 概念

Redis是一款高性能的NOSQL系列的非关系型数据库。

  1. 什么是NOSQL

    • NoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库。
    • 随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
  2. NOSQL和关系型数据库比较

    • 优点:

      1. 成本:nosql数据库简单易部署,基本都是开源软件,不需要像使用oracle那样花费大量成本购买使用,相比关系型数据库价格便宜。
      2. 查询速度:nosql数据库将数据存储于缓存之中,关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql数据库。
      3. 存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础类型。
      4. 扩展性:关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难。
    • 缺点:

      1. 维护的工具和资料有限,因为nosql是属于新的技术,不能和关系型数据库10几年的技术同日而语。
      2. 不提供对sql的支持,如果不支持sql这样的工业标准,将产生一定用户的学习和使用成本。
      3. 不提供关系型数据库对事务的处理。
  3. 非关系型数据库的优势:

    1. 性能NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。
    2. 可扩展性同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。
  4. 关系型数据库的优势:

    1. 复杂查询可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。
    2. 事务支持使得对于安全性能很高的数据访问要求得以实现。对于这两类数据库,对方的优势就是自己的弱势,反之亦然。
  5. 总结

    • 关系型数据库与NoSQL数据库并非对立而是互补的关系,即通常情况下使用关系型数据库,在适合使用NoSQL的时候使用NoSQL数据库,
    • 让NoSQL数据库对关系型数据库的不足进行弥补。
    • 一般会将数据存储在关系型数据库中,在nosql数据库中备份存储关系型数据库的数据
  6. 主流的NOSQL产品

    • 键值(Key-Value)存储数据库
      • 相关产品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB
      • 典型应用: 内容缓存,主要用于处理大量数据的高访问负载。
      • 数据模型: 一系列键值对
      • 优势: 快速查询
      • 劣势: 存储的数据缺少结构化
    • 列存储数据库
      • 相关产品:Cassandra, HBase, Riak
      • 典型应用:分布式的文件系统
      • 数据模型:以列簇式存储,将同一列数据存在一起
      • 优势:查找速度快,可扩展性强,更容易进行分布式扩展
      • 劣势:功能相对局限
    • 文档型数据库
      • 相关产品:CouchDB、MongoDB
      • 典型应用:Web应用(与Key-Value类似,Value是结构化的)
      • 数据模型: 一系列键值对
      • 优势:数据结构要求不严格
      • 劣势: 查询性能不高,而且缺乏统一的查询语法
    • 图形(Graph)数据库
      • 相关数据库:Neo4J、InfoGrid、Infinite Graph
      • 典型应用:社交网络
      • 数据模型:图结构
      • 优势:利用图结构相关算法。
      • 劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案。
  7. 什么是Redis

    • Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供测试数据,50个并发执行100000个请求,读的速度是110000次/s,写的速度是81000次/s ,且Redis通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如下:
      1. 字符串类型 string
      2. 哈希类型 hash
      3. 列表类型 list
      4. 集合类型 set
      5. 有序集合类型 sortedset
  8. redis的应用场景

    • 缓存(数据查询、短连接、新闻内容、商品内容等等)
    • 聊天室的在线好友列表
    • 任务队列。(秒杀、抢购、12306等等)
    • 应用排行榜
    • 网站访问统计
    • 数据过期处理(可以精确到毫秒
    • 分布式集群架构中的session分离

2. 下载安装

官网下载,官网下的linux版本,需要windows版本需要去github。

  • redis.windows.conf:配置文件
  • redis-cli.exe:redis的客户端
  • redis-server.exe:redis的服务器端

3. 命令操作

  1. redis的数据结构:

    • redis存储的是:key,value格式的数据,其中key都是字符串,value值有5种不同的数据结构。
      • value的数据结构:
        1. 字符串类型 string
        2. 哈希类型 hash:就是map格式的
        3. 列表类型 list:链表,就是linkedlist格式的
        4. 集合类型 set:不允许重复元素
        5. 有序集合类型 sortedset:不允许重复元素,会自动排序。
  2. 字符串类型 string

    1. 存储:set key value
    2. 获取:get key
    3. 删除:del key
  3. 哈希类型 hash

    1. 存储:hset key field value
    2. 获取:hget key field获取key中指定的值,hgetall key获取key中所有的值
    3. 删除:hdel key field
  4. 列表类型 list:可以添加一个元素到列表的头部或者尾部

    1. 存储
      1. lpush key value:添加至列表的头部
      2. rpush key value:添加至列表的尾部
    2. 获取:lrange key start end 范围获取
    3. 删除
      • lpop key:删除头部元素并返回
      • rpop key:删除尾部元素并返回
  5. 集合类型 set

    1. 存储:sadd key value
    2. 获取:smembers key获取集合中所有元素
    3. 删除:srem key value删除某个元素
  6. 有序集合类型 sortedset

    1. 存储:zadd key score value:给值指定score分数用于排序
    2. 获取:zrange key start end
    3. 删除:zrem key value
  7. 通用命令

    1. keys *:查询所有的键
    2. type key:获取键的数据类型
    3. del key:删除指定的key value

4. 持久化操作

  1. redis是一个内存数据库,当redis服务器重启后,或者电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中。
  2. redis持久化机制:
    1. RDB:默认方式,不需要进行配置,默认就使用这种机制,在一定的时间间隔内,检测key的变化情况,然后持久化数据。
      1. 编辑redis.conf文件中的save内容
      2. 用命令行指定配置文件打开redis服务器redis-server redis
    2. AOF:日志记录的方式,可以记录每一条指令的操作。每一次命令操作后,持久化数据。
      1. 编辑redis.conf文件中的appendonly内容为yes
      2. 然后进行相应的配置:
        • #appendfsync always:每一次操作都进行持久化
        • appendfsync everysec:每隔一秒进行持久化,默认为这个
        • #appendfsync no:不进行持久化

AJAX和Json

AJAX

1. 概念:

  • Asynchronous Javascript And XML, 异步的JavaScript 和XML。
  • 异步和同步:
    1. 同步:客户端等待服务器端的响应期间,不能做其他操作。
    2. 异步:客户端等待服务器端的响应期间,在服务器处理请求的过程中,可以做其他操作。

是指一种创建交互式、快速动态网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。

通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

提升用户体验。

2. 实现方式:

  1. 原生的JS实现方式

      1. 创建核心对象
      2. 建立连接
        • xmlhttp.open("GET","ajaxServlet?username=tom",true);
        • 三个参数分别为请求方式,请求路径,同步或异步请求,true为异步,false为同步。
        • 请求路径中,若是get方式,参数直接写在后面,send发送请求时参数为空,若为post,参数则在send发送请求时传递。
      3. 发送请求
        • xmlhttp.send();
      4. 接受并处理来自服务器的响应结果,服务器响应成功后再获取。
  2. JQuery的实现方式

    1. $.ajax()

          $.ajax({
          url:"/javaweb_AJAX_war_exploded/ajaxServlet",
          type:"POST",
          //date:"username=jack&age=23",
          data:{"username":"jack",age:23},
          success:function (name) {
              alert(name);
          }
      })
      • 一些常用的键值对:
        • url:请求路径
        • type:请求方式
        • data:请求参数
        • success:响应成功后的回调函数
        • error:响应失败后的回调函数
        • dataType:接收到的响应数据的格式
    2. $.get():发送get请求

      • $.get(url, [data], [callback], [type])

        • url:请求路径

        • data:请求参数

        • callback:会调函数

        • type:响应结果的类型

                  $.get("/javaweb_AJAX_war_exploded/ajaxServlet",{username:"jack",age:23},function (name) {
              alert(name);
          })
    3. $.post():发送post请求

          $.post("/javaweb_AJAX_war_exploded/ajaxServlet",{username:"rose",age:23},function (name) {
          alert(name);
      })

JSON

1. 概念

Javascript Object Notation, Javascript对象表示法。

  • var p = {“name”:”张三”,”age”:23,”gender”:”男”}

  • 现在多用于存储和交换文本信息的语法

  • 进行数据的传输

  • 比xml更小,更快,更易解析

2. 语法

  1. 基本规则:

    1. 数据在名称/键值对中:json数据是由键值对构成

      • 键用引号引起来,也可以不使用引号
      • 值的取值类型:
        1. 数字(整数或浮点数)
        2. 字符串(在双引号中)
        3. 逻辑值
        4. 数组(在方括号中)
        5. 对象(在花括号中)
        6. null
    2. 数据由逗号分隔:多个键值对由逗号分割

    3. 花括号保存对象:使用大括号定义json格式

    4. 方括号保存数组:数据中可以有数组

  2. 获取数据

    1. json对象.键名
    2. json对象[“键名”]
    3. 数组对象[索引]

java对象转json

  • JSON解析器

    • 常见的解析器:Jsonlib,Gson,fastjson,jackson
  • jackson使用步骤:

    1. 导入相关的jar包
    2. 创建jackson核心对象ObjectMapper
    3. 使用ObjectMapper的相关方法进行转换
      • objectMapper.writeValueAsString();会将对象转换为一个json字符串
      • objectMapper.writeValue(参数,Java对象);会将java对象转换为json对象并且保存在参数中,参数可以是文件或者字节输出流或者字符输出流或者其他的
  • 注解:

    1. @JsonIgnore:排除属性
    2. @JsonFormat:属性值格式化
  • 复杂java对象转换

    1. list:数组
    2. map:和对象格式一致

json转java对象

  • 方法:readValue(json字符串数据,Class类型)

JQuery基础

JQuery基础

1. 概念:

jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架)。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。

JavaScript框架:本质上就是一些js文件,封装了js的原装代码而已。

2. 快速入门:

  1. 下载JQuery

    • 目前JQuery有三个大版本:
      • 1.x:兼容ie678,使用最为广泛的,官方只做bug维护,功能再新增。因此一般项目来说,使用这个版本就可以了。
      • 2.x:不兼容ie678,很少有人使用,官方只做bug维护,功能不再新增。如果不考虑兼容ie678,可以使用这个版本。
      • 3.x:不兼容ie678,只支持最新的浏览器。除非特殊要求,一般不会使用这个版本,很多老的JQuery插件不支持这个版本。
  2. 导入JQuery的js文件

  3. 使用

3. JQuery对象和JS对象区别与转换

  1. JQuery对象在操作时,更加方便。
  2. JS对象和JQuery对象方法不通用。
  3. 两者相互转换:
    • JQuery对象 –> JS对象:JQuery对象[索引]或者JQuery对象.get(索引)。
    • JS对象 –> JQuery对象:$(JS对象)。

4. 选择器

  1. 基本选择器:

    1. 标签选择器(元素选择器)
      • 语法:$(“html标签名”)获得所有匹配标签名称的元素。
    2. id选择器
      • 语法:$(“#id的属性值”)获得与指定id属性值匹配的元素
    3. 类选择器
      • 语法:$(“.class的属性值”)获得与指定class属性值匹配的元素。
    4. 并集选择器
      • 语法:$(“选择器1,选择器2…..”)获得多个选择器选中的所有元素。
  2. 层级选择器:

    1. 后代选择器:
      • 语法:$(“A B”)选择A元素内部的所有B元素,包括B元素下的B元素。
    2. 子选择器:
      • 语法:$(“A > B”)选择A元素内部的所有B子元素,只包括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),固定写法。
  5. 表单过滤选择器:

    1. 可用元素选择器
      • 语法: :enabled 获得可用元素。
    2. 吧可用元素选择器
      • 语法: :disabled 获得不可用元素。
    3. 选中选择器
      • 语法: :checked 获得单选/复选框中的元素。
    4. 选中选择器
      • 语法: :selected 获得下拉框选中的元素。

5. DOM操作

  1. 内容操作

    1. html():获取/设置元素对象的标签体内容。
    2. text():获取/设置元素对象的标签体纯文本内容。
    3. val():获取/设置元素对象的value属性值。
  2. 属性操作

    1. 通用属性操作

      1. attr():获取/设置元素的属性。
      2. removeAttr():删除属性。
      3. prop():获取/设置元素的属性。
      4. removeProp():删除属性。
      • 如果操作的属性是固有的属性,建议使用prop,如果是自定义属性,则建议使用attr。
    2. 对class属性操作

      1. addClass():添加class属性值。
      2. removeClass():删除class属性值。
      3. toggleClass():切换class属性值。判断元素上是否有class,有就删除class,没有就添加class。
  3. CRUD操作

    1. append():父元素将子元素追加到末尾。
    2. prepend():父元素将子元素追加到开头。
    3. appendTo():将对象添加到括号中对象内部末尾。
    4. prependTo():将对象添加到括号中对象内部开头。
    5. after():添加元素到对应的元素后边。
    6. before():添加元素到对应的元素前边。
    7. insertAfter():将对象添加到括号中元素的后边。
    8. insertBefore():将对象添加到括号中元素的前边。
    9. remove():删除元素。
    10. empty():清空元素的所有后代元素。

JQuery进阶

JQuery进阶

1. 动画

三种方式显示和隐藏元素:

  • 参数:
    • speed:动画的速度。三个预定义的值(slow,normal,fast)之一或者毫秒值。
    • easing:用来指定切换效果。默认是swing,可以设置为linear。swing是动画慢快慢,linear是匀速。
    • fn:在动画完成时执行的函数,每个元素执行一次
  1. 默认显示和默认隐藏方式

    1. show([speed],[easing],[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])

2. 遍历

  1. JQuery对象.each(callback)

  2. $.each(object, [callback])

  3. for..of

  • return false相当于break,return true相当于continue。

3. 事件绑定

  1. 标准绑定方式

    • JQuery对象.事件方法(回调函数)
  2. on绑定事件/off解除绑定

    • JQuery对象.on(“事件名称”,回调函数)
    • JQuery对象.off(“事件名称”)
  3. 事件切换

    • JQuery对象.toggle(fn1,fn2…..)
    • 1.9版本后此事件移除,可以用migrate插件恢复此功能。

4. 插件

增强JQuery的功能的。

  • 实现方式:

    1. $.fn.extend(object)

      • 增强通过JQuery获取的对象的功能
    2. $.extend(object)

      • 增强JQuery对象自身的功能

Filter

Filter:过滤器

web中的过滤器: 当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。

过滤器的作用: 一般用于完成通用的操作。如:登录验证、统一编码处理、敏感字符过滤…..

快速入门

1.步骤

  1. 定义一个类,实现接口Filter

  2. 复写方法

  3. 配置拦截路径

    1. web.xml

      <filter>
          <filter-name>demo01</filter-name>
          <filter-class>web.filter.FilterDemo01</filter-class>
      </filter>
      
      <filter-mapping>
          <filter-name>demo01</filter-name>
          <url-pattern>/*</url-pattern>   //这里是拦截路径
      </filter-mapping>
    2. 注解WebFilter

      • 和Servlet注解差不多,只不过参数中是拦截路径

细节

  1. 过滤器执行流程:

    • 放行之前的代码先执行,然后放行,最后执行放行之后的代码。
  2. 过滤器生命周期方法:

    • 与Servlet类似,init和destory是创建和销毁时执行,doFilter是拦截请求资源时执行。
  3. 过滤器配置详解

    • 拦截路径配置:
      1. 具体资源路径: /index.jsp 只有访问此资源时过滤器才会被执行。
      2. 目录拦截:/user/* 访问/user下的所有资源时过滤器都会被执行。
      3. 后缀名拦截:*.jsp 访问所有后缀名为jsp资源时过滤器都会被执行。
      4. 拦截所有资源:/* 访问所有资源时过滤器都会被执行。
    • 拦截方式配置:
      • 注解配置
        • 设置dispatcherTypes属性
          1. REQUEST:默认值。浏览器直接请求资源。
          2. FORWARD:转发访问资源。
          3. INCLUDE:包含访问资源。
          4. ERROR:错误跳转资源。
          5. ASYNC:异步访问资源
      • web.xml配置
        • 设置<dispatcher></dispatcher>标签即可
  4. 过滤器链

    • 过滤器先后顺序问题:
      1. 注解配置:按照类名的字符串比较规则比较,值小的先执行
        • 如:AFilter和Bfilter,AFilter先执行
      2. web.xml配置:<filter-mapping>谁定义在上边谁先执行

动态代理

设计模式: 一些通用的解决固定问题的方式。

可以增强对象功能的设计模式: 装饰模式,代理模式。

代理模式:

  1. 概念:

    • 真实对象:被代理的对象
    • 代理对象
    • 代理模式:代理对象代理真实对象,达到增强真实对象的目的。
  2. 实现方式:

    • 静态代理:有一个类文件描述代理模式。

    • 动态代理:在内存中形成代理类。

      • 实现步骤:

        1. 代理对象和真实对象实现相同的接口。
        2. 通过Proxy.newProxyInstance()方法创建代理对象。第一个参数为真实对象classloader,第二个参数为相同的接口,第三个参数为new一个InvocationHandler。
        3. 使用代理对象调用方法。
        4. 增强方法。
      • 增强方式:

        1. 增强参数列表。
        2. 增强返回值类型。
        3. 增强方法体执行逻辑。

请我喝杯咖啡吧~

支付宝
微信