新手入门前端与后端交互案例(HTML+Java+Axios)

article/2025/8/26 23:47:35

需求分析

前端网页向后端发起相应请求,后端响应前端的请求,做出相关操作.如前端发出获取数据库用户表的请求,后端则将用户表的内容返回给前端.简而言之,前端发出对数据库访问的请求,后端需响应结果.

项目结构

后端项目结构

实现步骤

导入相关依赖包

 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.2</version><relativePath/> <!-- lookup parent from repository --></parent><properties><java.version>1.8</java.version><!--跳过测试类打包--><skipTests>true</skipTests></properties><!--原则:按需导入--><dependencies><dependency><groupId>org.springframework.boot</groupId><!--springboot启动项(器),在包的内部springboot已经完成了项目的“整合”(配置)用户拿来就能用--><artifactId>spring-boot-starter-web</artifactId></dependency><!--数据库驱动--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!--springboot数据库连接--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.3</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies><!--springboot项目与Maven整合的一个插件可以通过插件 执行项目打包/测试/文档生成等操作注意事项:该插件不能省略,如果省略启动时报错(省略时)项目发布时:java -jar xxxx.jar 报错没有主清单信息!!--><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

配置yml文件

server:port: 8090spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/jt?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=trueusername: rootpassword: root#如果数据库密码以数字0开头 则必须使用""号包裹#password: "01234"#SpringBoot整合Mybatis配置
#定义别名包:实现对象映射
#只做增强不做改变
mybatis-plus:type-aliases-package: com.jt.pojo#映射文件加载路径mapper-locations: classpath:/mybatisplus/*.xml#开启驼峰映射configuration:map-underscore-to-camel-case: true
#不打印日志
debug: false
logging:level:com.jt.mapper: debug

各层级代码编写

使用了mybatisplus,可以不用写简单的增删改查SQL语句

mapper(dao)层

package com.jt.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jt.pojo.User;
import org.apache.ibatis.annotations.Param;
import java.util.List;
//继承接口时必须添加泛型对象,否则映射表报错
public interface UserMapper extends BaseMapper<User> {}

service业务层

创建接口:

package com.jt.service;
import com.jt.pojo.User;
import java.util.List;
public interface UserService {//查List<User> getAll();//删int delById(Integer id);//增int insertUser(User user);//改int updateUser(User user);
}

创建接口实现类:

package com.jt.service;
import com.jt.mapper.UserMapper;
import com.jt.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements UserService{@Autowiredprivate UserMapper userMapper;@Overridepublic List<User> getAll() {return userMapper.selectList(null);}@Overridepublic int delById(Integer id){return userMapper.deleteById(id);}@Overridepublic int insertUser(User user){return userMapper.insert(user);}@Overridepublic int updateUser(User user){return userMapper.updateById(user);}
}

controller控制层

package com.jt.controller;
import com.jt.pojo.User;
import com.jt.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
@RestController
@CrossOrigin
@RequestMapping("/vue")
public class VueController {@Autowiredprivate UserService userService;@GetMapping("/getUserList")private List<User> getUserList(){return userService.getAll();}@PostMapping("insertUser")private int insertUser(@RequestBody User user){return userService.insertUser(user);}@DeleteMapping("deleteById")private int deleteById(Integer id){return userService.delById(id);}@PutMapping("updateUser")private int updateUser(@RequestBody User user){return userService.updateUser(user);}
}

