1 删除用户信息

·delUserInfo 方法
将当前用户的信息删除,浏览器会刷新当前页,转向新的响应内容页面。
缺点:不能在保留当前页的情况下,将用户删除并显示。


delete from  t_user where uid = ?;
<a class="button border-red" 
    href="data?method=delUserInfo&uid=${user.uid}" 
    onclick="return del()">
     <span class="icon-trash-o"></span> 删除
</a>

<script>
function del(){ 
    return confirm("您确定要删除吗?"); 
}
</script>
//删除用户信息
    public void delUserInfo(HttpServletRequest req,HttpServletResponse resp) throws IOException{

            //获取请求信息
                String uid = req.getParameter("uid");
            //处理请求信息
                // 创建业务层对象
                UserService us = new UserServiceImpl();
                int i = us.delUserInfo(uid);
                if(i > 0){
                    resp.getWriter().print("uid为 "+uid+" 的用户已被删除");
                }else{
                    resp.getWriter().print("uid为 "+uid+" 的用户删除失败");
                }
            //响应处理结果
    }


2 AJax 技术概述和访问原理

ajax 学习:
问题: 怎么在保留当前页面信息的基础上显示新的信息呢?
解决:使用 ajax
特点: 实现网页的局部刷新
应用前景:
搜索框提示语
地图
网页的其他功能(增加删除)

2.1 Ajax 访问原理

请求方式:
form 标签中 action属性
a 标签中 href 属性
js中 window.location.href=""
对于服务器来说,请求方式来自哪里服务器不知道,只处理请求。
ajax 引擎对象:XMLHttpRequest
open 方法,创建请求对象
send 方法,发送请求数据


jquery 同步 迭代_异步访问 不接收


2.2 ajax 与 非ajax


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title> ajax 技术 </title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
    <script type="text/javascript">
        //非 ajax
        function test(){

            window.location.href="my";

        }
        // ajax
        function testAjax(){
            //声明 ajax 对象
            var ajax;
            //创建 ajax 对象
            if(window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
                // 获取 ajax 引擎对象
                ajax = new XMLHttpRequest();

            }else if(window.addObject){// code for IE6, IE5
                ajax = new ActiveXObject("Microsoft.XMLHTTP");
            }
            //声明 接受服务器的响应结果
            // 存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。
            ajax.onreadystatechange=function(){

                 //获取响应内容   
                 var data = ajax.responseText;
                 // 获取 div 对象
                 var div = document.getElementById("divShow");
                 // 将 响应显示在 div 中
                 div.innerHTML = data;

            }

            //向服务器发送请求
            ajax.open("get","my");
            ajax.send(null);

        }

        function testJs(){

            var  btn = document.getElementById("btn");
            //绑定事件
            btn.onclick = function(){

                alert("绑定事件提示");
            }

        }

    </script>

  </head>

  <body onload="testJs()">

        <input type="button"  value="非ajax"  onclick="test()">
        <input type="button"  value="ajax"  onclick="testAjax()">
        <input type="button"  value="ajax" id="btn">
        <hr />
        <div id="divShow" style="width: 200px;height:200px;border:solid 1px">


        </div>

  </body>
</html>


2.3 Ajax 流程

  1. 创建 Ajax 引擎对象
  2. 声明 事件监听:监听ajax对象的属性readyState的值,一旦 readyState 的值发生变化就会触发声明函数的执行
  3. ajax 状态码 之 readyState的值
    0: 表示创建 ajax 对象
    1: 表示请求创建但是未发送
    2: 表示请求发送
    3: 请求处理完毕,正在接收响应内容
    4:响应内容接收完毕
  4. 创建并发送 ajax 对象
  5. 创建 ajax 请求(设置异步或者同步)
    ajax.open(method,url,ansyc)
    method: 表示请求方式
    get 方法:以 ? 方法拼接在 url 的后面参数间用 & 隔开。注意请求数据不能写在 send方法中
    post 方法:需要单独的进行请求数据的设置。使用 ajax.
    设置请求数据为键值对数据。如果有请求数据则 ajax.send("键值对数据&键值对数据...") ,如果没有请求数据,则 ajax.send(null)

    url: 请求地址
    ansyc 设置异步或者同步
    异步:当前 Js 函数继续执行,无须等待ajax响应及响应处理
    同步:当前 JS 函数不不继续执行,等待 ajax 响应及响应处理

