相关文章推荐
不羁的四季豆  ·  IVsDataTableColumn 接口 ...·  3 周前    · 
没人理的爆米花  ·  使用opencv将8/10/12/16bit ...·  11 月前    · 
潇洒的山楂  ·  如何使用Python从HTML表格列中提取数据·  1 年前    · 
求醉的小刀  ·  哪种头签名是0x74736571655220 ...·  2 年前    · 
潇洒的伤疤  ·  如何从PostgreSQL ...·  2 年前    · 
鬼畜的椰子  ·  JavaScript去除日期中的“-”_js ...·  2 年前    · 
Code  ›  JavaEE 使用 JQuery 完成 ajax & json 数据的传输开发者社区
jquery ajax 前端开发 table
https://cloud.tencent.com/developer/article/1915776
阳刚的板凳
10 月前
Gorit

JavaEE 使用 JQuery 完成 ajax & json 数据的传输

前往小程序,Get 更优 阅读体验!
立即前往
腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
Gorit
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
社区首页 > 专栏 > JavaEE 使用 JQuery 完成 ajax & json 数据的传输

JavaEE 使用 JQuery 完成 ajax & json 数据的传输

作者头像
Gorit
发布 于 2021-12-08 21:46:44
发布 于 2021-12-08 21:46:44
1.6K 0
举报
文章被收录于专栏: Gorit 带你学全栈系列

JavaEE + Ajax处理 json 数据

  • 一、项目准备
  • 二、编写前端表单界面
    • 2.1 html 部分
    • 2.2 js 部分(ajax 编写)
  • 三、后端请求处理
    • 3.1 mysql 建表
    • 3.2 编写 BaseDao
    • 3.3 编写 Student 实体类
    • 3.4 编写 GetStuServlet
  • 四、运行结果

一、项目准备

  1. 使用 searchStudent.jsp 编写查询学生的界面(使用模糊查询)
  2. 编写 GetStuServlet 用来处理查询请求,并通过JSONobj 序列化返回数据
  3. 使用 mysql 数据库,建一张名为 student 表,字段为 sid,sname,sage,sgender
  4. 需要用到 jquery库,bootstrap 库(非必要),JSONobj 的六个必要的库,mysql 驱动

JSONobj 需要的同学,需要 mysql 驱动的,我已经上传至 Github,里面也整理了一些我学习会常用到的 jar包 Jar 包下载链接

二、编写前端表单界面

2.1 html 部分

这里使用了 BootStrap, jquery 库

代码语言: javascript
复制
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
	<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">
	<script type="text/javascript" src="bootstrap/js/jquery-3.3.1.js">script>
	<script type="text/javascript" src="bootstrap/js/bootstrap.min.js">script>
    <title>查询学生title>
<div class="container">
    <input type="text"> <button class="btn btn-primary" value="查询">查询button>
    <table class="table table-striped table-bordered text-center table-hover table-condensed" style="margin-top: 20px;">
    table>
html>

2.2 js 部分(ajax 编写)

我使用 JQuery 来完成 ajax 请求的部分

