项目实战:封装响应结果以及抽取响应代码到工具类

news2024/11/16 9:32:21

1、创建GsonUtil工具类,封装把java对象转成json字符串方法

package com.csdn.fruit.util;
import com.google.gson.Gson;
public class GsonUtil {
    public static String toJson(Object obj) {
        //java object ->  java json string
        Gson gson = new Gson();
        return gson.toJson(obj);
    }
}

2、创建dto层,数据传输对象层

  • Java中的DTO(Data Transfer Object)是一个设计模式,用于传输数据的对象。它是一个简单的Java对象,用于传递数据。它通常用于在不同层之间传递数据或在系统之间传递数据。
  • DTO通常包含与数据库表中的列相对应的字段,因此DTO通常被用作数据访问层和业务逻辑层之间的数据传输。它主要用于分离应用程序的不同层之间的业务逻辑和数据库的细节实现,从而提高了应用程序的可维护性和扩展性。
  • DTO的设计目的是为了提高代码中的可读性、可维护性和可扩展性。在Java中,DTO通常是一个普通Java类,其中包含许多私有变量和setter/getter方法。它可以包含一个或多个JavaBean对象,并且可以包含不同的数据类型,如整数、字符串、日期等。
package com.csdn.fruit.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Result {
    private boolean flag;
    private Object data;
    private String msg;
    public Result(boolean flag, Object data) {
        this.flag = flag;
        this.data = data;
    }
    public Result(boolean flag, String msg) {
        this.flag = flag;
        this.msg = msg;
    }
    public static Result OK() {
        return new Result(true, "操作成功");
    }
    public static Result OK(Object data) {
        return new Result(true, data);
    }
    public static Result Fail() {
        return new Result(false, "操作失败");
    }
    public static Result Fail(String msg) {
        return new Result(false, msg);
    }
}

3、创建ResponseUtil工具类,封装响应的内容类型json类型和打印流

package com.csdn.fruit.util;
import com.csdn.fruit.dto.Result;
import jakarta.servlet.ServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class ResponseUtil {
    public static void print(ServletResponse response, Result result) throws IOException {
        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/json;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.println(GsonUtil.toJson(result));
        out.flush();
    }
}

4、创建显示水果清单indexServlet

package com.csdn.fruit.servlet;
import com.csdn.fruit.dao.FruitDao;
import com.csdn.fruit.dao.impl.FruitDaoImpl;
import com.csdn.fruit.dto.Result;
import com.csdn.fruit.pojo.Fruit;
import com.csdn.fruit.util.ResponseUtil;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@WebServlet("/index")
public class IndexServlet extends HttpServlet {
    private FruitDao fruitDao = new FruitDaoImpl();
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        List<Fruit> fruitList = fruitDao.getFruitList();
        Result result = Result.OK(fruitList);
        ResponseUtil.print(resp,result);
    }
}

5、创建静态页面index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="style/index.css">
    <script src="script/axios.min.js"></script>
    <script src="script/index.js"></script>
</head>
<body>
  <div id="div0">
    <div id="div_title">
      <p>欢迎使用水果库存系统</p>
    </div>
    <div id="div_fruit_table">
      <table id="fruit_tbl">
        <tr>
          <th class="w25">名称</th>
          <th class="w25">单价</th>
          <th class="w25">库存</th>
          <th>操作</th>
        </tr>
        <!--
        <tr>
          <td><a href='edit.html?fid=1'>苹果</a></td>
          <td>5</td>
          <td>100</td>
          <td><img class="delImg" src="imgs/del.png" onclick='delFruit(1)'/></td>
        </tr>
        -->
      </table>
    </div>
  </div>
</body>
</html>

6、创建首页index.css样式