3 Ajax 状态码 之 readyState

0: 表示创建 ajax 引擎对象
1: 表示请求创建但是未发送
2: 表示请求发送
3: 请求处理完毕,正在接收响应内容
4:响应内容接收完毕(重要状态)
通过 ajax 状态码,可以明确知道请求在什么时候创建,什么时候发送,以及什么时候接受响应数据,响应数据完全接受的状态。


// 查看 ajax 状态码
alert(ajax.readyState);
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title> ajax 技术 </title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
    <script type="text/javascript">
        //非 ajax
        function test(){

            window.location.href="my";

        }
        // ajax
        function testAjax(){
            //声明 ajax 对象
            var ajax;
            //创建 ajax 对象
            if(window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
                // 获取 ajax 引擎对象
                ajax = new XMLHttpRequest();

            }else if(window.addObject){// code for IE6, IE5
                ajax = new ActiveXObject("Microsoft.XMLHTTP");
            }

            //声明 接受服务器的响应结果
            // 存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。
            ajax.onreadystatechange=function(){
                //小优化
                // 当响应内容完全接受完毕时,将响应内容显示到页面中
                if(ajax.readyState == 4){
                     //获取响应内容   
                     var data = ajax.responseText;
                     // 获取 div 对象
                     var div = document.getElementById("divShow");
                     // 将 响应显示在 div 中
                     div.innerHTML = data;                      
                }
            }

            //向服务器发送请求
            ajax.open("get","my");
            ajax.send(null);

        }

        function testJs(){

            var  btn = document.getElementById("btn");
            //绑定事件
            btn.onclick = function(){

                alert("绑定事件提示");
            }

        }

    </script>

  </head>

  <body onload="testJs()">

        <input type="button"  value="非ajax"  onclick="test()">
        <input type="button"  value="ajax"  onclick="testAjax()">
        <input type="button"  value="ajax" id="btn">
        <hr />
        <div id="divShow" style="width: 200px;height:200px;border:solid 1px">


        </div>

  </body>
</html>


4 Ajax 响应状态码 status

200 表示一切正常
404 请求资源不存在
500 服务内部错误(繁忙)


ajax.status == 404
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title> ajax 技术 </title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
    <script type="text/javascript">
        //非 ajax
        function test(){

            window.location.href="my";

        }
        // ajax
        function testAjax(){
            //声明 ajax 对象
            var ajax;
            //创建 ajax 对象
            if(window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
                // 获取 ajax 引擎对象
                ajax = new XMLHttpRequest();

            }else if(window.addObject){// code for IE6, IE5
                ajax = new ActiveXObject("Microsoft.XMLHTTP");
            }

            //声明 接受服务器的响应结果
            // 存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。
            ajax.onreadystatechange=function(){
                //小优化
                // 当响应内容完全接受完毕时,将响应内容显示到页面中
                if(ajax.readyState == 4){
                    //如果响应码正常
                    if(ajax.status == 200){
                         //获取响应内容   
                         var data = ajax.responseText;
                         // 获取 div 对象
                         var div = document.getElementById("divShow");
                         // 将 响应显示在 div 中
                         div.innerHTML = data;  

                        }else if(ajax.status == 404){
                             var div = document.getElementById("divShow");
                             div.innerHTML = "请求资源不存在";     
                        }
                        }else if(ajax.status == 500){
                             var div = document.getElementById("divShow");
                             div.innerHTML = "内部服务器繁忙";     
                        }else{
                             var div = document.getElementById("divShow");
                             div.innerHTML = "未知错误";        
                        }

            }

            //向服务器发送请求
            ajax.open("get","my");
            ajax.send(null);

        }

        function testJs(){

            var  btn = document.getElementById("btn");
            //绑定事件
            btn.onclick = function(){

                alert("绑定事件提示");
            }

        }

    </script>

  </head>

  <body onload="testJs()">

        <input type="button"  value="非ajax"  onclick="test()">
        <input type="button"  value="ajax"  onclick="testAjax()">
        <input type="button"  value="ajax" id="btn">
        <hr />
        <div id="divShow" style="width: 200px;height:200px;border:solid 1px">


        </div>

  </body>
