Web前端-Ajax-02-实例:根据省份id查询省份信息

1.需求

用户在文本框输入省份的编号id,在其他文本框中显示其对应的省份名称、省份简称以及省会。

2.准备工作

2.1创建数据库与数据表

2.1.1创建数据库【db_ajax】

create database db_ajax;

2.1.2创建省份信息表【province】

SET FOREIGN_KEY_CHECKS=0;DROP TABLE IF EXISTS `province`;
CREATE TABLE `province` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL COMMENT '省份名称',`simpleName` varchar(255) DEFAULT NULL COMMENT '简称',`proCap` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;INSERT INTO `province` VALUES ('1', '河北', '冀', '石家庄');
INSERT INTO `province` VALUES ('2', '山西', '晋', '太原市');
INSERT INTO `province` VALUES ('3', '内蒙古', '蒙', '呼和浩特市 ');
INSERT INTO `province` VALUES ('4', '辽宁', '辽', '沈阳');
INSERT INTO `province` VALUES ('5', '江苏', '苏', '南京');
INSERT INTO `province` VALUES ('6', '浙江', '浙', '杭州');
INSERT INTO `province` VALUES ('7', '安徽', '皖', '合肥');
INSERT INTO `province` VALUES ('8', '福建', '闽', '福州');
INSERT INTO `province` VALUES ('9', '江西', '赣', '南昌');

2.1.3创建城市信息表【city】

SET FOREIGN_KEY_CHECKS=0;DROP TABLE IF EXISTS `city`;
CREATE TABLE `city` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL,`provinceid` int(11) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;INSERT INTO `city` VALUES ('1', '石家庄市', '1');
INSERT INTO `city` VALUES ('2', '秦皇岛', '1');
INSERT INTO `city` VALUES ('3', '保定市', '1');
INSERT INTO `city` VALUES ('4', '张家口', '1');
INSERT INTO `city` VALUES ('5', '南昌市', '9');
INSERT INTO `city` VALUES ('6', '九江市', '9');
INSERT INTO `city` VALUES ('7', '宜春市', '9');
INSERT INTO `city` VALUES ('8', '福州市', '8');
INSERT INTO `city` VALUES ('9', '厦门市', '8');
INSERT INTO `city` VALUES ('10', '泉州市', '8');
INSERT INTO `city` VALUES ('11', '龙岩市', '8');
INSERT INTO `city` VALUES ('12', '太原', '2');
INSERT INTO `city` VALUES ('13', '大同', '2');
INSERT INTO `city` VALUES ('14', '呼和浩特', '3');
INSERT INTO `city` VALUES ('15', '包头', '3');
INSERT INTO `city` VALUES ('16', '呼伦贝尔', '3');

2.2创建Web工程

1.创建新的Module,选择Java Enterprise—>Web Application—>next

2.为Module命名

3.在/web/WEB-INF目录下新建lib文件夹,将数据库驱动、json工具包等jar包放进去

4.将lib目录下的jar包都添加到工程Library里

2.3创建省份信息表对应实体类

创建com.tsccg.entity.Province实体类

package com.tsccg.entity;/*** @Author: TSCCG* @Date: 2021/08/29 14:30* 省份信息表province对应实体类*/
public class Province {private Integer id;//省份编号private String name;//省份名称private String simpleName;//省份简称private String proCap;//省份的省会public Province() {}public Province(Integer id, String name, String simpleName, String proCap) {this.id = id;this.name = name;this.simpleName = simpleName;this.proCap = proCap;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSimpleName() {return simpleName;}public void setSimpleName(String simpleName) {this.simpleName = simpleName;}public String getProCap() {return proCap;}public void setProCap(String proCap) {this.proCap = proCap;}
}

2.4封装JDBC工具类

配置文件:jdbc.properties

driverName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/db_ajax
user=root
password=123456

工具类:JdbcUtil.java

