案例一:使用AJAX完成用户名的异步校验

一,需求分析

​ 我们有一个网站,网站中都有注册的页面,当我们在注册的页面中输入用户名的时候,这个时候会提示,用户名是否存在。

AJAX(JavaScript、JQuery)、使用AJAX完成用户名的异步请求校验 、使用JQ完成用户名异步校验 、使用JQ完成仿百毒搜索提示的效果

二,技术分析

1. AJAX的概述

1.1 什么是AJAX

Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术。

Ajax = 异步 JavaScript 和 XML标准通用标记语言的子集)。

Ajax 是一种用于创建快速动态网页的技术。

Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。

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

传统的网页(不使用 Ajax)如果需要更新内容,必须重载整个网页页面。

  • 异步的请求

1.2什么是异步

  • 同步

AJAX(JavaScript、JQuery)、使用AJAX完成用户名的异步请求校验 、使用JQ完成用户名异步校验 、使用JQ完成仿百毒搜索提示的效果

  • 异步

    AJAX(JavaScript、JQuery)、使用AJAX完成用户名的异步请求校验 、使用JQ完成用户名异步校验 、使用JQ完成仿百毒搜索提示的效果

AJAX(JavaScript、JQuery)、使用AJAX完成用户名的异步请求校验 、使用JQ完成用户名异步校验 、使用JQ完成仿百毒搜索提示的效果

1.3为什么要学习AJAX

​ 提升用户的体验。异步

​ 将部分的代码,写到客户端浏览器。

​ 实现页面局部刷新。

 

2. js的Ajax入门(了解)

2.1步骤

​ 第一步:创建异步请求对象。

​ 第二步:打开连接。

​ 第三步:发送请求。

​ 第四步:设置监听对象改变所触发的函数,处理结果

2.2 GET请求方式的入门