</html>


5 异步同步技术 async

ansyc 设置异步或者同步
异步:当前 Js 函数继续执行,无须等待ajax响应及响应处理
同步:当前 JS 函数 不继续执行,等待 ajax 响应及响应处理
ajax.open(method,url,asyn);
asyn = true 表示异步,默认为异步
asyn = false 表示异步同步,等待服务器响应结果回来,再继续执行该函数


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>ajax 技术</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
<script type="text/javascript">
        //非 ajax
        function test(){

            window.location.href="my";

        }
        // ajax
        function testAjax(){
            //声明 ajax 对象
            var ajax;
            //创建 ajax 对象
            if(window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
                // 获取 ajax 引擎对象
                ajax = new XMLHttpRequest();

            }else if(window.addObject){// code for IE6, IE5
                ajax = new ActiveXObject("Microsoft.XMLHTTP");
            }

            //声明 接受服务器的响应结果
            // 存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。
            ajax.onreadystatechange=function(){
                //小优化
                // 当响应内容完全接受完毕时,将响应内容显示到页面中
                if(ajax.readyState == 4){
                    //如果响应码正常
                    if(ajax.status == 200){
                         //获取响应内容   
                         var data = ajax.responseText;
                         // 获取 div 对象
                         var div = document.getElementById("divShow");
                         // 将 响应显示在 div 中
                         div.innerHTML = data;       
                    }else if(ajax.status == 404){
                         var div = document.getElementById("divShow");
                         div.innerHTML = "请求资源不存在";     
                    }else if(ajax.status == 500){
                         var div = document.getElementById("divShow");
                         div.innerHTML = "内部服务器繁忙";     
                    }else{
                         var div = document.getElementById("divShow");
                         div.innerHTML = "未知错误";        
                    }
                }
            }

            //创建 ajax 请求
            ajax.open("get","my",false);
            //发送 ajax 请求
            ajax.send(null);
            //异步同步
            alert("异步同步");

        }

        function testJs(){

            var  btn = document.getElementById("btn");
            //绑定事件
            btn.onclick = function(){

                alert("绑定事件提示");
            }

        }

    </script>

</head>

<body onload="testJs()">

    <input type="button" value="非ajax" onclick="test()">
    <input type="button" value="ajax" onclick="testAjax()">
    <input type="button" value="ajax" id="btn">
    <hr />
    <div id="divShow" style="width: 200px;height:200px;border:solid 1px">


    </div>

</body>
</html>


jquery 同步 迭代_异步访问 不接收_02


6 Get 和 Post 请求方法

get 方法:以 ? 方法拼接在 url 的后面参数间用 & 隔开。
注意请求数据不能写在send方法中。
post 方法:需要单独的进行请求数据的设置。使用 ajax.
设置请求数据为键值对数据。如果有请求数据则 ajax.send("键值对数据&键值对数据...") ,
如果没有请求数据,则 ajax.send(null)


//创建 ajax 请求
ajax.open("get","my?uname=张三&pwd=123",false);
//发送 ajax 请求
ajax.send(null);
// post 请求
// 创建 ajax 请求
ajax.open("post", "my", false);
//设置请求头
ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
//发送 ajax 请求
ajax.send("uname=张三&pwd=123");


7 Json 对象与响应数据

7.1 Json 对象

json 是一种 Js 创建对象中声明的一种格式
使用 Json 对象的好处:保证对象中数据的紧密性和完整性
使用 :在服务器端将要响应的数据拼接成 json 格式的字符串。这样客户端(浏览器端)在接受到响应数据后可以 使用 eval 方法将 json 格式的字符串数据直接转换为 对应的 JS 对象,便于数据的操作。在服务器端使用类似 Gson 的工具包完成 json格式的字符串的拼接。
Json 的格式:


var 对象名 = {

    键名:"值",
    键名:"值",
    ...
    键名:"值",
}
//第一种方法创建 json 对象
var obj = {};
obj.name = "张三";
obj.pwd = "123";
//第二种方法创建 json 对象
var obj2 = {
    name:"李四",
    pwd:"123",
    sex:"男"
};
//输出
alert(obj.name+"  "+obj2.name);