package com.tsccg.util;import java.sql.*;
import java.util.ResourceBundle;/*** @Author: TSCCG* @Date: 2021/08/28 19:42* 封装工具类*/
public class JdbcUtil {private static Connection conn = null;private static PreparedStatement ps = null;private static Statement stmt = null;private static String url = null;private static String user = null;private static String password = null;/*** 静态代码块,用于注册驱动及初始化各种参数*/static {try {ResourceBundle bundle = ResourceBundle.getBundle("jdbc");String driverName = bundle.getString("driverName");url = bundle.getString("url");user = bundle.getString("user");password = bundle.getString("password");//注册驱动Class.forName(driverName);} catch (ClassNotFoundException e) {e.printStackTrace();}}/*** 获取连接* @return 返回Connection对象*/public static Connection getConn() {try {conn = DriverManager.getConnection(url,user,password);} catch (SQLException throwables) {throwables.printStackTrace();}return conn;}/*** 获取预编译的数据库操作对象* @param sql sql语句* @return 返回PreparedStatement对象*/public static PreparedStatement getPs(String sql) {try {ps = getConn().prepareStatement(sql);} catch (SQLException throwables) {throwables.printStackTrace();}return ps;}/*** 获取数据库操作对象* @return 返回Statement对象*/public static Statement getStmt() {try {stmt = getConn().createStatement();} catch (SQLException throwables) {throwables.printStackTrace();}return stmt;}/*** 关闭所有* @param rs 查询结果集对象*/public static void closeAll(ResultSet rs) {if (rs != null) {try {rs.close();} catch (SQLException throwables) {throwables.printStackTrace();}}if (stmt != null) {try {stmt.close();} catch (SQLException throwables) {throwables.printStackTrace();}}if (ps != null) {try {ps.close();} catch (SQLException throwables) {throwables.printStackTrace();}}if (conn != null) {try {conn.close();} catch (SQLException throwables) {throwables.printStackTrace();}}}
}

3.流程说明

  1. 首先创建一个页面【index.jsp】,使用ajax调用异步对象,携带省份id发送请求,访问SearchServlet
  2. 创建【ProDao】类用于将sql语句推送给数据库服务器,返回处理结果
    1. 创建查询方法【search()】,根据省份id查询出对应的省份信息
    2. 将省份信息写入省份信息表实体类对象,
    3. 返回实体类对象
  3. 创建【SearchServlet】处理请求
    1. 调用请求对象获取请求头中的省份id
    2. 调用ProDao类的search()方法,得到省份信息实体类对象
    3. 使用json工具包将实体类对象转换为json格式字符串
    4. 将json格式字符串写入响应体,发送回异步对象
  4. index.jsp中的异步对象接收到json格式字符串
    1. 调用eval()函数将json格式字符串转换为json对象
    2. 根据json对象信息更新页面中相应DOM对象数据

4.创建用户交互页面

在自动创建的index.jsp中编写代码。

  1. 编写基本页面标签
  2. 使用Ajax
    1. 发送请求

      • 调用异步对象向服务器发起请求,携带省份id发送请求,访问SearchServlet
    2. 接收响应数据

