JavaWeb+在线图书商城+Ajax(异步的 JavaScript 和 XML)(超详细)

🙈作者简介:练习时长两年半的Java up主
🙉个人主页:老茶icon
🙊 ps:点赞👍是免费的,却可以让写博客的作者开兴好久好久😎
📚系列专栏:Java全栈,计算机系列(火速更新中)
💭 格言:种一棵树最好的时间是十年前,其次是现在
🏡动动小手,点个关注不迷路,感谢宝子们一键三连

课程名:Java

内容/作用:知识点/设计/实验/作业/练习

学习:JavaWeb+在线图书商城+Ajax(异步的 JavaScript 和 XML)

续前章内容:在线图书商城

环境与设备

1.软件:IntelliJ IDEA 2022.3.2
2.环境:Windows 11 and JDK 11

内容:

Ajax

AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。

AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。

任何的浏览器都支持ajax。通过原生的js使用ajax极不方便,这里使用jquery封装后的ajax使用。

使用

1.在页面中引入jquery文件

<script src="jquery文件路径"></script>

2.给某个节点绑定事件后使用ajax提交数据

<script>
	$("#btn").click(()=>{
        $.ajax({
            //访问的地址
            url:'URL地址',
            //提交的数据,以键值对的形式提交,也可以提交单个数据
            data:{
                id:123,
                op:"xxx"
            },
            //提交方式
            type:"post",
            //访问成功后的回调函数
            succuss:(res)=>{//res为访问URL地址后的返回值
                
            },
            //访问失败后的回调函数
            error:(res)=>{}
        });
    });
</script>

登录

dao

public Customer findByPhoneAndPwd(String phone, String password) {
    String sql = "select * from customer where phone=? and password=?";
    conn = DBHelper.getConn();
    try {
        pst = conn.prepareStatement(sql);
        pst.setString(1, phone);
        pst.setString(2, password);
        rs = pst.executeQuery();
        while (rs.next()) {
            int id = rs.getInt(1);
            String nickName = rs.getString(4);
            String trueName = rs.getString(5);
            String address = rs.getString(6);
            return new Customer(id, phone, password, nickName, trueName, address);
        }
    } catch (SQLException e) {
        System.out.println("登录异常" + e);
    } finally {
        DBHelper.release(conn, pst, rs);
    }
    return null;
}

service

public Customer login(String phone, String password) {
    return customerDao.findByPhoneAndPwd(phone, password);
}

servlet

case "login":
    String phone = req.getParameter("phone");;
    String password = req.getParameter("password");
    Customer login = customerService.login(phone, password);
    if (login != null) {
        //登录成功后,创建购物车对象,保存到session中
        Cart cart = new Cart();
        session.setAttribute("cart", cart);
        //将登录的用户保存在session中
        session.setAttribute("customer", login);
        //跳转到查询首页数据的servlet
        //resp.sendRedirect("http://localhost:8080/book_shop/book?op=queryByPage&page=1&keyword=");
    } else {
        //错误时,给前端反馈的字符串
        resp.getWriter().print("error");
    }
break;

页面ajax部分

$("#sub").bind("click",()=>{
    $.ajax({
        url:"http://localhost:8080/book_shop/customer",//提交的路径
        data:{//提交的数据data:{k:v,k:v}   data:xxx
            op:"login",
            phone:$(".inp[name=phone]").val(),
            password:$(".inp[name=password]").val()
        },
        type:"post",//提交方式
        success:(res)=>{
            if(res=="error"){
                alert("用户名或密码错误")
            }else{
                location.href="http://localhost:8080/book_shop/book?op=queryByPage&page=1&keyword=";
            }
        }
    });
})

注册

dao

/*
     * 检测电话是否存在
     * */
public int phoneExists(String phone) {
    //查询该电话出现的次数
    String sql = "select count(id) from customer where phone=?";
    conn = DBHelper.getConn();
    try {
        pst = conn.prepareStatement(sql);
        pst.setString(1, phone);
        rs = pst.executeQuery();
        //返回查询到的结果
        if (rs.next()) {
            return rs.getInt(1);
        }
    } catch (SQLException e) {
        System.out.println("检测电话是否存在" + e);
    } finally {
        DBHelper.release(conn, pst, rs);
    }
    return 0;
}
/*
	真正添加
*/
public int insert(Customer customer) {
    String sql = "insert into customer values(null,?,?,?,?,?)";
    conn = DBHelper.getConn();
    try {
        pst = conn.prepareStatement(sql);
        pst.setString(1, customer.getPhone());
        pst.setString(2, customer.getPassword());
        pst.setString(3, customer.getNickName());
        pst.setString(4, customer.getTrueName());
        pst.setString(5, customer.getAddress());
        return pst.executeUpdate();
    } catch (SQLException e) {
        System.out.println("注册异常" + e);
    } finally {
        DBHelper.release(conn, pst, rs);
    }
    return 0;
}

service

/*
     * 注册业务流程
     * 根据电话查询是否存在,不存在则添加,存在返回false
     * */
public boolean register(String phone, String password) {
    //检测电话是否存在
    if (customerDao.phoneExists(phone) == 1) {
        return false;
    }
    //真实注册
    Customer customer = new Customer();
    customer.setPhone(phone);
    customer.setPassword(password);
    customer.setNickName("用户" + phone.substring(7));
    return customerDao.insert(customer) > 0;
}

servlet

case "register":
    //注册,注册的电话号码不能重复
    String regPhone = req.getParameter("phone");;
    String resPwd = req.getParameter("password");
    //调用注册
    if (customerService.register(regPhone, resPwd)) {
        resp.getWriter().print("注册成功");
    } else {
        resp.getWriter().print("该手机号码已注册");
    }
break;
    case "checkPhone":
    String checkPhone = req.getParameter("phone");
    resp.getWriter().print(customerService.phoneExists(checkPhone));
break;

页面js部分

<script>
    /*电话文本框内容改变事件*/
    $("input[name=phone]").change(function () {
        $.ajax({
            url: "http://localhost:8080/book_shop/customer",
            data: {
                op: "checkPhone",
                phone: $(this).val()
            },
            type: "post",
            success: (res) => {
                if (res == "true") {
                    //显示提示文字
                    $("#warning").show();
                    //禁用按钮,修改按钮文件
                    $("#sub").attr("disabled","true");
                    $("#sub").val("请重新输入手机号码");
                } else {
                    //隐藏提示文字,恢复按钮功能
                    $("#warning").hide();
                    $("#sub").removeAttr("disabled");
                    $("#sub").val("注册");
                }
            }
        });
    });
    /*表单提交事件*/
    document.forms[0].onsubmit = () => {
        var phone = document.querySelector(".inp[name=phone]").value;
        var password = document.querySelector(".inp[name=password]").value;
        //1开头的11位数字
        var regexPhone = /^1\d{10}$/;
        //非空格的至少6位密码
        var regexPwd = /^[^\s]{6,}$/;
        if (!regexPhone.test(phone)) {
            alert("电话格式有误");
            return false;
        }
        if (!regexPwd.test(password)) {
            alert("密码中不能出现空格且至少6位");
            return false;
        }
    }
</script>

退出

servlet

case "logout":
    //销毁session
    session.invalidate();
    //跳转登录页
    resp.sendRedirect("/book_shop/pages/login.html");
break;

总结

   好好学习,天天向上。

往期专栏
Java全栈开发
数据结构与算法
计算机组成原理
操作系统
数据库系统
物联网控制原理与技术
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员老茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值