7.2 Ajax 之 响应数据

服务器响应给浏览器的数据应该是字符串类型
但是如果数据量比较大,我们就需要在服务端将数据拼接上一个良好的字符串格式数据,
响应给浏览器根据格式进行数据的解析和使用
问题:
什么昂的格式算是良好格式呢?
解决:
使用 json 数据格式
使用 js 中 eval 方法将字符串转成 JS 对象


package cn.szxy.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.gson.Gson;

import cn.szxy.pojo.User;

public class MyAjax extends HttpServlet {

        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {


                    //设置请求编码格式
                    req.setCharacterEncoding("utf-8");
                    //设置响应编码格式
                    resp.setContentType("text/html;charset=utf-8");
                    //获取请求数据
                    String uname = req.getParameter("uname");
                    String pwd = req.getParameter("pwd");

                    System.out.println(uname+"----"+pwd);

                    try {
                        new Thread().sleep(2000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    //处理请求数据
                    //int i = 1/0;
                    User user = new User();
                    user.setName("张三");
                    user.setPwd("123");
                    user.setSex("男");
                    user.setAge(20);

                    //将 user 对象中的数据转换成 json 格式的数据
                //  String str = new String("{uname:'张三',pwd:'123',sex:'男',age:20}");
                    String str= new Gson().toJson(user);
                    System.out.println(str);

                    //响应处理结果
                    PrintWriter out = resp.getWriter();
                    /*out.write("ajax学习");*/
                    out.write(str);

        }
}
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>ajax 技术</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
<script type="text/javascript">
        //非 ajax
        function test(){

            window.location.href="my";

        }
        // ajax
        function testAjax(){
            //声明 ajax 对象
            var ajax;
            //创建 ajax 对象
            if(window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
                // 获取 ajax 引擎对象
                ajax = new XMLHttpRequest();

            }else if(window.addObject){// code for IE6, IE5
                ajax = new ActiveXObject("Microsoft.XMLHTTP");
            }

            //声明 接受服务器的响应结果
            // 存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。
            ajax.onreadystatechange=function(){
                //小优化
                // 当响应内容完全接受完毕时,将响应内容显示到页面中
                if(ajax.readyState == 4){
                    //如果响应码正常
                    if(ajax.status == 200){
                         //获取响应内容   
                         var data = ajax.responseText;
                         //处理响应内容
                         eval("var obj="+data);
                         // 获取 div 对象
                         var div = document.getElementById("divShow");
                         // 将 响应显示在 div 中
                         div.innerHTML = obj.name;       
                    }else if(ajax.status == 404){
                         var div = document.getElementById("divShow");
                         div.innerHTML = "请求资源不存在";     
                    }else if(ajax.status == 500){
                         var div = document.getElementById("divShow");
                         div.innerHTML = "内部服务器繁忙";     
                    }else{
                         var div = document.getElementById("divShow");
                         div.innerHTML = "未知错误";        
                    }
                }
            }

            // get 请求
            /* //创建 ajax 请求
            ajax.open("get","my?uname=张三&pwd=123",false);
            //发送 ajax 请求
            ajax.send(null); */
            // post 请求
            // 创建 ajax 请求
            ajax.open("post", "my", false);
            //设置请求头
            ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
            //发送 ajax 请求
            ajax.send("uname=张三&pwd=123");

            //异步同步
             var div = document.getElementById("divShow");          
            alert(div.innerHTML);

        }

        function testJs(){

            var  btn = document.getElementById("btn");
            //绑定事件
            btn.onclick = function(){

                alert("绑定事件提示");
            }

        }

        //第一种方法创建 json 对象
        var obj = {};
        obj.name = "张三";
        obj.pwd = "123";
        //第二种方法创建 json 对象
        var obj2 = {
                name:"李四",
                pwd:"123",
                sex:"男"
        };
        //输出
        alert(obj.name+"  "+obj2.name);

    </script>

</head>

<body onload="testJs()">

    <input type="button" value="非ajax" onclick="test()">
    <input type="button" value="ajax" onclick="testAjax()">
    <input type="button" value="ajax" id="btn">
    <hr />
    <div id="divShow" style="width: 200px;height:200px;border:solid 1px">


    </div>

</body>
</html>


8 Ajax 流程

  1. 创建 ajax 引擎对象 XMLHttpRequest
  2. 声明事件监听

ajax 状态码等于 4
ajax 响应码
获取响应内容(普通格式字符串或者 Json格式的字符串)
处理响应内容

  1. 创建并发送 ajax 请求
  2. 创建 ajax 请求(请求方式,请求地址,同步或异步)
  3. 发送 ajax 请求
  4. 其他操作
graph LR
A[创建 Ajax 对象] --> B[声明事件监听]
B-->C[创建并发送 ajax 请求]
C-->D[其他操作]


9 用户注册

功能:用户名是否被注册校验
思路:

  1. 用户书写用户名信息,在失去焦点是进行用户校验
  2. 失去焦点发送请求到服务器,服务器根据用户名信息去数据库中查询该用户名是否存在
  3. 将校验结果响应客户端
  4. 在当前页面,失去焦点后用户名输入框后显示提示语

技术:
使用 ajax 技术

9.1 前端代码


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>注册</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">

    <script>
        // 检查用户是否已被注册
        function checkName(){
            // 创建 ajax 对象
            var ajax = null;
            if(window.XMLHttpRequest){
                ajax = new XMLHttpRequest();
            }else if(window.addObject){// code for IE6, IE5
                ajax = new ActiveXObject("Microsoft.XMLHTTP");
            }
            //声明事件监听
            ajax.onreadystatechange=function(){
                //判断 ajax 状态码
                if(ajax.readyState == 4){
                    //判断 ajax 响应码
                    if(ajax.status == 200){
                        // 获取响应内容
                        var data = ajax.responseText;
                        // 处理响应内容
                        var span = document.getElementById("unameSpan");
                        if(eval(data)){
                            span.innerHTML = "用户名 OK";
                            span.style.color = "green";
                        }else{
                            span.innerHTML = "用户名已被注册";
                            span.style.color = "red";
                        }
                    }
                }
            } 

            // 创建并发送请求
            //声明事件监听
            var input = document.getElementById("uname");
            var val = input.value;
            ajax.open("get", "data?uname="+val,true);
            //发送请求
            ajax.send(null);
        }

    </script>
  </head>

  <body>
        <form action="#" >
            <label>用户名: </label>
            <input type="text" name="uname" id="uname" onblur="checkName()"/> <span id="unameSpan"></span>
        </form>


  </body>
</html>


9.2 后端代码


package cn.szxy.web;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.szxy.service.DataService;
import cn.szxy.service.impl.DataServiceImpl;

public class DataServlet extends HttpServlet {
    //声明  业务层对象
    DataService service = new DataServiceImpl();
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

            //设置请求编码格式
            req.setCharacterEncoding("utf-8");
            //设置响应编码格式
            resp.setContentType("text/html;charset=utf-8");
            //获取请求数据
            String uname = req.getParameter("uname");
            //处理请求数据
            boolean flag = service.selUserByName(uname);
            //响应处理结果
            if(!flag){//表示该用户名未被注册
                resp.getWriter().write("true");//直接响应 true ,可以降低 前端与后端之间的耦合
            }else{//表示该用户名已被注册
                resp.getWriter().write("false");
            }
    }
}
package cn.szxy.service.impl;

import cn.szxy.dao.DataDao;
import cn.szxy.dao.impl.DataDaoImpl;
import cn.szxy.service.DataService;

public class DataServiceImpl implements DataService{
    // 获取 dao 层对象
    DataDao dao = new DataDaoImpl();

