【JavaWeb-Ajax】网站 – 通过省份 id 获取省份信息(通过Ajax实现局部刷新)

网站实现功能:

  • 通过输入省份编号,应用 Ajax 向服务端(tomcat服务器)发送请求,在服务端从数据库中取出对应信息打回客户端浏览器,局部刷新页面,来获取省份信息(省份名称,省份简称,省份的省会)。

网站结构:

网站预览:

建表语句:

CREATE TABLE pro (
    id int NOT NULL AUTO_INCREMENT,
    name varchar(255) DEFAULT NULL,
    jiancheng varchar(255) DEFAULT NULL,
    shenghui varchar(255) DEFAULT NULL,
    PRIMARY KEY (id)
);

INSERT INTO pro VALUES ('1','河北','冀','石家庄');
INSERT INTO pro VALUES ('2','山西','晋','太原市');
INSERT INTO pro VALUES ('3','内蒙古','蒙','呼和浩特市');
INSERT INTO pro VALUES ('4','辽宁','辽','沈阳');
INSERT INTO pro VALUES ('5','江苏','苏','南京');
INSERT INTO pro VALUES ('6','浙江','浙','杭州');
INSERT INTO pro VALUES ('7','安徽','皖','合肥');
INSERT INTO pro VALUES ('8','福建','闽','福州');
INSERT INTO pro VALUES ('9','江西','赣','南昌');

index.jsp(网站欢迎资源文件):

<%@ page contenttype="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>$Title$</title>

    <%--js代码--%>
    <script type="text/javascript">
        //定义函数,用来将json中的"value"(省份名称,简称,省份省会)输出到对应的三个文本框中
        function callBack(josn) {
            document.getElementById("provinceName").value = josn.provinceName;
            document.getElementById("provinceJianCheng").value = josn.jianCheng;
            document.getElementById("provinceShengHui").value = josn.shengHui;
        }

        function search() {
            //1、创建异步对象
            var xmlHttp = new XMLHttpRequest();

            //2、绑定事件
            xmlHttp.onreadystatechange = function () {
                //异步对象把从服务端接受过来的数据处理完 且 网络请求成功 时,执行if内代码
                if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
                    //通过 xmlHttp.responseText 属性来获取服务端返回的数据
                    var data = xmlHttp.responseText;
                    //eval函数,可以将字符串转换为json对象(不重要,不用细研究此函数)
                    var josnObj = eval("(" + data + ")");
                    //调用callBack,将jsonObj中的几个"value"写入到对应文本框中
                    callBack(josnObj);
                }
            };

            //3、初始异步对象的请求参数
            //获取provinceId文本框的值
            var provinceId = document.getElementById("provinceId").value;
            //发送请求(将省份id参数送到服务端)
            xmlHttp.open("get", "queryProvinceMessage?provinceId=" + provinceId, true);

            //4、发送请求
            xmlHttp.send();
        }
    </script>
</%--js代码--%></head>
<body>
<p>&#x901A;&#x8FC7;&#x7701;&#x4EFD;ID&#x6765;&#x83B7;&#x53D6;&#x7701;&#x4EFD;&#x4FE1;&#x606F;</p>
<table>
    <tr>
        <td>&#x7701;&#x4EFD;&#x7F16;&#x53F7;&#xFF1A;</td>
        <td>
            <input type="text" id="provinceId">
            <input type="button" value="&#x641C;&#x7D22;" onclick="search()">
        </td>
    </tr>

    <tr>
        <td>&#x7701;&#x4EFD;&#x540D;&#x79F0;&#xFF1A;</td>
        <td><input type="text" id="provinceName"></td>
    </tr>

    <tr>
        <td>&#x7701;&#x4EFD;&#x7B80;&#x79F0;&#xFF1A;</td>
        <td><input type="text" id="provinceJianCheng"></td>
    </tr>
    <tr>
        <td>&#x7701;&#x4F1A;&#x540D;&#x79F0;&#xFF1A;</td>
        <td><input type="text" id="provinceShengHui"></td>
    </tr>
</table>
</body>
</html>
</%@>

com.burnyouth.util.JdbcUtil(JDBC工具类):

package com.burnyouth.util;

import java.sql.*;

public class JdbcUtil {
    static {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    private JdbcUtil() {
    }

    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection("jdbc:mysql://localhost:3306/burning_youth"
                , "root", "888");
    }