.delImg{
    width:24px;
    height:24px;
}
body{
    padding:0;
    margin:0;
    background-color: #333333;
}
div{
    position:relative;
    float:left;
}
*{
    color:indigo;
}
#div0{
    width:80%;
    margin-left:10%;
    background-color: aliceblue;
    padding: 60px 0px;
    margin-top:20px;
    border-radius: 8px;
}
#div_title{
    width:80%;
    margin-left:10%;
}
#div_title p{
    text-align: center;
    font-size:28px;
    letter-spacing: 8px;
}
#div_fruit_table{
    width:80%;
    margin-left:10%;
}
#fruit_tbl{
    width:88%;
    margin-left:6%;
    border:1px solid lightgray;
    line-height: 32px;
    border-collapse: collapse;
}
#fruit_tbl td , #fruit_tbl th{
    border:1px solid lightgray;
    text-align: center;
    font-weight: lighter;
}
.w25{
    width:25%;
}

 7、通过axios加载数据index.js

function $(key) {
    if (key) {
        if (key.startsWith("#")) {
            key = key.substring(1);
            return document.getElementById(key);
        }
    } else {
        let nodeList = document.getElementsByName(key);
        return Array.from(nodeList);
    }
}
window.onload=function(){
    loadData();
}
loadData=function(){
    axios({
        method:'get',
        url:'/index'
    }).then(response=>{
        debugger
        let fruitList = response.data.data
        //此处使用的是axios,那么响应回来的数据自动就是json,不需要再进行parse(如果是原始的ajax操作,那么一定需要parse)
        //let fruitArr = JSON.parse(fruitList)
        let fruitArr = fruitList
        for(let i = 0 ; i<fruitArr.length; i++){
            let fruitTbl = $("#fruit_tbl")
            let tr = fruitTbl.insertRow()
            let fnameTD = tr.insertCell()
            let priceTD = tr.insertCell()
            let fcountTD = tr.insertCell()
            let operTD = tr.insertCell()

            let fruit = fruitArr[i]
            fnameTD.innerText = fruit.fname
            priceTD.innerText = fruit.price
            fcountTD.innerText = fruit.fcount
            operTD.innerHTML="<img class=\"delImg\" src=\"imgs/del.png\"/>"
        }
    })
}

 

 

 扩展:

Java中的DTO指的是数据传输对象(Data Transfer Object),是一种设计模式,用于在不同的层之间传输数据。DTO通常包含了应用程序的业务实体的属性,并且可以与数据库表中的记录相对应。

DTO的设计目的是为了解耦视图模型和服务层模型。将DTO用于数据传输,使得视图模型和服务层模型可以各自独立地发展。DTO可以通过序列化和反序列化来传输,以便在分布式系统中使用。

DTO通常包含以下属性:

  1. 私有属性
  2. 公有setter和getter方法
  3. 无参构造函数和带参数构造函数
  4. equals和hashCode方法
  5. toString方法

DTO通常与VO(视图对象)不同,VO通常只在前端使用,用于展示数据。而DTO通常在前端和后端之间传输数据时使用。

DTO(Data Transfer Object,数据传输对象)是一种Java设计模式,它是一个包含数据的简单Java类,用于在应用程序不同层之间传输数据。

DTO通常被用于将数据从数据库或其他数据源中检索出来,然后将其传递到业务逻辑层或表示层。它们通常包含一个或多个属性,并提供访问和设置这些属性的方法。

在Java中,DTO通常使用JavaBean对象来表示,这些对象包含一组私有属性和公共getter和setter方法,以便可以轻松地访问和操作属性值。

DTO的主要优点是它们提供了简单的POJO(Plain Old Java Object)模型,使得系统中的不同层之间的数据传输更加方便和可控。同时,DTO也有助于提高代码的可读性和可维护性。

DTO全称为Data Transfer Object,即数据传输对象,是一种设计模式,用于将数据从一个层转移到另一个层。在Java中,DTO是一种简单的Java类,通常作为应用程序和数据库之间的数据传输对象,用于封装数据和传输数据。