前端代码

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>用户数据</title><style>.hand{cursor: pointer;background-color: aquamarine;}.bgc :hover{background-color: #FF3366;cursor: pointer;}.add{cursor: pointer;background-color: red;border: 0rem;border-radius: 3px;width: 40%;}.del{background-color: deepskyblue;}</style></head><body><!-- 定义vue根标签 --><div id="app"><hr/><table id="tab1" border="1px" align="center" width="80%" bgcolor="aquamarine"><tr><td colspan="5" align="center" bgcolor="beige"><h2>用户信息表</h2></td></tr><tr align="center"><td bgcolor="brown">编号</td><td bgcolor="red">姓名</td><td bgcolor="orange">年龄</td><td bgcolor="greenyellow">性别</td><td bgcolor="#0000FF">操作</td></tr><tr align="center" v-for="user in userList"><td v-text="user.id" bgcolor="brown"></td><td v-text="user.name" bgcolor="red"></td><td v-text="user.age" bgcolor="orange"></td><td v-text="user.sex" bgcolor="greenyellow"></td><td bgcolor="#0000FF"><button @click="updateUserBtn(user)" class="hand chg">修改</button><button @click="delById(user.id)" class="hand del">删除</button></td></tr></table><div align="center"><button @click="chgFlag1()" class="add">添加用户</button></div><div v-if="flag1" align="center"><table align="center" bgcolor="#7FFFD4"><tr bgcolor="#0000FF"><td>名称:<input type="text" v-model.trim="addUser.name" /></td></tr><tr bgcolor="magenta"><td>年龄:<input type="text" v-model.number="addUser.age"/></td></tr><tr bgcolor="royalblue"><td>性别:<input type="text" v-model.trim="addUser.sex"/></td></tr><tr align="right" bgcolor="rosybrown"><td><button @click="insertUser" style="background-color: green;">确认</button></td></tr></table></div><hr /><div align="center"><button @click="chgFlag2()" class="add">修改用户</button></div><div v-if="flag2" align="center"><table align="center" bgcolor="#7FFFD4"><tr bgcolor="#0000FF"><td>名称:<input type="text" v-model.trim="upUser.name" /></td></tr><tr bgcolor="magenta"><td>年龄:<input type="text" v-model.number="upUser.age"/></td></tr><tr bgcolor="royalblue"><td>性别:<input type="text" v-model.trim="upUser.sex"/></td></tr><tr align="right" bgcolor="rosybrown"><td><button @click="updateUser()" style="background-color: green;">提交</button></td></tr></table></div></div><script src="../js/axios.js"></script><script src="../js/vue.js"></script><!-- 页面中的数据必须在data中定义Ajax的请求结果赋值给属性--><script>axios.defaults.baseURL = "http://localhost:8090"const App = new Vue({el: "#app",data: {a: null,flag1: false,flag2: false,userList: [],addUser: {name: ' ',age: null,sex: ' '},upUser: {id: null,name:' ',age: null,sex: ' '}},methods: {async getUserList(){let {data: result} = await axios.get("/vue/getUserList")// console.log(result)//ajax请求结果赋值给属性this.userList = result},async insertUser(){let {data: result} = await axios.post("/vue/insertUser", this.addUser)console.log(result)//将列表页面重新刷新this.getUserList()},async delById(n){if(confirm("确定删除吗")){let {data: result} = await axios.delete("/vue/deleteById",{params: {id: n}})this.getUserList()}},updateUserBtn(user){this.upUser=user},async updateUser(){await axios.put("/vue/updateUser",this.upUser)alert("更新成功")this.upUser={}},chgFlag1(){this.flag1 = !this.flag1},chgFlag2(){this.flag2 = !this.flag2}},mounted(){this.getUserList()},})</script></body>
</html>

结果显示

网页首页

 

添加用户

点击添加用户按钮,显示结果如下,输入名字、年龄、性别之后点击确认即可添加成功

 更新用户

每条数据信息之后都有相应的修改和删除操作,点击更新按钮,即可在网页下方回显当前需要更新的数据,然后更改相应的姓名、年龄、性别,提交之后即可更新成功

 

 删除用户

点击删除按钮,页面会提示是否确认删除,确认之后即可删除用户,取消则不会进行删除操作


http://chatgpt.dhexx.cn/article/uPtLckfO.shtml

相关文章

web开发中前端页面是如何跟后端服务器数据交互的

后端服务器一般是指servlet容器&#xff0c;用于执行java源程序 常见的网页有html&#xff0c;htm,shtml&#xff0c;asp&#xff0c;aspx&#xff0c;php&#xff0c;jsp等格式 前两个常用于静态网页&#xff0c;后面几个常用于动态网页。 这里前端网页以比较常见的 xx.html…

前端与后端接口的交互案例

一、案例描述 1&#xff0c;前端页面提供用户名&#xff0c;密码输入框。 2&#xff0c;通过Ajax发送请求到后端Serlvet。 3&#xff0c;后端Serlvet处理请求&#xff0c;根据输入的用户名和密码返回给前端不同信息 前端访问后端接口通过后端提供的的URL 二、主要代码 1、前…

前端和后端 数据交互的基本知识

一、首先了解前端、后端、数据三者的关系 1) 前端通常是html&#xff0c;css&#xff0c;js三者构成的页面的总称。运行在客户端。以浏览器为例。 2) 后端是指后端程序。比如java&#xff0c;php等编写的一些服务。用来操作服务器。 3) 数据&#xff0c;数据都存放在服务器上…

