第9讲:使用ajax技术实现增删改查及分页显示功能(jQuery)

本篇内容详细讲解了如何利用jQuery的$.post, $.get, $.ajax方法进行AJAX操作,并结合HTML、MySQL数据库和Servlet技术,实现了在同一页面上的学校资料增删改查和分页显示功能。文中还介绍了相关Java后台代码和前端页面设计。" 71124512,1320959,Netty入门:构建Maven多模块Echo Server & Client,"['Netty', '网络编程', 'Java', '服务器开发', '客户端开发']

本讲内容首先讲解jQuery对ajax的支持,分别讲解$.post,$.get,$.ajax等方法,这些方法的参数,使用方法及区别。最后对ajax的综合应用举例:在同一个页面实现新增,修改,删除学校资料,分页列表等功能,前端使用html静态页面,使用MySQL数据库,后台使用servlet技术实现。

基础环境要求

序号资源描述
1需下载jQuery插件ajax技术基础
2需安装MySQL数据库及驱动程序驱动程序
3fastjson.jarJSON数据格式支持
4jsp项目支持基础jar包jsp开发环境
5        tomcat8.5jsp运行环境

 数据表结构

CREATE TABLE `college`  (
  `collegeId` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `collegeName` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '学校名称',
  `collegeAddr` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '学校地址',
  `pic` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '学校图片',
  `contact` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '联系人',
  `tel` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '电话',
  `remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '说明',
  PRIMARY KEY (`collegeId`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 12 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '学校表' ROW_FORMAT = Dynamic;

CollegeVo.java

package com.bean;

import java.io.Serializable;


public class CollegeVo implements Serializable {

    private int collegeId;
    private String collegeName;
    private String pic;
    private String collegeAddr;
    private String contact;
    private String tel;
    private String remark;


    public int getCollegeId() {
        return collegeId;
    }

    public void setCollegeId(int collegeId) {
        this.collegeId = collegeId;
    }

    public String getCollegeName() {
        return collegeName;
    }

    public void setCollegeName(String collegeName) {
        this.collegeName = collegeName;
    }

    public String getPic() {
        return pic;
    }

    public void setPic(String pic) {
        this.pic = pic;
    }

    public String getCollegeAddr() {
        return collegeAddr;
    }

    public void setCollegeAddr(String collegeAddr) {
        this.collegeAddr = collegeAddr;
    }

    public String getContact() {
        return contact;
    }

    public void setContact(String contact) {
        this.contact = contact;
    }

    public String getTel() {
        return tel;
    }

    public void setTel(String tel) {
        this.tel = tel;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }
}

 数据库连接类(DBConn.java)

package com.dao;

import java.sql.Connection;
import java.sql.DriverManager;

/*
* MySQL数据库的连接类
* */
public class DBConn {
    /*
    驱动
    mysql-connector-java-5.1.48.jar(支持mysql5.7,8.0等版本,字符集utf-8)
     */
    //必须导入mysql-connector-java-5.1.48.jar,才能找到com.mysql.jdbc.Driver驱动类
    static String driver="com.mysql.jdbc.Driver";
    //连接字符串,localhost(127.0.0.1)表示本机,3306是MySQL的默认端口,qq是数据库名称
    static String url= "jdbc:mysql://localhost:3306/practice?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true";
    //登录名称
    static String username = "root";
    //登录密码
    static String password = "1234";
    //静态变量
    static Connection conn;

    //静态代码块,程序启动不需要调用该代码,系统会自动执行,并且只会执行一次
    static {
        try {
            //1.加载驱动
            Class.forName(driver);
            //2.创建连接,执行该语句,如果没有异常出现,则数据库连接成功
            conn = DriverManager.getConnection(url, username, password);
        }catch (Exception ex){
            ex.printStackTrace();
        }
    }

    //创建连接的函数
    public static Connection open(){
        try {
            //如果conn没有连接到数据库,或者说断开了与数据库连接,则重新连接一次
            if (conn == null || conn.isClosed()) {

                //如果断开了与数据库的连接,再重新建立连接
                conn = DriverManager.getConnection(url,username,password);

            }else{
                return conn;  //如果正常连接,直接返回
            }
        }catch (Exception e){
            e.printStackTrace();
        }

        return conn;
    }

    //关闭连接
    public static void close(){
        try{
            if(conn != null || !conn.isClosed()){
                conn.close();
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

 数据库操作类(CollegeDAO.java)

package com.dao;

import com.bean.CollegeVo;
import com.bean.PageObject;
import com.bean.ProvinceVo;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;


public class CollegeDAO {

    //新增学校
    public boolean add(CollegeVo t) {
        try {
            Connection conn = DBConn.open();
            Statement stmt = conn.createStatement();
            String sql = "insert into college(collegeName,contact,tel,collegeAddr,remark,pic) values('";
            sql += t.getCollegeName() + "','";
            sql += t.getContact() + "','";
            sql += t.getTel() + "','";
            sql += t.getCollegeAddr() + "','";
            sql += t.getRemark() + "','')";
            System.out.println("sql=" + sql);
            //保存数据到teacher表中
            stmt.executeUpdate(sql);
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }
    //修改学校
    public boolean edit(CollegeVo t) {
        try {
            Connection conn = DBConn.open();
            Statement stmt = conn.createStatement();
            String sql = "update college set ";
            sql += " collegeName= '"+t.getCollegeName() + "',";
            sql += " contact='" + t.getContact() + "',";
            sql += " tel='" + t.getTel() + "',";
            sql += " collegeAddr='" + t.getCollegeAddr() + "',";
            sql += " remark='"+ t.getRemark() + "',pic='' where collegeId=" + t.getCollegeId();
            System.out.println("sql=" + sql);
            //保存数据到teacher表中
            stmt.executeUpdate(sql);
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }
    //删除学校
    public boolean del(String collegeId) {
        try {
            Connection conn = DBConn.open();
            Statement stmt = conn.createStatement();
            String sql = "delete from college  where collegeId=" + collegeId;
            System.out.println("sql=" + sql);
            //保存数据到teacher表中
            stmt.executeUpdate(sql);
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }

    public List<CollegeVo> getList(PageObject pager){
        List<CollegeVo> collegeList = new ArrayList<CollegeVo>();
        try{
            Connection conn = DBConn.open();
            Statement stmt = conn.createStatement();
            String sql = "select * from college limit " + pager.getStartIndex() + "," + pager.perCount;
            ResultSet rs = stmt.executeQuery(sql);
            while(rs.next()){
                CollegeVo c = new CollegeVo();
                c.setCollegeId(rs.getInt("collegeId"));
                c.setCollegeName(rs.getString("collegeName"));
                c.setContact(rs.getString("contact"));
                c.setTel(rs.getString("tel"));
                c.setCollegeAddr(rs.getString("collegeAddr"));
                c.setRemark(rs.getString("remark"));
                c.setPic(rs.getString("pic"));
                collegeList.add(c);
            }

        }catch (Exception e){
            e.printStackTrace();
        }
        return collegeList;
    }

    public CollegeVo getById(String collegeId){
        CollegeVo c = new CollegeVo();
        try{
            Connection conn = DBConn.open();
            Statement stmt = conn.createStatement();
            String sql = "select * from college where collegeId=" + collegeId;
            ResultSet rs = stmt.executeQuery(sql);
            if(rs.next()){
                c.setCollegeId(rs.getInt("collegeId"));
                c.setCollegeName(rs.getString("collegeName"));
                c.setContact(rs.getString("contact"));
                c.setTel(rs.getString("tel"));
                c.setCollegeAddr(rs.getString("collegeAddr"));
                c.setRemark(rs.getString("remark"));
                c.setPic(rs.getString("pic"));
            }

        }catch (Exception e){
            e.printStackTrace();
        }
        return c;
    }

    public int getCount(){
        int cnt = 0;
        try{
            Connection conn = DBConn.open();
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("select count(*) cnt from college");
            if(rs.next()){
                cnt = rs.getInt("cnt");
            }

        }catch (Exception e){
            e.printStackTrace();
        }
        return cnt;
    }

    //实现省市县三级联动
    /*
    * - 查询所有的省
    select * from province where id like '__0000';
    -- 查询江西省所有市
    select * from province where id like '36__00' and id !='360000';
    -- 查询赣州市所有的区县
    select * from province where id like '3602__' and id !='360200';
    * */
    public List<ProvinceVo> getCity(int type,String id){
        List<ProvinceVo> provList = new ArrayList<ProvinceVo>();
        try{
            Connection conn = DBConn.open();
            Statement stmt = conn.createStatement();
            String sql  = "";
            switch (type){
                case 1: //查询省
                    sql = "select * from province where id like '__0000'";
                    break;
                case 2: //查询市
                    sql = "select * from province where id like '"+ id+"__00' and id !='"+id+"0000'";
                    break;
                case 3: //查询区县
                    sql = "select * from province where id like '"+id+"__' and id !='"+id+"00'";
                    break;
            }
            ResultSet rs = stmt.executeQuery(sql);
            while(rs.next()){
                ProvinceVo p = new ProvinceVo();
                p.setId(rs.getString("id"));
                p.setName(rs.getString("name"));
                provList.add(p);
            }
        }catch (Exception e){
            e.printStackTrace();
        }

        return provList;
    }
}

分页对象(PageObject.java)

package com.bean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

//分页类
public class PageObject implements Serializable {
    //存放列表数据
    private List listData = new ArrayList();
    //当前页
    private int curPage =1;
    //每页显示记录条数
    public static int perCount=3;
    //总页数
    private int pageCount;
    //总记录数
    private int recCount;

    //分页起始位置 = (当前页-1)*每页显示的记录数=(curPage-1)*perCount;
    private int startIndex=0;

    public int getStartIndex() {
        return startIndex;
    }


    public List getListData() {
        return listData;
    }

    public void setListData(List listData) {
        this.listData = listData;
    }

    public int getCurPage() {
        return curPage;
    }

    //设置当前页
    public void setCurPage(int curPage) {
        if(curPage<1) {
            curPage = 1;
        }else if(curPage>pageCount){
            curPage = pageCount;
        }
        this.curPage = curPage;
        //计算起始位置
        this.startIndex = perCount*(curPage-1);
    }

    public int getRecCount() {
        return recCount;
    }

    //设置记录总数
    public void setRecCount(int recCount) {
        this.recCount = recCount;
        //设置总页数,ceil方法返回大于该数字本身的最小正整数
        this.pageCount = (int)Math.ceil(recCount*1.0/perCount);
    }

    public int getPageCount() {
        return pageCount;
    }
}

前端页面(collegeAdd.html)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>新增学校</title>

    <!--加载JQuery库-->
    <script src="../js/jquery-3.3.1.min.js"></script>
    <script type="text/javascript">
        function add(){
            if($("#collegeName").val() == ""){
                alert("学校名称不能为空。")
                $("#collegeName").focus();
                return;
            }
            if($("#contact").val() == ""){
                alert("请输入联系人。")
                $("#contact").focus();
                return;
            }
            if($("#tel").val() == ""){
                alert("请输入联系人电话。")
                $("#tel").focus();
                return;
            }
            //调用JQuery的post方法提交数据
            let url = "/ajaxProj/collegeServlet"
            $.post(
                url,
                {
                    collegeName:$("#collegeName").val(),
                    contact:$("#contact").val(),
                    tel:$("#tel").val(),
                    collegeAddr:$("#collegeAddr").val(),
                    remark:$("#remark").val(),
                    action:"add",
                    curPage:1
                },
                function (data){
                    //情况内容
                    clearContent();
                    //执行成功返回的结果
                    pageList(data);
                },
                "json"
            );
        }
        //修改
        function edit(collegeId){
            //调用JQuery的post方法提交数据
            let url = "/ajaxProj/collegeServlet"
            $.post(
                url,
                {
                    action:"edit",
                    collegeId:collegeId
                },
                function (data){

                    //执行成功,显示要修改的当前记录的值
                    $("#collegeId").val(data.college.collegeId);
                    $("#collegeName").val(data.college.collegeName);
                    $("#contact").val(data.college.contact);
                    $("#tel").val(data.college.tel);
                    $("#collegeAddr").val(data.college.collegeAddr);
                    $("#remark").val(data.college.remark);
                },
                "json"
            );
        }
        //修改保存
        function editSave(){
            if($("#collegeName").val() == ""){
                alert("学校名称不能为空。")
                $("#collegeName").focus();
                return;
            }
            if($("#contact").val() == ""){
                alert("请输入联系人。")
                $("#contact").focus();
                return;
            }
            if($("#tel").val() == ""){
                alert("请输入联系人电话。")
                $("#tel").focus();
                return;
            }
            //调用JQuery的post方法提交数据
            let url = "/ajaxProj/collegeServlet"
            $.post(
                url,
                {
                    collegeId:$("#collegeId").val(),
                    collegeName:$("#collegeName").val(),
                    contact:$("#contact").val(),
                    tel:$("#tel").val(),
                    collegeAddr:$("#collegeAddr").val(),
                    remark:$("#remark").val(),
                    action:"editSave",
                    curPage:1
                },
                function (data){
                    //情况内容
                    clearContent();
                    //执行成功返回的结果
                    pageList(data);
                },
                "json"
            );
        }

        //清空内容
        function clearContent(){
            $("#collegeName").val("");
            $("#collegeAddr").val("");
            $("#contact").val("");
            $("#tel").val("");
            $("#remark").val("");

        }
        //删除
        function del(collegeId){
            //调用JQuery的post方法提交数据
            if(!confirm('删除确认')){
                return ;
            }
            let url = "/ajaxProj/collegeServlet"
            $.post(
                url,
                {
                    action:"del",
                    collegeId:collegeId
                },
                function (data){

                    //执行成功,更新列表
                    listData(1);
                },
                "json"
            );
        }

        function listData(curPage){
            let url = "/ajaxProj/collegeServlet"
            $.post(
                url,
                {
                    action:"list",
                    curPage:curPage
                },
                function (data){
                    //执行成功返回的结果
                    pageList(data);

                },
                "json"
            );
        }
        function pageList(data){
            var collegeList = data.pager.listData;
            var li = "";
            //each就是循环语句,i是索引好,d代表collegevo对象
            $.each(collegeList,function (i,d){
                li += "<tr>";
                li += "<td>"+ d.collegeId +"</td>";
                li += "<td>"+ d.collegeName +"</td>";
                li += "<td>"+ d.contact +"</td>";
                li += "<td>"+ d.tel +"</td>";
                li += "<td>"+ d.collegeAddr +"</td>";
                li += "<td>"+ d.remark +"</td>";
                li += "<td align='center'><a href='javascript:void(0);' onclick='edit(" + d.collegeId +");'>修改</a>&nbsp;&nbsp;&nbsp;&nbsp;<a href='javascript:void(0);' onclick='del(" + d.collegeId +");'>删除</a></td>";
                li += "</tr>";
            })
            var tbodyList = $("#tbodyList");
            tbodyList.html(li);

            //分页代码
            var pagerTr = "<td>";
            pagerTr += "<a href='javascript:void(0);' onclick='listData(1)'>首页</a>&nbsp;&nbsp;&nbsp;&nbsp;";
            pagerTr += "<a href='javascript:void(0);' onclick='listData("+(data.pager.curPage-1)+")'>上一页</a>&nbsp;&nbsp;&nbsp;&nbsp;";
            pagerTr += "<a href='javascript:void(0);' onclick='listData("+(data.pager.curPage+1)+")'>下一页</a>&nbsp;&nbsp;&nbsp;&nbsp;";
            pagerTr += "<a href='javascript:void(0);' onclick='listData("+ data.pager.pageCount+")'>尾页</a>";
            pagerTr += "</td>";
            pagerTr += "<td align='right'>当前页"+data.pager.curPage + "/" + data.pager.pageCount + "页</td>";

            var pageSet = $("#pagerTr");
            console.log(pagerTr);
            pageSet.html(pagerTr);
            console.log(data);
        }
        listData(1);
    </script>
</head>
<body>
    <h2 align="center">新增学校</h2>
    <hr>
    <table align="center" border="1" width="800">
        <input name="collegeId" id="collegeId" type="hidden">
        <tr>
            <td align="right">学校名称</td>
            <td><input type="text" name="collegeName" id="collegeName"></td>
            <td><font size="2" color="red">*必填</font> </td>
        </tr>
        <tr>
            <td align="right">联系人</td>
            <td><input type="text" name="contact" id="contact"></td>
            <td><font size="2" color="red">*必填</font> </td>
        </tr>
        <tr>
            <td align="right">联系电话</td>
            <td><input type="text" name="tel" id="tel"></td>
            <td><font size="2" color="red">*必填</font> </td>
        </tr>
        <tr>
            <td align="right">学校地址</td>
            <td><input type="text" name="collegeAddr" id="collegeAddr"></td>
            <td><font size="2" color="red">&nbsp;</font> </td>
        </tr>
        <tr>
            <td align="right">学校介绍</td>
            <td><textarea name="remark" id="remark" style="height: 200px;width: 600px"></textarea></td>
            <td><font size="2" color="red">&nbsp;</font> </td>
        </tr>
        <tr>
            <td align="center" colspan="3">
                <input type="button" value="返回列表" onclick="listData();">
                <input type="button" value="新增" onclick="add();">
                <input type="button" value="修改" onclick="editSave();">
            </td>
        </tr>
    </table>
    <fieldset>
        <legend>学校资料列表</legend>
        <table align="center" border="1" width="1100" cellpadding="3" cellspacing="1">
            <thead>
            <tr>
                <th>学校ID</th>
                <th>学校名称</th>
                <th>联系人</th>
                <th>联系电话</th>
                <th>地址</th>
                <th>介绍</th>
                <th width="100">操作</th>
            </tr>
            </thead>
            <tbody id="tbodyList">

            </tbody>
        </table>
        <table  align="center" width="1100">
            <tr id="pagerTr">
            </tr>
        </table>
    </fieldset>
</body>
</html>

后台代码(CollegeServlet.java)

package com.servlet;

import com.alibaba.fastjson.JSONObject;
import com.bean.CollegeVo;
import com.bean.PageObject;
import com.dao.CollegeDAO;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@WebServlet(name = "CollegeServlet",value = "/collegeServlet")
public class CollegeServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        String action = request.getParameter("action");
        CollegeDAO dao = new CollegeDAO();
        if(action.equals("add")) {
            CollegeVo college = new CollegeVo();
            college.setCollegeId(0);
            college.setPic("");
            college.setCollegeName(request.getParameter("collegeName"));
            college.setContact(request.getParameter("contact"));
            college.setTel(request.getParameter("tel"));
            college.setCollegeAddr(request.getParameter("collegeAddr"));
            college.setRemark(request.getParameter("remark"));
            //数据库的操作
            if (dao.add(college)) {

                //返回结果
                list(request, out);
            } else {
                out.println("新增失败");
            }
        }else if(action.equals("editSave")) {
            CollegeVo college = new CollegeVo();
            college.setCollegeId(Integer.parseInt(request.getParameter("collegeId")));
            college.setPic("");
            college.setCollegeName(request.getParameter("collegeName"));
            college.setContact(request.getParameter("contact"));
            college.setTel(request.getParameter("tel"));
            college.setCollegeAddr(request.getParameter("collegeAddr"));
            college.setRemark(request.getParameter("remark"));
            //数据库的操作
            if (dao.edit(college)) {

                //返回结果
                list(request,out);
            } else {
                out.println("修改失败");
            }
        }else if(action.equals("edit")){
            String collegeId = request.getParameter("collegeId");
            CollegeVo college = dao.getById(collegeId);
            JSONObject json = new JSONObject();
            json.put("college",college);
            out.println(json.toJSONString());

        }else if(action.equals("del")){
            String collegeId = request.getParameter("collegeId");
            dao.del(collegeId);
            list(request,out);
        }else if(action.equals("list")){

            list(request,out);
        }
    }
    public void list(HttpServletRequest request, PrintWriter out){
        PageObject pager = new PageObject();
        CollegeDAO dao = new CollegeDAO();
        int cnt  = dao.getCount();
        //设置分页对象的记录总数
        pager.setRecCount(cnt);
        //设置当前页(第一次运行时curPage是空值null)
        if(request.getParameter("curPage") !=null) {
            //当前页面
            int curPage = Integer.parseInt(request.getParameter("curPage"));
            pager.setCurPage(curPage);
        }
        List<CollegeVo> collegeList = dao.getList(pager);
        pager.setListData(collegeList);
        JSONObject json = new JSONObject();
        json.put("pager", pager);
        System.out.println(json.toJSONString());
        out.println(json.toJSONString());
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

运行结果

本人从事软件项目开发20多年,2005年开始从事Java工程师系列课程的教学工作,录制50多门精品视频课程,包含java基础,jspweb开发,SSH,SSM,SpringBoot,SpringCloud,人工智能,在线支付等众多商业项目,每门课程都包含有项目实战,上课PPT,及完整的源代码下载,有兴趣的朋友可以看看我的在线课堂

讲师课堂链接:https://edu.youkuaiyun.com/lecturer/893

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

优快云专家-赖老师(软件之家)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值