基于Ajax+JSon的表格数据浏览【简单版--没连接数据库】+【连接数据库版】

news2024/11/27 22:44:02

目录

基于Ajax+JSon的表格数据浏览【简单版--没连接数据库】

代码:

ajax.js

ch10_4.jsp

 student.java

Query.java

运行结果:

点击获取表格后:


基于Ajax+JSon的表格数据浏览【简单版--没连接数据库】

代码:

ajax.js

//声明XMLHttpRequest对象
var httpRequest=null;
//创建XMLHttpRequest对象实例的方法
function createXHR(){
    if(window.XMLHttpRequest){
        httpRequest=new XMLHttpRequest();
    }else if(window.ActiveXObject){
        try{
            httpRequest=new ActiveXObject("Maxml2.XMLHTTP");//IE较新版
        }catch (e){
            try{
                httpRequest=new ActiveXObject("Microsoft.XMLHTTP");//IE较老版
            }catch (e) {
                httpRequest=null;
            }
        }
    }
    if (!httpRequest){
        alert("fail to create httpRequest!");
    }
}
function sendRequest(url,params,method,handler){
    createXHR();
    if (!httpRequest){
        return false;
    }
    httpRequest.onreadystatechange=handler;
    if(method=="GET"){
        httpRequest.open(method,url+'?'+params,true);
        httpRequest.send(null);
    }
    if (method=="POST"){
        httpRequest.open(method,url,true);
        httpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");
        httpRequest.send(params);
    }
}

ch10_4.jsp

<%--
  Created by IntelliJ IDEA.
  User: CaptainDong
  Date: 2023/5/16
  Time: 17:51
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>表格数据浏览</title>
    <style>
        #body_style {

            background-color: #c7f5db;
        }

        #myDiv {
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            text-align: center;
            font-size: medium;
            border: 2px solid #28e5d8f0;
            padding: 28px 30px;
            background: #a1eec5;
            width: 350px;
            border-radius: 25px;
            -moz-border-radius: 25px;
        }
    </style>
    <script type="text/javascript" src="js\ajax.js"></script>
    <script type="text/javascript">
        function query(){
            sendRequest("query",null,"POST",show);
        }
        function show(){
            if (httpRequest.readyState==4){
                if (httpRequest.status=200){
                    let tBody=document.getElementById("tBody");
                    tBody.innerHTML="";
                    let studentList=JSON.parse(httpRequest.responseText);
                    for (let index in studentList){
                        let newTr=tBody.insertRow();
                        let newTd1=newTr.insertCell();
                        newTd1.innerHTML=studentList[index].studentNumber;
                        let newTd2=newTr.insertCell();
                        newTd2.innerHTML=studentList[index].studentName;
                        let newTd3=newTr.insertCell();
                        newTd3.innerHTML=studentList[index].studentSex;
                    }
                }
            }
        }
    </script>
</head>
<body id="body_style">
<div id="myDiv">
<a href="javascript:query()">获取表格数据</a><br><br>
    <table  border="7" align="center">
        <tr>
            <th>学号</th><th>姓名</th><th>性别</th>
            <tbody id="tBody"></tbody>
        </tr>
    </table>
</div>
</body>
</html>

 student.java

package com.dong;

public class Student {
    private String studentNumber;
    private String studentName;
    private String studentSex;

    public Student() {
    }

    public Student(String studentNumber, String studentName, String studentSex) {
        this.studentNumber = studentNumber;
        this.studentName = studentName;
        this.studentSex = studentSex;
    }

    public String getStudentNumber() {
        return studentNumber;
    }

    public void setStudentNumber(String studentNumber) {
        this.studentNumber = studentNumber;
    }

    public String getStudentName() {
        return studentName;
    }

    public void setStudentName(String studentName) {
        this.studentName = studentName;
    }

    public String getStudentSex() {
        return studentSex;
    }

    public void setStudentSex(String studentSex) {
        this.studentSex = studentSex;
    }
}

Query.java

package com.li;