代码语言: javascript
复制
    $("button").on('click',function () {
    	// 获取用户在输入框中
        let name = $("input:first").val();
        $.ajax({
            url:"GetStuServlet",
            type:"post",
            data: {
                sname:name
            dataType:"json",//这里必须加上,这样做游览器会对 json 有更好的解析
            success:function (data) {
                console.log(data);
                // 使用字符串拼接的方式形成表格
                let msg = "学生id学生姓名学生年龄学生性别";
                $("table").html(msg);
                // each() 是 JQuery 的遍历语法
                $(data).each(function (i,s) {
                    msg+="";
                    msg+=""+s.sid+"";
                    msg+=""+s.sname+"";
                    msg+=""+s.sage+"";
                    msg+=""+s.sgender+"";
                    msg+="";
                // console.log(msg);
                $("table").html(msg);
            },error:function (msg) {
                console.error(msg);
    })

三、后端请求处理

3.1 mysql 建表

建立如下表

代码语言: javascript
复制
create table(
	id int(3) primary key,
	sname varchar(20),
	sage int(3),
	sgender enum('男','女')
);

并插入一些测试数据

3.2 编写 BaseDao

封装 BaseDao,用于简化 JDBC 的处理

代码语言: javascript
复制
import java.sql.*;
public class BaseDao {
    private String Driver = "com.mysql.jdbc.Driver";
    private static final String URL = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "root";
    private Connection con = null;
    // 获取连接
    public PreparedStatement getConnect(String sql) throws SQLException {
        PreparedStatement ps = null;
        try {
            Class.forName(Driver);
            con = DriverManager.getConnection(URL,USERNAME,PASSWORD);
            ps = con.prepareStatement(sql);
        } catch (Exception e) {
            e.printStackTrace();
        return ps;
    // 关闭连接
    public void closed(PreparedStatement ps, ResultSet set) throws SQLException {
        if (ps!=null) {
            ps.close();
        if (set!=null) {
            set.close();
        if (con!=null) {
            con.close();
}

3.3 编写 Student 实体类

后面从数据库中查出来的数据,我们要存储到 ArrayList 当中

代码语言: javascript
复制
public class Student {
    private Integer sid;
    private String sname;
    private Integer sage;
    private String sgender;
    public Student(Integer sid, String sname, Integer sage, String sgender) {
        this.sid = sid;
        this.sname = sname;
        this.sage = sage;
        this.sgender = sgender;
	// getter 和 setter 省略,无参构造省略,这里用不到
    @Override
    public String toString() {
        return "Student{" +
                "sid=" + sid +
                ", sname='" + sname + '\'' +
                ", sage=" + sage +
                ", sgender='" + sgender + '\'' +
}

3.4 编写 GetStuServlet

这里逻辑其实不复杂,使用 ArrayList 存储查出来的学生,在使用 JSONobj 把 ArrayList 集合 转换成 JSON 格式,这样才方便返回到前端,并且显示数据。

解释一下,我在里面每一步都把结果打印输出一遍,这样即使报错了也可以快速定位到是哪里出错了

代码语言: javascript
复制
import cn.gorit.entity.Student; // 前面编写的 Student 实体类
import cn.gorit.util.BaseDao;	// 前面封装的 BaseDao
import net.sf.json.JSONArray;   // 使用第三方 jar 包
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.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
@WebServlet("/GetStuServlet")
public class GetStuServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        String name = request.getParameter("sname"); // 接收 ajax 传过来的用户输入的内容
        System.out.println(name);  
        BaseDao db = new BaseDao();
        List<Student> list = new ArrayList<Student>();  // 使用泛型
        try {
            PreparedStatement ps = db.getConnect("select * from student where sname like ?");
            ps.setString(1,"%"+name+"%"); // 做模糊查询
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                System.out.println(rs.getInt(1)+" "+rs.getString(2)+" "+rs.getInt(3)+" "+rs.getString(4));
                list.add(new Student(rs.getInt(1),rs.getString(2),rs.getInt(3),rs.getString(4)));
            db.closed(ps,rs);
        } catch (SQLException e) {
            e.printStackTrace();
        System.out.println(list.toString());
        // 集合转换为一个方便输出并且 js 也可以编译的格式
        // 字符串不需要转为 json 格式 对象需要转为 json 格式
        JSONArray ja = JSONArray.fromObject(list);
        response.setCharacterEncoding("utf-8");
        response.getWriter().print(ja.toString()); // 将生成的 json 数据返回给 前端页面
 
推荐文章
不羁的四季豆  ·  IVsDataTableColumn 接口 (Microsoft.VisualStudio.Data.Services.RelationalObjectModel) | Microsoft Learn
3 周前
没人理的爆米花  ·  使用opencv将8/10/12/16bit的YUV422格式的raw图转为rgb图 - CSDN文库
11 月前
潇洒的山楂  ·  如何使用Python从HTML表格列中提取数据
1 年前
求醉的小刀  ·  哪种头签名是0x74736571655220? - 问答 - 腾讯云开发者社区-腾讯云
2 年前
潇洒的伤疤  ·  如何从PostgreSQL json中提取数组-阿里云开发者社区
2 年前
鬼畜的椰子  ·  JavaScript去除日期中的“-”_js 去除-_翱翔天地的博客-CSDN博客
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号