DTO通常包含应用程序所需的所有数据。这些数据可以来自单个表或多个表,并被组合成一个对象。DTO通常具有以下特征:

  • DTO是一个纯粹的Java类,不包含任何业务逻辑。
  • DTO包含应用程序和数据库之间进行数据传输所需的所有数据。
  • DTO可能包含setter和getter方法,以便在不同层之间传输数据。
  • DTO可以用于传输单个对象或一组对象。

DTO的主要优势在于它可以简化代码和提高应用程序的性能。通过将数据传输到DTO对象中,可以减少在应用程序和数据库之间进行数据传输的次数,从而提高应用程序的响应时间。此外,DTO还可以使代码更清晰和易于维护,因为它将数据与业务逻辑分开。

DTO是数据传输对象(Data Transfer Object)的缩写,是一种设计模式,用于传输数据。在Java中,DTO通常指包含数据字段及其getter和setter方法的简单Java类。DTO通常用于在不同层之间传输数据,例如从数据库层传输数据到业务逻辑层或从业务逻辑层传输数据到表示层(如界面)。DTO通常与ORM框架(如Hibernate)一起使用,以将数据库中的数据转换为Java对象,并传递给应用程序的其他部分。DTO也被称为值对象(Value Object)或POJO(Plain Old Java Object)。

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

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

相关文章

Kibana中使用Dev Tools控制台创建索index引同时添加date类型的时间参数(用于根据时间序列展示数据)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

Jmeter参数化 —— 循环断言多方法

1、参数化接口测试数据 注意&#xff1a;csv文档参数化&#xff0c;里面有多少条数据&#xff0c;就要在线程组里循环多少次&#xff0c;不然就只执行一次 2、添加配置元件-计数器 关于计数器&#xff1a; ①Starting Value&#xff1a;给定计数器的初始值; ②递增&#xff1a…

listFiles()为null原因

调用listFiles为null原因 前言一、错误原因二、正确使用方法 前言 今天笔者在对File文件进行listFiles方法调用时&#xff0c;发现报错返回空指针异常&#xff0c;下面是列举的可能出现的错误的原因。 一、错误原因 不能对文件进行listFiles方法调用 二、正确使用方法 对文件夹…

TSINGSEE青犀景区AI智慧监管平台,赋能文旅行业高质量发展

一、背景需求分析 随着我国旅游经济的蓬勃发展&#xff0c;旅游行业逐渐成为国民经济增长的支柱性产业。“十四五”期间&#xff0c;国内旅游业将从高速增长阶段转向高质量发展阶段&#xff0c;与此同时&#xff0c;旅游景区的安全生产工作也迎来了新的挑战和需求。尤其是节假…

Ceph:关于Ceph 中创建和管理自定义 CRUSH Map

写在前面 准备考试&#xff0c;整理 Ceph 相关笔记博文内容涉及&#xff0c;管理和定制CRUSH Map以及管理OSD Map理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守其一生&#xff0c;全心全意&#xff0c;永不停息。所…

python requests模块的使用以及网页信息爬取

python requests模块的使用以及网页信息爬取 文章目录 python requests模块的使用以及网页信息爬取网页信息爬取REQUEST模块模块中的请求方法请求方法中的参数响应对象中属性 获取网站中的源代码获取图片地址匹配单个字符匹配一组字符其他元字符核心函数 图片下载 requests 模块…

经验总结2023-11-2

axios发起post请求的方式&#xff1a; 要解决跨域问题&#xff0c;后端要加&#xff0c;指定支持的方法是Pos还是get&#xff1a;

leetCode 198.打家劫舍 动态规划入门:从记忆化搜索到递推

leetCode 198.打家劫舍 198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一…

地空智能国产化RTS无线探地雷达

广东地空智能科技有限公司推出的国产RTS无线探地雷达&#xff0c;是国内首款基于实时采样、高叠加技术的无线连接的探地雷达。RTS系列雷达是主机、天线一体化设计&#xff0c;32Bit数据&#xff0c;内部配置WiFi基站&#xff0c;无线传输距离≥100M&#xff0c;1000mAh进口电芯…

十九、类型信息(6)