import com.dong.Student;
import net.sf.json.JSONArray;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

@WebServlet("/query")
public class Query extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out=response.getWriter();
        Student student1=new Student("202121555","张三","男");
        Student student2=new Student("202121566","小美","女");
        List<Student>studentList1=new ArrayList<Student>();
        studentList1.add(student1);
        studentList1.add(student2);
        JSONArray jsonArray = JSONArray.fromObject(studentList1);
        out.println(jsonArray.toString());
    }
}
  • 这段代码是一个 JSP 页面,用于实现一个简单的 AJAX 表格数据浏览功能。
  • 页面包含一个表格和一个按钮,当用户点击按钮时,JavaScript 中的 query() 函数被调用。query() 函数使用了封装好的 sendRequest() 函数,向服务器发起了一个异步请求,并指定了请求处理函数为 show()
  • 当服务器返回响应时,show() 函数被调用。如果响应状态码为 200,则解析服务器返回的 JSON 格式数据,并将其填充到表格中。具体来说,show() 函数首先获取到表格的 <tbody> 元素,并清空其中的所有子元素。然后通过 JSON.parse() 方法将服务器返回的 JSON 字符串解析成 JavaScript 对象数组,并遍历该数组。在循环中,使用 insertRow()insertCell()innerHTML 等方法动态创建表格的行和列,并将数据填充进去。
  • 需要注意的是,这里使用了 XMLHttpRequest 对象进行了 AJAX 请求。而 sendRequest() 函数则是对 XMLHttpRequest 对象的一次封装,用于简化 AJAX 请求的过程。此外,页面中还定义了一些 CSS 样式,用于美化页面的外观。
  • 此外,该 JSP 页面引用了一个名为 ajax.js 的 JavaScript 文件,用于封装 AJAX 请求相关的代码。该文件中包含了一个名为 sendRequest() 的函数,用于方便地向服务器发起 AJAX 请求,其调用形式为:sendRequest(url, data, method, callback)。其中,url 参数表示请求的 URL 地址,data 表示请求数据(可以为空),method 表示请求方法,callback 表示请求处理完毕后的回调函数。具体实现可以查看 ajax.js 文件的代码。

运行结果:

点击获取表格后:

基于Ajax+JSon的表格数据浏览【连接数据库版】

分析: 

我们需要对上述代码进行如下修改:

  1. 首先,在 doGet() 和 doPost() 方法中用 JDBC 连接到数据库。

  2. 然后,查询数据库获取学生信息,将其添加到 List 中。

  3. 最后,将列表转换为 JSON 格式并作为响应返回给客户端。

修改之后的代码为:

代码:

package com.li;

import com.dong.Student;
import net.sf.json.JSONArray;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
 * 连接数据库获取表格数据
 */
@WebServlet("/queryForm")
public class QueryForm extends HttpServlet {
    private final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
    private final String DB_URL = "jdbc:mysql://localhost:3306/test01";
    private final String USER_NAME = "root";
    private final String PASSWORD = "root";

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        Connection conn = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;