前端和后端交互的方式

1.前端开发与后台交互的方式 &#xff08;1&#xff09;form提交 同步请求 &#xff08;2&#xff09;Ajax提交 异步请求 发送json对象 一 、Ajax&#xff1a;异步的javascript和XML 主要优点&#xff1a; 1.异步请求&#xff0c;不妨碍用户浏览页面或者其他操作。 2.局部刷…

树与树的存储结构+二叉树的遍历

树的存储结构&#xff1a; 三序说的是根节点的访问顺序 深度优先遍历(先序、 中序和后序) 沿着上图路径行走: 第一次来到某个结点时访问&#xff0c;所得序列为先序遍历序列; 第二次来到某个结点时访问&#xff0c;所得序列为中序遍历序列; 第三次来到某个结点时访问&#xff0…

2023年最新前端面试题

HTML 一、HTML5标记 <header></header> 头标记<nav></nav> 导航标记&#xff0c;表示页面中导航链接部分<!--main标记在一个网页中只能有一个&#xff0c;主要内容区域要区别--> <main></main> 主要内容标记<secti…

每日一题之二叉树

描述 输入一个整数数组&#xff0c;判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回 true ,否则返回 false 。假设输入的数组的任意两个数字都互不相同。 数据范围&#xff1a; 节点数量 0 \le n \le 10000≤n≤1000 &#xff0c;节点上的值满足 1 \le val \le 1…

2021最新最全前端面试题(包含HTML、CSS、JavaScript、Vue、React、浏览器、算法与数据结构等)