    //根据用户名查询指定用户信息
    @Override
    public boolean selUserByName(String uname) {
        return dao.selUserByName(uname);
    }

}
package cn.szxy.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import cn.szxy.dao.DataDao;
import cn.szxy.util.DBUtil;



public class DataDaoImpl implements DataDao{

    // 查询用户是否已经被注册
    @Override
    public boolean selUserByName(String uname) {
        //声明变量
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        // 判断用户是否已被注册的标志,false 表示未被注册
        boolean flag = false;
        try {
            //获取数据库连接
            conn = DBUtil.getConnection();
            //定义 sql 语句
            String sql = "select * from t_user where name = ?";
            //获取 预处理发射器
            pstmt = conn.prepareStatement(sql);
            //占位符
            pstmt.setString(1, uname);
            //执行 sql 语句,得到结果集
            rs = pstmt.executeQuery();
            if(rs.next()){
                flag = true;
            }
            //判断
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            //关闭资源
            DBUtil.closeAll(rs, pstmt, conn);
        }
        //返回结果
        return flag;
    }

}


9.3 效果图


jquery 同步 迭代_ajax同步请求_03


10 Ajax 封装

解决:编写代码时出现了重复编写,影响了开发的效率
实现:相同的保留,不同的传参
请求方式:method
请求地址:url
请求参数:data 请求参数的格式为键值对,不同的键值对使用&隔开
实例:"a=1&b=2"
异步同步设置:ansyc
响应处理函数:deal200 该参数接受一个 JS 的 函数对象,函数对象中声明 ajax 响应数据的处理逻辑代码。
注意:函数对象需要声明一个形参用来接受要处理的响应数据
JS 函数可以不传值,有默认值