      • 调用eval()函数将发送回来的json格式字符串转换为json对象
      • 根据json对象信息更新页面中相应DOM对象数据
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>查询省份信息</title></head><script type="text/javascript">function search() {//1.创建异步对象var xmlHttp = new XMLHttpRequest();//2.绑定onreadystatechange事件xmlHttp.onreadystatechange = function() {if (xmlHttp.readyState === 4 && xmlHttp.status === 200) {//获取响应数据var jsonStr = xmlHttp.responseText;//将json格式字符串转换为json对象var jsonObj = eval("(" + jsonStr + ")");//更新DOM对象document.getElementById("name").value = jsonObj.name;document.getElementById("simpleName").value = jsonObj.simpleName;document.getElementById("proCap").value = jsonObj.proCap;}}//3.初始化异步对象var id = document.getElementById("id").value;var param = "id=" + id;xmlHttp.open("get","search?" + param,true);//4.发送请求xmlHttp.send();}</script><body><center><table><tr><td>省份编号:</td><td><input type="text" id="id"><input type="button" value="查询" οnclick="search()"></td></tr><tr><td>省份名称:</td><td><input type="text" id="name" readonly></td></tr><tr><td>简&nbsp;&nbsp;称:</td><td><input type="text" id="simpleName" readonly></td></tr><tr><td>省&nbsp;&nbsp;会:</td><td><input type="text" id="proCap" readonly></td></tr></table></center></body>
</html>

5.编写Dao类【ProDao】

  1. 创建查询方法【search()】,根据省份id查询出对应的省份信息
  2. 将省份信息写入省份信息表实体类对象,
  3. 返回实体类对象
package com.tsccg.dao;import com.tsccg.entity.Province;
import com.tsccg.util.JdbcUtil;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;/*** @Author: TSCCG* @Date: 2021/08/28 21:24*/
public class ProDao {/*** 根据省份id获取省份信息* @param id 省份id* @return 省份id对应的所有省份信息*/public Province search(Integer id) {Province pro = null;ResultSet rs = null;String sql = "select * from province where id = ?";PreparedStatement ps = JdbcUtil.getPs(sql);try {ps.setInt(1,id);rs = ps.executeQuery();while (rs.next()) {String name = rs.getString("name");String simpleName = rs.getString("simpleName");String proCap = rs.getString("proCap");pro = new Province(id,name,simpleName,proCap);}} catch (SQLException throwables) {throwables.printStackTrace();} finally {JdbcUtil.closeAll(rs);}return pro;}
}

6.创建Servlet用于处理请求

创建com.tsccg.controller.SearchServlet,别称:search

  1. 调用请求对象获取请求头中的省份id
  2. 调用ProDao类的search()方法,得到省份信息实体类对象
  3. 使用json工具包将实体类对象转换为json格式字符串
  4. 将json格式字符串写入响应体,发送回异步对象
package com.tsccg.controller;import com.fasterxml.jackson.databind.ObjectMapper;
import com.tsccg.dao.ProDao;
import com.tsccg.entity.Province;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;/*** @Author: TSCCG* @Date: 2021/08/28 23:31* 处理查询省份信息请求*/
public class SearchServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {Province pro = new Province();String jsonStr = "{}";//定义json字符串,如果没查到信息,返回空json字符串//1.调用请求对象获取请求头中的请求参数【省份id】String proId = request.getParameter("id");//2.调用Dao类将sql查询命令推送到数据库服务器,返回查询结果,将其转换为JSON格式字符串if (proId != null && proId.trim().length() > 0) {ProDao dao = new ProDao();pro = dao.search(Integer.parseInt(proId));}//将省份对象转换为json格式字符串ObjectMapper mapper = new ObjectMapper();jsonStr = mapper.writeValueAsString(pro);//3.调用响应对象将查询结果写入响应体,推送回异步对象response.setContentType("application/json;charset=utf-8");PrintWriter out = response.getWriter();out.print(jsonStr);//将查询结果写入响应体out.flush();//清除缓存out.close();//关闭输出流}
}

7.测试

发布网站,开启服务器。

Web前端-Ajax-02-实例:根据省份id查询省份信息相关推荐

  1. Excel VBA实例39 - 一键批量查询基金信息、基金净值

    大家好,我是永恒君! 最近和朋友交流了一下投资理财的信息,都谈到会想要配置部分基金,那首先自然是要了解一下基金的基本情况. 大部分的朋友查询基金的信息,都会在东方财富网上面进行查看,信息非常的全面. ...

  2. web前端框架开发实例,html5元素大全

    对于很多没有学历优势的人来说,面试大厂是非常困难的,大多数的人毕业只找到一个名不经传的小公司过着三点一线的生活,我也是一样,直到生活上的变故,才让我有了新的想法和目标,因此我这个二本渣渣也奋斗了起来, ...

  3. 第三阶段:Web前端:02数据库(sql语言、JDBC数据库连接) | 03(1)SpringBoot

    二.数据库--> MySQl或MariaDB 0.1.Mysql-安装步骤 进入网址 http://doc.canglaoshi.org/-->常用下载:Windows必备-->Ma ...

  4. Web前端-Ajax(下)

    目录 1 jQuery库的初次封装 1.1 根据id获取元素 1.2 封装window.load 1.3 封装click和html函数 1.4 封装val方法 1.5 将jQuery文件单独放在js目 ...

  5. web前端——Ajax、http、git、npm、webpack、axios

    Ajax 局部刷新,异步对象XMLHttpRequest http和https 1.基本工作原理 HTTP是浏览器或者其他客户端(如手机App)和网站服务器之间沟通的协议. 浏览器作为HTTP客户端通 ...

  6. web前端编程实战实例:制作静态京东首页

    <!DOCTYPE html> <html> <head><title>京东_曾柯伟</title><link rel="s ...

  7. HTML5前端期末大作业 html css javascript防锤子手机商城官网 web前端网页设计实例 企业网站制作

    常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. 茶叶. 家居. 酒店. 舞蹈. 动漫. 服装. 体育. 化妆品. 物流. 环保. 书籍. 婚纱. 游戏. 节日. ...

  8. 【Web前端大作业实例网页代码】html+css新闻资讯网页带dw模板和登陆注册(9页)

  9. 【Web前端大作业实例网页代码】html+css新闻资讯网页带dw模板和登陆注册(9页)...

    ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主

最新文章

  1. 当你 ping 的时候,你知道背后发生了什么吗?
  2. SAP 对HU做转库操作,系统报错 - 系统状态HUAS是活动的 - 分析
  3. SharePoint 2010 与 SQL Server 2012 报表服务集成
  4. [原创].NET 分布式架构开发实战五 Framework改进篇
  5. java获取环境路径方法_JAVA获取服务器路径的方法
  6. 让电流检测更精确的AMR技术
  7. 【AI视野·今日CV 计算机视觉论文速览 第214期】Mon, 7 Jun 2021
  8. 【git】git 使用 Submodule 管理子模块 报错 pathspec did not match any files
  9. 【运维安全】-MySQL手工注入
  10. 【论文写作】网上办公自动系统中功能需求如何写
  11. javascript教程现有Web App模式的问题以及挑战
  12. 注意Stream.Seek,如果想要重复使用Stream,注意用Seek复位
  13. 会员卡管理系统从哪些方面解决门店会员营销困扰?
  14. vtuber面部捕捉工具_如何做一名VTuber?一个VUP就足够
  15. 新猿木子李:0基础学python培训教程 Python操作Excel之写入数据
  16. Cree捐赠350万美元支持纽约理工学院的STEM教育项目,帮助培训未来的高科技劳动力
  17. 为什么现在更多需要用的是 GPU 而不是 CPU,比如挖矿甚至破解密码?
  18. 绕过 word 文档的密码,对加密文档
  19. java ee7权威指南 卷1,JavaEE7权威指南,卷1(原书第5版)中文pdf
  20. OJB和Hibernate框架的评议一

热门文章

  1. tokudb 分形树_TokuDB性能测试报告
  2. 大厂面试助手(十二):场景和设计
  3. Oracle abs函数
  4. 从无到有,一步一步实现记事本APP(一)
  5. mklink目录连接
  6. SecureCRT 使用pem密钥
  7. VB6.0中如何设定COM组件和ActiveX控件的CLSID值
  8. 毕业设计 Spring Boot的共享充电宝管理系统(含源码+论文)
  9. C++64位数据格式化输出
  10. 转:iOS应用如何实现64位的支持