        try {
            /**
             * 连接数据库
             */
            Class.forName(JDBC_DRIVER);
            conn = DriverManager.getConnection(DB_URL, USER_NAME, PASSWORD);

            /**
             * 查询学生信息
             */
            String sql = "select * from student";
            stmt = conn.prepareStatement(sql);
            rs = stmt.executeQuery();

            List<Student> studentList = new ArrayList<>();
            while (rs.next()) {
                String studentNumber = rs.getString("studentNumber");
                String studentName = rs.getString("studentName");
                String studentSex = rs.getString("studentSex");
                Student student = new Student(studentNumber, studentName, studentSex);
                studentList.add(student);
            }

            //将列表转换为 JSON 格式并发送回客户端
            JSONArray jsonArray = JSONArray.fromObject(studentList);
            out.println(jsonArray.toString());
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (rs != null)
                    rs.close();
                if (stmt != null)
                    stmt.close();
                if (conn != null)
                    conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}
//声明XMLHttpRequest对象
var httpRequest=null;
//创建XMLHttpRequest对象实例的方法
function createXHR(){
    if(window.XMLHttpRequest){
        httpRequest=new XMLHttpRequest();
    }else if(window.ActiveXObject){
        try{
            httpRequest=new ActiveXObject("Maxml2.XMLHTTP");//IE较新版
        }catch (e){
            try{
                httpRequest=new ActiveXObject("Microsoft.XMLHTTP");//IE较老版
            }catch (e) {
                httpRequest=null;
            }
        }
    }
    if (!httpRequest){
        alert("fail to create httpRequest!");
    }
}
function sendRequest(url,params,method,handler){
    createXHR();
    if (!httpRequest){
        return false;
    }
    httpRequest.onreadystatechange=handler;
    if(method=="GET"){
        httpRequest.open(method,url+'?'+params,true);
        httpRequest.send(null);
    }
    if (method=="POST"){
        httpRequest.open(method,url,true);
        httpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");
        httpRequest.send(params);
    }
}
<%--
Created by IntelliJ IDEA.
User: CaptainDong
Date: 2023/5/16
Time: 17:51
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>表格数据浏览</title>
    <style>
        #body_style {
            background-color: #c7f5db;
        }

        #myDiv {
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            text-align: center;
            font-size: medium;
            border: 2px solid #28e5d8f0;
            padding: 28px 30px;
            background: #a1eec5;
            width: 350px;
            border-radius: 25px;
            -moz-border-radius: 25px;
        }
    </style>
    <script type="text/javascript" src="js\ajax.js"></script>
    <script type="text/javascript">
        function query01(){
            sendRequest("queryForm",null,"POST",show);
        }
        function show(){
            console.log(httpRequest.responseText); // 打印 HTTP 响应内容
            if (httpRequest.readyState==4){
                if (httpRequest.status==200){
                    let responseText = httpRequest.responseText.trim();
                    if (responseText === ''){
                        alert('服务器返回空数据!');
                        return;
                    }
                    let tBody=document.getElementById("tBody");
                    tBody.innerHTML="";
                    let studentList=JSON.parse(responseText);
                    if(studentList.length === 0){
                        alert("未查询到任何数据!");
                        return; // 结束函数
                    }
                    for (let index in studentList){
                        let newTr=tBody.insertRow();
                        let newTd1=newTr.insertCell();
                        newTd1.innerHTML=studentList[index].studentNumber;
                        let newTd2=newTr.insertCell();
                        newTd2.innerHTML=studentList[index].studentName;
                        let newTd3=newTr.insertCell();
                        newTd3.innerHTML=studentList[index].studentSex;
                    }
                } else {
                    alert('请求发生错误:' + httpRequest.status);
                }
            } else {
                console.log('请求正在发送中...');
            }

        }
    </script>
</head>
<body id="body_style">
<div id="myDiv">
    <a href="javascript:query01()">获取表格数据</a><br><br>
    <table  border="7" align="center">
        <tr>
            <th>学号</th><th>姓名</th><th>性别</th>
            <tbody id="tBody"></tbody>
        </tr>
    </table>
</div>
</body>
</html>
package com.dong;

public class Student {
    private String studentNumber;
    private String studentName;
    private String studentSex;

    public Student() {
    }

    public Student(String studentNumber, String studentName, String studentSex) {
        this.studentNumber = studentNumber;
        this.studentName = studentName;
        this.studentSex = studentSex;
    }

    public String getStudentNumber() {
        return studentNumber;
    }

    public void setStudentNumber(String studentNumber) {
        this.studentNumber = studentNumber;
    }

    public String getStudentName() {
        return studentName;
    }

    public void setStudentName(String studentName) {
        this.studentName = studentName;
    }

    public String getStudentSex() {
        return studentSex;
    }