<script>
        function AjaxDemo() {
        //1.创建xmlHttpRequest对象
            var xmlHttp = null;
            if (window.XMLHttpRequest) {// all modern browsers
                xmlHttp = new XMLHttpRequest();
            } else if (window.ActiveXObject) {// for IE5, IE6
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
        //2.打开连接
            xmlHttp.open("GET","${pageContext.request.contextPath}/demo02?username=zs&password=123456");
        //3.发送请求
            xmlHttp.send();
        //4.设置对象状态发生改变所触发的函数
            xmlHttp.onreadystatechange = function(){
                if(xmlHttp.readyState == 4 && xmlHttp.status == 200){
                   
                    var result = xmlHttp.responseText;
                    alert(result);
                }
            };
        }
</script>

2.3  POST请求方式的入门

<script>
    function AjaxDemo() {
        //1.创建xmlHttpRequest对象
        var xmlHttp = null;
        if (window.XMLHttpRequest) {// all modern browsers
            xmlHttp = new XMLHttpRequest();
        } else if (window.ActiveXObject) {// for IE5, IE6
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        //2.打开连接
        xmlHttp.open("POST", "${pageContext.request.contextPath}/demo03");
        //设置请求参数的mime类型
        xmlHttp.setRequestHeader("content-type","application/x-www-form-urlencoded");
        //3.发送请求
        xmlHttp.send("username=zs&password=123456");
        //4.设置状态发生改变触发的函数,处理结果
        xmlHttp.onreadystatechange = function() {
            if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
                var result = xmlHttp.responseText;
                alert(result);
            }
        };
    }
</script>

3.JS的Ajax

3.1异步请求的对象XMLHttpRequest

​ 不同的浏览器对该对象的创建的方式不一样,MSIE浏览器,比较早的浏览器,创建这个对象的时候将这个对象封装到ActiveXObject的插件中。像火狐或者谷歌浏览器则直接new出来。

function createXmlHttp(){
   var xmlHttp;
   try{   // Firefox, Opera 8.0+, Safari
        xmlHttp=new XMLHttpRequest();
   }catch (e){
       try{   // Internet Explorer
              xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
       }catch (e){
          try{
             xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
          }catch (e){
          } 
       }
    }
    return xmlHttp;
 }

3.2  XMLHttpRequest 的对象的API

3.2.1方法

​ open() :打开连接。传递三个参数。第一个是请求方式(GET/POST),第二个是请求路径,第三个是否是异步的(默认就是异步)。

​ send([post请求的参数]): 发送请求。post请求可以传入参数,get请求不用传

​ setRequestHeader():解决POST请求参数的问题。 key和值,如果是POST请求需要传参数,则必须需要设置一个Content-Type的请求头

3.2.2属性

​ onreadystatechange:监听该对象的状态的改变,需要一个函数响应它

​ readyState:该属性就记录这个对象的状态。咱们只关心"4(完成)",此时可以获取响应

AJAX(JavaScript、JQuery)、使用AJAX完成用户名的异步请求校验 、使用JQ完成用户名异步校验 、使用JQ完成仿百毒搜索提示的效果

status:状态码 。

responseText: 获得字符串形式的响应数据(响应体)。

​ responseXML : 获得 XML 形式的响应数据(响应体)

 

三,思路分析

  1. 创建页面和数据库

  2. 给用户名输入框设置失去焦点事件,创建一个CheckUserName()函数响应这个事件

  3. 在CheckUserName():

    ​ 获得用户输入的用户名

    ​ 发送Ajax请求,CheckUserNameServlet

  4. 创建CheckUserNameServlet

    ​ 获得请求参数(用户名)

    ​ 调用业务,根据用户名获得用户 (User 对象)

    ​ 判断User对象是否为空,给前台不同的响应

四,代码实现

1.环境的准备

  • 创建数据库和表

       create database day;
       use day;
       create table user(
        id int primary key auto_increment,
        username varchar(20),
        password varchar(20),
        email varchar(50),
        phone varchar(20)
        );
    
       insert into user values (null,'aaa','123','[email protected]','15845612356');
       insert into user values (null,'bbb','123','[email protected]','15845612356');
       insert into user values (null,'ccc','123','[email protected]','15845612356');

     

  • 创建实体类 (JavaBean类)

 

  • 导入jar包

AJAX(JavaScript、JQuery)、使用AJAX完成用户名的异步请求校验 、使用JQ完成用户名异步校验 、使用JQ完成仿百毒搜索提示的效果

  • 引入工具类(C3P0Utils),配置文件(c3p0-config.xml)

  • 页面的准备

2.代码实现

 

案例二:使用JQ完成用户名异步校验

一,需求分析

​ 我们有一个网站,网站中都有注册的页面,当我们在注册的页面中输入用户名的时候,这个时候会提示,用户名是否存在。

AJAX(JavaScript、JQuery)、使用AJAX完成用户名的异步请求校验 、使用JQ完成用户名异步校验 、使用JQ完成仿百毒搜索提示的效果

 

二,技术分析

1.JQuery的Ajax

1.1  为什么要使用JQuery的AJAX

​ 因为传统(js里面)的AJAX的开发中,AJAX有两个主要的问题:

​ 浏览器的兼容的问题 , 编写AJAX的代码太麻烦而且很多都是雷同的。

​ 在实际的开发通常使用的Ajax是jQuery的ajax

1.2JQuery的Ajax的API(重点掌握)

  • $.get(路径,[请求参数],[回调函数],[数据类型]); 数据类型:默认是字符串

  • $.post(路径,[请求参数],回调函数,[数据类型]); 数据类型:默认是字符串

  • $.getJSON(url,请求参数, 回调函数) 使用场景:服务器端响应给客户端的数据是json类型的时候

2.入门

get方式

 $("#btn1").click(function(){
        //发送请求; 
        $.get(url,[params],[function(result){}])
​
        $.get("${pageContext.request.contextPath }/demo01",     {"username":"zs","password":"123456"},function(result){ 
            alert(result);
        });
    });


post方式

  $("#btn2").click(function(){
​
        //发送请求;
     $.post(url,[params],[function(result){}])
​
     $.post("${pageContext.request.contextPath }/demo01",{"username":"zs","password":"123456"}, function(result){
​
            alert(result);
        });
    });

 

 

三,思路分析

  1. 创建页面和数据库

  2. 给用户名输入框设置失去焦点事件(jq对象.blur(function(){})),创建一个匿名函数响应这个事件

  3. 在匿名函数

    ​ 获得用户输入的用户名

    ​ 发送Ajax请求,把用户名提交到CheckUserNameServlet

  4. 创建CheckUserNameServlet,在doGet()方法

    ​ 获得请求参数(用户名)

    ​ 调用业务,根据用户名获得用户 User

    ​ 判断user对象是否为空,给前端页面响应

四,代码实现

 

 

案例三:使用JQ的ajax完成仿百度提示的效果(返回json数据)

一,需求分析

​ 实现一个搜索页面,在文本框中输入一个值以后,给出相应的内容提示

二,技术分析

​ 1.什么是JSON(重点)

JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

  • 可以理解为是一个特殊的字符串格式数据.

2. JSON数据格式

2.1JSON对象

​ 格式:{}

  • 里面的值以key:value的形式存在,key是字符串

  • 如果有多个中间通过,隔开(最后一个,省略)

  • value可以是任何合法的数据类型

2.2JSON数组

​ 格式[]

3.JSON的生成工具json-lib(掌握)

Gson(谷歌公司开发的) 阿里开发fast json

​ 作用:java对象和json数据进行转换

​ 使用步骤:

​ 1.导入jar包

​ 2.调用API

​ JSONObject.fromObject(map或者javabean); 把map或者javabean转成JSON对象{key:value}

​ JSONArray.fromObject(java的数组或者list);把数组/或者list转成JSON数组

三,思路分析

  1. 创建数据库和页面

  2. 给输入框设置键盘抬起事件(jq对象.keyup(function(){})),创建匿名函数响应这个事件

  3. 在匿名函数

    ​ 获得用户输入的关键词

    ​ 发送Ajax请求,把关键词提交到WordServlet

    ​ 拿到结果展示

  4. 创建WordServlet ,在doGet()方法里面:

    ​ 获得参数(关键词)

    ​ 调用业务,根据关键词获得数据 List<Word>

    ​ 把list转成JSONArray,响应给前台

    5.在前台拿到Json字符串,并展示

四,代码实现

1.环境的准备

  • 创建数据库

    create table words(
        id int primary key auto_increment,
        word varchar(50)
    );
    
    insert into words values (null, '张三');
    insert into words values (null, '张三疯');
    insert into words values (null, '张无忌');
    insert into words values (null, '张学友');
    insert into words values (null, '千张皮');
    insert into words values (null, '赵四');
    insert into words values (null, '赵国强');
    insert into words values (null, '中华人民共和国');
    insert into words values (null, '李四');
    insert into words values (null, '李世民');
    insert into words values (null, '小李子');
    insert into words values (null, '李维');
    insert into words values (null, '李白');
    insert into words values (null, '大白菜');
    insert into words values (null, '大白');
    insert into words values (null, '赵忠祥');
    insert into words values (null, '小学妹');
    insert into words values (null, '小沈阳');
    insert into words values (null, '小泽玛利亚');
    insert into words values (null, '玛丽莲梦娜');
    insert into words values (null, '马丽');
    insert into words values (null, '麦当劳');
    insert into words values (null, '麦当娜');
    insert into words values (null, '欧阳娜娜');​
    insert into words values (null, '欧阳锋');​
    insert into words values (null, '克里斯蒂亚诺');
    insert into words values (null, '马德亚诺');
    insert into words values (null, '皇家马德里');
    insert into words values (null, '德国');
    insert into words values (null, '小白菜');
    insert into words values (null, '波尔图');
    insert into words values (null, '波多野结衣');
    insert into words values (null, '波波维奇');
    insert into words values (null, '长头发大波浪');
    insert into words values (null, '长沙');
    insert into words values (null, '厂长的F6');
    insert into words values (null, '黑马程序员');
    insert into words values (null, '黑猫警长');
    insert into words values (null, '黑色毛衣');
    insert into words values (null, '黑车司机');
    insert into words values (null, '传智播客');
    insert into words values (null, '传道授业');
    insert into words values (null, '互联网**');
    insert into words values (null, '武林外传');
    insert into words values (null, '传销组织');

     

  • 创建页面,search.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
    <script type="text/javascript">
        function fn1() {
            //先将div隐藏
            $("#divId").hide()
            //事件触发后的响应,先服务器发送请求将输入框中的值传过去进行查询
            //1.获取到输入框中的值
            var val = $("#inputId").val()
            //2.往服务器发送请求,将val带过去,接收响应的json数据
            if (val != "" && val != null) {
                //让div显示
                $("#divId").show()
                //getJSON()方法,用于发送GET请求,获取服务器响应的json数据
                $.getJSON("/AjaxDemo/search?keyword="+val,function(data){
                    //data就是服务器响应的json数据
                    $("#tb").html("")
                    //拿到json数组之后,遍历数组,将data转换成jQuery对象之后进行遍历
                    $(data).each(function (index,result) {
                        //遍历出来的每一个对象就叫做result
                        var word = result.word;
                        //每遍历出一条数据,就往table中添加一行!!!
                        $("#tb").append("<tr><td>"+word+"</td></tr>")
                    })
                })
            }
        }
    </script>
    </head>
    <body>
        <center>
    ​
            <h1>嘿嘿</h1>
            <input onkeyup="fn1()" id="inputId" type="text" style="width: 500px; height: 38px;" />
            <input type="button" style="height: 38px;" value="嘿嘿一下" />
            <div id="divId" style="display:none; width: 500px; border: 1px red solid; height: 300px; position: absolute; left: 398px;">
            <table width="100%" id="tb"></table>
    
            </div>
        </center>
    </body>
    </html>

     

  • 创建查询的Servlet

    package com.it.web.servlet;
    import java.io.IOException;
    import java.util.List;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import com.it.domain.Word;
    import com.it.service.SearchService;
    import net.sf.json.JSONArray;
    /**
     *负责搜索的Servlet
     */
    public class SearchServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		//1.接收客户端传过来的参数(关键字)
    		String keyword = request.getParameter("keyword");
    		keyword = new String(keyword.getBytes("ISO8859-1"), "UTF-8");
    		//2.调用业务层的方法来根据关键字进行查询
    		SearchService service = new SearchService();
    		List<Word> words = service.searchWords(keyword);
    		//3.将结果集合转换成json数组
    		JSONArray jsonArray = JSONArray.fromObject(words);
    		//将jsonArray对象转换成字符串
    		String arr = jsonArray.toString();
    		System.out.println(arr);
    		response.setContentType("text/html;charset=utf-8");
    		//4.将jsonArray字符串传给客户端
    		response.getWriter().println(arr);
    	}
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		doGet(request, response);
    	}
    
    }

     

  • 创建SearchService