整理了一些前端面试题,希望对正在找前端工作的伙伴有用。本篇文章内容篇幅较大,主要针对初中级前端开发工程师。 篇幅过长,大家可以先点赞收藏以后慢慢看。 关于HTML 的title和alt属性有什么区别 alt:图片加载失败时,显示在网页上的替代文字title:鼠标(手机端该属性无…

CSS解决盒模型居中的问题,分分钟搞定!

一、简历的准备 简历制作是很重要的一个环节,一份好的简历会给面试官留下很不错的印象,也有助于你顺利通过简历筛选环节。 个人基本信息:主要是姓名,联系方式,邮箱,学历等;技术技能:对了解、熟练掌握、精通这类词有概念,不要随便用精通;因为面试官一般会根据简历内容…

培训前端开发机构,CSS文本样式值

一、简历的准备 简历制作是很重要的一个环节&#xff0c;一份好的简历会给面试官留下很不错的印象&#xff0c;也有助于你顺利通过简历筛选环节。 个人基本信息&#xff1a;主要是姓名&#xff0c;联系方式&#xff0c;邮箱&#xff0c;学历等&#xff1b;技术技能&#xff1…

学习路线图必不可少,CSS字体样式的使用

标签语义化&#xff1a; 语义和默认样式的区别&#xff1a; 默认样式是浏览器设定的一些常用tag的表现形式&#xff1b;语义化的主要目的就是让大家直观的认识标签和属性的用途和作用&#xff1b; 标签语义化作用&#xff1a; 当只有HTML页面时&#xff0c;没有CSS&#xf…

web前端开发自学难吗,CSS颜色基本样式

字节跳动算法题 链表 面试题&#xff1a;反转单向链表 题目需要将一个单向链表反转。思路很简单&#xff0c;使用三个变量分别表示当前节点和当前节点的前后节点&#xff0c;虽然这题很简单&#xff0c;但是却是一道常考题 以下是实现该算法的代码 var reverseList funct…

CSS的浮动属性,终获offer

前言 最近在准备面试&#xff0c;然后复习下之前写过的项目&#xff0c;书籍&#xff0c;笔记&#xff0c;文章。一看很多知识点都没有印象&#xff0c;最可拍的是连自己为了防止忘记写的文章竟然都感觉不是自己写的。有些开始怀疑人生了。 好了&#xff0c;废话少说&#xf…

CSS介绍,这些知识你必须拿下

前言 跳槽&#xff0c;这在 IT 互联网圈是非常普遍的&#xff0c;也是让自己升职加薪&#xff0c;走上人生巅峰的重要方式。那么作为一个普通的Android程序猿&#xff0c;我们如何才能斩获大厂offer 呢&#xff1f; 疫情向好、面试在即&#xff0c;还在迷茫踌躇中的后浪们&…

web开发在线培训,CSS浮动实战

一、简历的准备 简历制作是很重要的一个环节,一份好的简历会给面试官留下很不错的印象,也有助于你顺利通过简历筛选环节。 个人基本信息:主要是姓名,联系方式,邮箱,学历等;技术技能:对了解、熟练掌握、精通这类词有概念,不要随便用精通;因为面试官一般会根据简历内容…

CSS浮动实战,你还看不明白?

一、简历的准备 简历制作是很重要的一个环节,一份好的简历会给面试官留下很不错的印象,也有助于你顺利通过简历筛选环节。 个人基本信息:主要是姓名,联系方式,邮箱,学历等;技术技能:对了解、熟练掌握、精通这类词有概念,不要随便用精通;因为面试官一般会根据简历内容…

web设计与开发,CSS块元素

一、简历的准备 简历制作是很重要的一个环节&#xff0c;一份好的简历会给面试官留下很不错的印象&#xff0c;也有助于你顺利通过简历筛选环节。 个人基本信息&#xff1a;主要是姓名&#xff0c;联系方式&#xff0c;邮箱&#xff0c;学历等&#xff1b;技术技能&#xff1…

CSS介绍,含面试题+答案

前言 正式学习前端大概 3 年多了&#xff0c;接触前端大概 4 年了&#xff0c;很早就想整理这个书单了&#xff0c;因为常常会有朋友问&#xff0c;前端该如何学习&#xff0c;学习前端该看哪些书&#xff0c;我就讲讲我学习的道路中看的一些书&#xff0c;虽然整理的书不多&a…

CSS全局样式,帮你突破瓶颈

一、简历的准备 简历制作是很重要的一个环节,一份好的简历会给面试官留下很不错的印象,也有助于你顺利通过简历筛选环节。 个人基本信息:主要是姓名,联系方式,邮箱,学历等;技术技能:对了解、熟练掌握、精通这类词有概念,不要随便用精通;因为面试官一般会根据简历内容…

前端笔试错题总结

目录 题目分类HTMLinput的type属性如下&#xff1a; CSSJS算法操作系统计算机网络数据结构完全二叉树哈夫曼树二叉排序树大根堆 小根堆线性探查解决hash冲突 数据库浏览器 题目分类 HTMLCSSJS数据库算法操作系统计算机网络数据结构浏览器 HTML input的type属性如下&#xff…