  • ajax.js
/**
 * 封装 Ajax 工具类
 * @param method    请求方式 Get、Post
 * @param url       请求地址
 * @param data      请求路径
 * @param deal200   处理请求的函数
 * @param ansyc     异步同步
 */
function myAjax(method, url, data, deal200, ansyc) {
    //创建 ajax 引擎对象
    var ajax = null;
    //判断浏览器类型
    if(window.XMLHttpRequest){
        ajax = new XMLHttpRequest();
    }else if(window.addObject){// code for IE6, IE5
        ajax = new ActiveXObject("Microsoft.XMLHTTP");
    }

    //声明事件监听
    ajax.onreadystatechange = function() {
        //判断 ajax状态码   等于4表示响应结果接受完毕
        if (ajax.readyState == 4) {
            //判断 ajax 响应码
            if (ajax.status == 200) {
                //获取响应数据
                var data = ajax.responseText;
                if (deal200) {
                    deal200(data);
                }
            }
        }
    }

    //判断请求方式
    if (method == "get") {

        //创建并发送 ajax 请求
        ajax.open(method, url + (data == null ? "" : "?"+data), ansyc);
        ajax.send(null);

    } else if (method == "post") {

        //创建 ajax 请求
        ajax.open(method, url, ansyc);
        //设置请求头,以键值对的方式发送表单数据
        ajax.setRequestHeader("Content-Type",
                "application/x-www-form-urlencoded");
        //发送 ajax 请求    
        ajax.send((data == null ? "" : data));
    }

}


  • 测试 ajax.js 工具类
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>封装 Ajax </title>
    <!--  引入 ajax 工具类 -->  
    <script type="text/javascript"  src="js/ajaxUtil.js"></script>

    <script type="text/javascript">
        // 调用 工具类
        myAjax("get","/ajax/my",null,function(data){
            alert("Test");
            alert(data);
        },true);
    </script>

  </head>

  <body>
    <input type="button" value="测试 ajax"  onclick="myAjax()">

  </body>
</html>


11 Jquery 封装 AJax

Jquery 是 Js 的一个轻量性框架,已经将 JS 创建的操作进行了封装,而 Ajax 也是
一部分,所以 JQuery 也已经将 ajax 进行了封装。

11.1 封装


$.get(url,data,function)   //get  请求方式   适用于简单的业务逻辑规则
$.post(url,data,function)  //post 请求方式   适用于简单的业务逻辑规则
$.ajax({json格式})  // 适用于复杂的业务逻辑规则

// url 请求地址
// data 请求参数


11.2 栗子


<script>
    // ajax 方式发送请求
    $.ajax({
    type: "get",
    url: "data",
    data: "uname="+$("#uname").val(),
    success: function(data){alert(data)}
    });
</script>
<!-- 引入 Jquery  -->
<script type="text/javascript" src="js/jquery.js"></script>
<script>
    $(function(){
        $("#uname").blur(function(){
            $.get("data",{uname:($("#uname").val())},function(data){
                // 处理响应内容
                var span = $("#unameSpan");
                if(eval(data)){
                    span.html("用户名 OK");
                    span.css("color","green");
                }else{
                    span.html("用户名已被注册");
                    span.css("color","red");
                }
            });
        });
    });
</script>