    public void setStudentSex(String studentSex) {
        this.studentSex = studentSex;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/533324.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【案例实战】SpringBoot3.x自定义封装starter实战

1.starter背景简介及作用 &#xff08;1&#xff09;什么是starter starter是SpringBoot中的一个新发明&#xff0c;它有效的下降了项目开发过程的复杂程度&#xff0c;对于简化开发操做有着很是好的效果。 starter的理念&#xff1a;starter会把全部用到的依赖都给包含进来&a…

三极管的几点应用

三极管有三个工作状态&#xff1a;截止、放大、饱和&#xff0c;放大状态很有学问也很复杂&#xff0c;多用于集成芯片&#xff0c;比如运放&#xff0c;现在不讨论。其实&#xff0c;对信号的放大&#xff0c;我们通常用运放处理&#xff0c;三极管更多的是当做一个开关管来使…

微信小程序入门05-用户登录注册接口开发

用户登录注册&#xff0c;我们先需要开发后端的接口&#xff0c;接口一般需要有入参&#xff0c;然后和数据库进行交互。 1 创建表 我们现在先实现用户的登录及注册&#xff0c;建表语句 create database diancan; use diancan; CREATE TABLE users (id INT AUTO_INCREMENT …

软件设计模式介绍与入门

目录 1、软件设计模式的起源 2、什么是设计模式&#xff1f; 2.1、设计模式的设计意图 2.2、设计模式的分类准则 3、为什么要学习设计模式 4、如何学习设计模式 5、最后 VC常用功能开发汇总&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更新...&#x…

毕业论文写作技巧

毕业论文的组成部分目录自定义目录 摘要&#xff08;Abstract&#xff09;绪论相关工作&#xff08;Related work&#xff09;研究方法和结果&#xff08;Method and Results&#xff09;研究方法研究结果 结论&#xff08;Conclusion&#xff09; 写好一篇论文其实就是讲好一个…

批量查询域名历史软件-域名历史快照查询工具

批量查询域名历史和域名历史快照 批量查询域名历史和域名历史快照是一种可以为您提供有关域名历史信息的工具&#xff0c;以下是该主题的详细介绍。 什么是域名历史&#xff1f; 域名历史记录是指域名在被注册前或过去的使用期间所经历的所有事件的记录。这些事件可能包括域…

SpringBoot拦截器获取Request的body数据

1. 场景 自定义Token后&#xff0c;需要在拦截器中进行token验证。在验证的过程中需要读取HttpServletRequest的body部分数据进行验证。 2. 存在问题 如果直接配置拦截器进行urlPatterns拦截&#xff0c;并进行参数验证&#xff0c;在拦截器中获取request的输入流&#xff0c…

智能防盗防偷门锁语音方案设计

智能锁主要功能 防撬报警功能&#xff08;非必须&#xff0c;但很实用&#xff09;&#xff1a;防撬报警功能可以说是指纹密码锁功能中对提升家居安全有效的功能之一。当指纹锁受到外暴力破坏时&#xff0c;就会自动发出警报声&#xff0c;提醒小区安保。好一点的甚至可以自动…

【AUTOSAR】【以太网】UdpNM

目录 一、概述 二、限制与约束 三、功能说明 3.1 协调算法 3.2 操作模式 3.2.1 Network Mode 3.2.2 准备总线睡眠模式 3.2.3 准备总线睡眠模式 3.3 网络状态 3.4 初始化 3.5 通信调度 3.5.1 NM消息发送 3.5.2 NM消息接收 3.6 其他功能 3.7 帧结构 四、API接口 …

创新案例 | 肆拾玖坊白酒0到20亿增长是传销还是创新

01.背景介绍 中国证券报引用公开数据显示&#xff0c;2016年&#xff0c;规模以上白酒企业数量为1578家&#xff0c;2021年&#xff0c;这一数字下降到965家。 同时&#xff0c;白酒产能逐年向优势产区集中&#xff0c;头部企业市场占有率不断提高。2021年&#xff0c;茅台、…

性能测试-操作和优化分析

打流工具 iperf 测试吞吐率 服务端&#xff1a;iperf -u -s 客户端&#xff1a;iperf -u -c 1.1.1.1 -b 500M -t 10 测试结果 ------------------------------------------------------------ Client connecting to 192.168.56.106, UDP port 5001 Sending 1470 byte d…

全面监测健康数据,更实用的健康手表,dido E55S Pro上手

关心健康的朋友&#xff0c;一般都特别关注自己的各项健康数据&#xff0c;会通过智能手表之类的工具来持续检测。现在健康类的智能手表选择很多&#xff0c;功能也很丰富&#xff0c;像是我现在用的这款dido E55S Pro&#xff0c;除了常规的心率、血氧之外&#xff0c;还检测心…

vector【实现】:迭代器失效以及非法的间接寻址、深拷贝中的浅拷贝。

vector模拟实现_云的小站的博客-CSDN博客 目录 主题&#xff1a; 迭代器失效 Insert导致的迭代器失效 ereas导致的迭代器失效 非法的间接寻址 深拷贝中的浅拷贝。 主题&#xff1a; 1&#xff09;迭代器失效 2&#xff09;非法的间接寻址 3&#xff09;深拷贝中的浅拷…

2023年最佳SleekFlow最佳替代品

建立更强大的对话关系的最佳平台是什么&#xff1f;现如今&#xff0c;国内客服集成与营销自动化工具也有非常多&#xff0c;比如SaleSmartly&#xff08;ss客服&#xff09;&#xff0c;被称为SleekFlow的最佳替代品。了解为什么SaleSmartly是SleekFlow的最佳替代品。在这篇文…

BTC交易费激增,LTC活跃地址数飙升! BRC-20爆火背后,区块链网络经历了什么?

BRC-20 代币和 Ordinals 协议的日益普及推动了对比特币区块空间的需求&#xff0c;比特币区块链的费用已飙升至两年来的高点。 BRC-20代币标准在 Ordinals 协议上运行。Ordinals 允许用户通过将对数字艺术的引用写入基于比特币的小型交易中&#xff0c;来将数据嵌入比特币区块…

网站历史快照查询软件-批量网站历史快照查询

批量网站历史快照查询软件 批量网站历史快照查询软件是一种可以让用户在短时间内批量查询多个网站历史快照的工具&#xff0c;可以极大地提高用户的工作效率。批量实时查询是该软件的一大优势&#xff0c;下面主要介绍批量实时查询的优势。 一、高效性 批量实时查询可以同时…

通过2种Python库,教会你如何在自动化测试时加入进度条?

前言 我们在执行自动化测试或者调试时&#xff0c;自动化测试用例数量过多&#xff0c;不清楚目前用例数执行了多少个了&#xff0c;还差多少个执行完成。 这时候就会猜想&#xff0c;如果执行过程中存在进度条&#xff0c;就很清楚的了解到测试用例的执行情况&#xff0c;今…

Cannot read properties of null (reading ‘content‘)报错解决

项目是用vue3webpack&#xff0c;始终启动不成功~ 一、问题报错 二、报错解决尝试总结 &#xff08;1&#xff09;首先尝试的是因为我近期在做vite3vue3的需求把node版本升到了 16.17.1 猜测是不是node版本影响的 node版本切了14.15.3&#xff0c;16.17.1&#xff0c;以及很…

【换根DP+容斥】P3047 [USACO12FEB]Nearby Cows G

P3047 [USACO12FEB]Nearby Cows G - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意&#xff1a; 思路&#xff1a; 做法就是换根 预处理dp[v][j]用普通的树形DP处理即可 注意&#xff1a;一开始预处理的dp[v][j]指的是在v的子树里离v为j的权值和 Code&#xff1a; #in…

JavaWeb12-三大组件之过滤器-Filter

1. 官方文档 文档&#xff1a;java_ee_api_中英文对照版.chm 2. Filter 过滤器说明 2.1 为啥要过滤器-需求示意图 ● 一图胜千言 2.2 过滤器介绍 Filter 过滤器它是 JavaWeb 的三大组件之一(Servlet 程序、Listener 监听器、Filter 过滤器)Filter 过滤器是 JavaEE 的规范…