    public static void close(Connection connection, Statement statement, ResultSet resultSet) {
        if (resultSet != null) {
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (statement != null) {
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

com.burnyouth.entity.Province(省份实体类):

package com.burnyouth.entity;

public class Province {
    private Integer provinceId;
    private String provinceName;
    private String jianCheng;
    private String shengHui;

    public Province() {
    }

    public Province(Integer provinceId, String provinceName, String jianCheng, String shengHui) {
        this.provinceId = provinceId;
        this.provinceName = provinceName;
        this.jianCheng = jianCheng;
        this.shengHui = shengHui;
    }

    public Integer getProvinceId() {
        return provinceId;
    }

    public void setProvinceId(Integer provinceId) {
        this.provinceId = provinceId;
    }

    public String getProvinceName() {
        return provinceName;
    }

    public void setProvinceName(String provinceName) {
        this.provinceName = provinceName;
    }

    public String getJianCheng() {
        return jianCheng;
    }

    public void setJianCheng(String jianCheng) {
        this.jianCheng = jianCheng;
    }

    public String getShengHui() {
        return shengHui;
    }

    public void setShengHui(String shengHui) {
        this.shengHui = shengHui;
    }
}

com.burnyouth.dao.ProvinceDao(连接数据库,进行查询操作并返回数据):

package com.burnyouth.dao;

import com.burnyouth.entity.Province;
import com.burnyouth.util.JdbcUtil;

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

public class ProvinceDao {
    public ProvinceDao() {
    }

    /**
     * &#x901A;&#x8FC7;&#x7701;&#x4EFD;id&#x6765;&#x83B7;&#x53D6;&#x7701;&#x4EFD;&#x4FE1;&#x606F;
     * @param provinceId &#x7701;&#x4EFD;id
     * @return Province&#x5BF9;&#x8C61;
     */
    public Province queryProvinceById(Integer provinceId) {
        Connection connection = null;
        PreparedStatement ps = null;
        ResultSet resultSet = null;
        Province province = null;
        try {
            connection = JdbcUtil.getConnection();
            String sql = "select * from pro where id=?";
            ps = connection.prepareStatement(sql);
            ps.setInt(1, provinceId);
            resultSet = ps.executeQuery();
            if (resultSet.next()) {
                Integer id = resultSet.getInt("id");
                String provinceName = resultSet.getString("name");
                String jianCheng = resultSet.getString("jiancheng");
                String shengHui = resultSet.getString("shenghui");
                province = new Province(id, provinceName, jianCheng, shengHui);
            }
        } catch (SQLException var10) {
            var10.printStackTrace();
        } finally {
            JdbcUtil.close(connection, ps, resultSet);
        }

        return province;
    }
}

xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd" version="5.0">
    <servlet>
        <servlet-name>QueryProvinceMessageServlet</servlet-name>
        <servlet-class>com.burnyouth.controller.QueryProvinceMessageServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>QueryProvinceMessageServlet</servlet-name>
        <url-pattern>/queryProvinceMessage</url-pattern>
    </servlet-mapping>
</web-app>

com.burnyouth.controller.QueryProvinceMessageServlet(根据请求参数中的省份id,返回对应的 json 格式的省份信息):

package com.burnyouth.controller;

import com.burnyouth.dao.ProvinceDao;
import com.burnyouth.entity.Province;
import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

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

public class QueryProvinceMessageServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String josn = "";
        PrintWriter out = null;
        ProvinceDao dao = new ProvinceDao();
        //&#x83B7;&#x53D6;&#x7701;&#x4EFD;id&#x53C2;&#x6570;
        String provinceId =  req.getParameter("provinceId");

        //&#x5F53;&#x7701;&#x4EFD;id&#x4E0D;&#x4E3A;null &#x4E14;&#x7701;&#x4EFD;id&#x4E0D;&#x4E3A;&#x7A7A;&#x5B57;&#x7B26;&#x4E32; &#x65F6;&#xFF0C;&#x6267;&#x884C;if&#x5185;&#x4EE3;&#x7801;
        if (provinceId != null && provinceId.trim().length() > 0) {
            //&#x901A;&#x8FC7;&#x3010;dao&#x3011;&#x8FDE;&#x63A5;&#x6570;&#x636E;&#x5E93;&#xFF0C;&#x83B7;&#x53D6;&#x7701;&#x4EFD;&#x4FE1;&#x606F;&#xFF0C;&#x5E76;&#x8FD4;&#x56DE;&#x5177;&#x4F53;&#x7684;&#x7701;&#x4EFD;&#x7C7B;
            Province province = dao.queryProvinceById(Integer.valueOf(provinceId));

            //&#x5C06;&#x5B57;&#x7B26;&#x4E32;&#x8F6C;&#x6362;&#x4E3A;json&#x683C;&#x5F0F;&#x7684;&#x5B57;&#x7B26;&#x4E32;
            ObjectMapper objectMapper = new ObjectMapper();
            josn = objectMapper.writeValueAsString(province);
        }

        //&#x4F7F;&#x6D4F;&#x89C8;&#x5668;&#x4EE5;&#x6B63;&#x786E;&#x7684;&#x7F16;&#x8BD1;&#x5668;&#x8BFB;&#x53D6;&#x8FD4;&#x56DE;&#x7684;&#x4FE1;&#x606F;
        resp.setContentType("application/json;charset=utf-8");
        //&#x83B7;&#x53D6;&#x8F93;&#x51FA;&#x6D41;
        out = resp.getWriter();
        //&#x8FD4;&#x56DE;&#x4FE1;&#x606F;
        out.print(josn);
        //&#x5237;&#x65B0;&#x901A;&#x9053;
        out.flush();
        //&#x5173;&#x95ED;&#x901A;&#x9053;
        out.close();
    }
}

Original: https://www.cnblogs.com/Burning-youth/p/16053913.html
Author: 猿头猿脑的王狗蛋
Title: 【JavaWeb-Ajax】网站 – 通过省份 id 获取省份信息(通过Ajax实现局部刷新)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/683399/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 基础前缀和和差分

    前缀和用于在O(1)的时间内求某一给定的数组的其中任意长度的和,它其实就是对一给定了的数组计算得出一个前缀和数组,再利用这个计算出来的数组去求某一段的和 例题链接 #include…

    技术杂谈 2023年6月21日
    091
  • 闭包

    闭包的理解 1. 什么是闭包 《Python核心编程》中的解释: “如果在一个内部函数里,对外部作用域(但不是全局作用域)的变量进行引用,那么 内部函数就被认为是闭包。…

    技术杂谈 2023年7月11日
    060
  • netstat 命令

    a 表示所有 n 表示不查询dns t 表示tcp协议 u 表示udp协议 p 表示查询占用的程序 l 表示查询正在监听的程序 netstat -nupl (UDP类型的端口) n…

    技术杂谈 2023年5月30日
    077
  • R及R Studio下载安装教程(超详细)

    R 语言是为数学研究工作者设计的一种数学编程语言,主要用于统计分析、绘图、数据挖掘。 如果你是一个计算机程序的初学者并且急切地想了解计算机的通用编程,R 语言不是一个很理想的选择,…

    技术杂谈 2023年7月25日
    0161
  • python数据可视化-matplotlib入门(3)-利用随机函数生成变化图形2

    鉴于上一篇中最后三个问题: 1、上述程序是否能进行优化(比如功能相同的) 2、创建三个3个实例,用了3个语句,能否建一个函数,只输入一个数n,就自动创建n个实例?同时,每个实例的n…

    技术杂谈 2023年7月25日
    060
  • __declspec(novtable)的用法

    __declspec(novtable) 在C++中接口中广泛应用. 不容易看到它是因为在很多地方它都被定义成为了宏. 比如说ATL活动模板库中的ATL_NO_VTABLE, 其实…

    技术杂谈 2023年7月24日
    080
  • 8086汇编 rep 指令

    8086汇编 rep 指令 rep指令常和串传送指令搭配使用功能:根据cx的值,重复执行后面的指令 串传送指令1: movsb 功能:(以字节为单位传送)(1) ((es)×16 …

    技术杂谈 2023年6月1日
    096
  • GO atomic包

    对变量并发执行10000次相加 执行1: 90069 执行2:90126 每次执行不一样。原因:xx++ 等价于xx = xx+1,非原子操作,并行执行的2个会把结果冲掉 执行: …

    技术杂谈 2023年5月31日
    089
  • 12GDB在无符号表情况下调试程序

    1)加载无符号表程序 2)断点到某一个函数,通过tab键可以模糊匹配查找要断点的函数3)运行程序4)查看第一个参数寄存器:i r rdi,我们传入的是字符a,可以看到查看到的值是9…

    技术杂谈 2023年6月1日
    084
  • Beam Search快速理解及代码解析(下)

    Beam Search的问题 先解释一下什么要对Beam Search进行改进。因为Beam Search虽然比贪心强了不少,但还是会生成出空洞、重复、前后矛盾的文本。如果你有文本…

    技术杂谈 2023年7月24日
    066
  • 定制化知识图谱 项目介绍

    宣传网站 http://dingzhitupu.com/ 定制化知识图谱 根据您的业务特性,通过图分析、建模,创建专门适合与您业务逻辑的专有知识图谱 特性介绍 用户不必懂相关技术 …

    技术杂谈 2023年5月31日
    096
  • ubuntu 20.04.3LTS版本部署Google VTS失败

    当执行到安装虚拟环境时,两个python库均执行失败,提示没有相应的包,尝试将python默认设置为python2执行仍然失败,折腾了好久仍未解决最终放弃,自此又将ubuntu回退…

    技术杂谈 2023年7月11日
    0101
  • Python中class内置方法__init__与__new__作用与区别探究

    最近尝试了解Django中ORM实现的原理,发现其用到了metaclass(元类)这一技术,进一步又涉及到Python class中有两个特殊内置方法__init__与__new_…

    技术杂谈 2023年6月21日
    079
  • 人生苦短,我用JRebel

    昨天看到团子推送的一篇关于热部署的文章,其中介绍了自研的Sonic插件在公司内部的应用。同时晒出来一张对比图: 团子表示我们的插件要比同类插件优秀哦。不过我定睛一看,好家伙,第一列…

    技术杂谈 2023年7月25日
    070
  • seaborn学习笔记(五):绘制多子图

    3.1 map方法:指定绘图方法 ¶ PairGrid所有参数中,只有data是必传参数,实例化时,seaborn会根据传入数据集的各个字段情况,绘制n行n列个坐标系,但仅限于绘制…

    技术杂谈 2023年7月24日
    073
  • 前端笔记知识

    笔记列表 基础知识 语言基础 DOM 计算机原理 CSS3 Git 网络与安全 网络 安全 性能与兼容性 数学 规范与概念 数据结构与算法 数据结构 算法 from: http:/…

    技术杂谈 2023年5月31日
    082
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球