接口和类型 interface 关键字的一个重要目标就是允许程序员隔离组件&#xff0c;进而降低耦合度。使用接口可以实现这一目标&#xff0c;但是通过类型信息&#xff0c;这种耦合性还是会传播出去——接口并不是对解耦的一种无懈可击的保障。比如我们先写一个接口&#xff1a; …

Java实验二类编程实验

1.编写一个代表三角形的类&#xff08;Triangle.java&#xff09;。 其中&#xff0c;三条边a,b,c&#xff08;数据类型为double类型&#xff09;为三角形的属性&#xff0c;该类封装有求三角形的面积和周长的方法。分别针对三条边为3、4、5和7、8、9的两个三角形进行测试&…

软件测试:postman使用总结

一、为何使用postman postman是一款简单高效的接口测试工具&#xff0c;能够很方便发送接口请求&#xff0c;易于保存接口请求脚本&#xff0c;postman提供接口响应数据比对功能&#xff0c;可以设置预期结果作断言&#xff0c;还能把测试用例放在一个集合中批量执行&#xff…

七月论文审稿GPT第二版:从Meta Nougat、GPT4审稿到mistral、llama longlora

前言 如此前这篇文章《学术论文GPT的源码解读与微调&#xff1a;从chatpaper、gpt_academic到七月论文审稿GPT》中的第三部分所述&#xff0c;对于论文的摘要/总结、对话、翻译、语法检查而言&#xff0c;市面上的学术论文GPT的效果虽暂未有多好&#xff0c;可至少还过得去&am…

图论问题建模和floodfill算法

目录 引入&#xff1a;leetcode695.岛屿的最大面积 分析与转换 一维二维转换 四联通 完整代码解答&#xff1a; 1&#xff09;显示的创建图解决问题的代码 2&#xff09;不显示的创建图解决此问题的代码 floodfill算法 定义 引入&#xff1a;leetcode695.岛屿的最大面…

精准测试:提高软件质量和用户满意度的利器

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

c语言练习(9周)(16~20)

输入12个一位整数&#xff0c;创建二维数组a[3][4]&#xff0c;显示二维数组及各列的平均值&#xff0c;平均值四舍五入到小数点后一位。 题干输入12个一位整数&#xff0c;创建二维数组a[3][4]&#xff0c;显示二维数组及各列的平均值&#xff0c;平均值四舍五入到小数点后一…

华为云服务器,在线安装MySQL

需求 在华为云服务器上&#xff0c;部署MySQL数据库&#xff0c;通过 公网IP 访问数据库。 通过 yum &#xff0c;在线安装MySQL&#xff1b;配置远程连接&#xff0c;开放3306端口&#xff0c;能够通过公网访问。 云服务器配置说明 本文所使用的 华为云服务器 配置如下。 …

有关常见的#define定义的函数的陷阱和修正(详解)

一、#define f(x) x*x #include<stdio.h> #define f(x) x*x int main() {int a6,b2,c;cf(a)/f(b);printf("f(a)%d\n",f(a));//6*6printf("f(b)%d\n",f(b));//2*2printf("f(b1)%d\n",f(b1));//21*21; printf("f(b2)%d\n",f(b2))…

如何回答好“测得怎么样了?”

有测试员抱怨开发很糟糕&#xff0c;但我们没办法要求开发在会写代码的同时还要把代码写好&#xff0c;没有过多的bug&#xff0c;因为这就是我们的工作&#xff1b;测试员吐槽自己的老板很较真&#xff0c;但我们没办法拒绝领导们的批评指责&#xff0c;因为批评代表我们还有继…

VFIO的使用及原理

vfio设备透传主要用于将设备直通给虚拟机以提高性能&#xff0c;本篇以一张网卡为例讲述VFIO设备的配置使用及底层原理。其中涉及的技术背景主要有linuxqemukvmvfio。 一、VFIO网卡的配置使用 1.host配置iommu 首先是宿主机host必须支持硬件虚拟化技术&#xff0c;如x86架构…