package com.it.service;
import java.util.List;
import com.it.dao.WordDao;
import com.it.domain.Word;
​​​​​​​
public class SearchService {
	/**
     * 根据关键字查询结果
	 * @param keyword
	 * @return
	 */
	public List<Word> searchWords(String keyword){
		//调用dao的代码取数据库查询
		WordDao dao = new WordDao();
		return dao.searchWords(keyword);
	}
}
  ​
  • 创建SerachDao
    
package com.it.dao;
import java.sql.SQLException; 
import java.util.ArrayList; 
import java.util.List;
import org.apache.commons.dbutils.QueryRunner; 
import org.apache.commons.dbutils.handlers.BeanListHandler;
import com.it.domain.Word; 
import com.it.utils.C3P0Util;

public class WordDao {
 /**
   根据关键字去数据库查询结果集合
 * @param keyword
 * @return
 */
public List<Word> searchWords(String keyword){
	QueryRunner runner = new QueryRunner(C3P0Util.getDataSource());
	String sql = "select * from words where word like ?";
	List<Word> words = new ArrayList<>();
	try {
		words = runner.query(sql, new BeanListHandler<>(Word.class), "%"+keyword+"%");
	} catch (SQLException e) {
		e.printStackTrace();
	}
	    return words;
}
}

 

相关文章: