位置: IT常识 - 正文

axios-前后端数据交互流程(前端axios是什么)

编辑:rootadmin
axios-前后端数据交互流程 文章目录流程图示第一步:安装axios (前端)第二步:创建utils/request.js文件第三步:在main.js文件中配置axios第四步:配置跨域解决方案filter (后端)第五步:在页面传数据发请求 (前端)第六步:编写Servlet (后端)第七步:完善第五步中的请求使用注解使password反序列化流程图示

推荐整理分享axios-前后端数据交互流程(前端axios是什么),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:前端axios请求怎么中断,axios前后端数据交互流程图,axios前后端数据交互流程图,axios前后端数据交互过程,axios前后端数据交互流程图,axios前后端数据交互的内容,axios前后端数据交互过程,axios前后端数据交互的内容,内容如对您有帮助,希望把文章链接给更多的朋友!

第一步:安装axios (前端)

第二步:创建utils/request.js文件

由于axios会自动转换JSON数据,那么前台post请求传给后台的数据就是json字符串,但是后台的getParameter..方法是根据key找value的,所以后台要求数据必须是键值对的方式,配置该文件可以实现前台传给后台的数据是键值对的方式

import axios from 'axios'import qs from 'qs'/** * axios的传参方式: * 1.url 传参 一般用于Get和Delete 实现方式:config.params={JSON} * 2.body传参 实现方式:config.data = {JSON},且请求头为:headers: { 'Content-Type': 'application/json;charset=UTF-8' } * 3.表单传参 实现方式:config.data = qs.stringify({JSON}),且请求头为:且请求头为:headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' } */// axios实例const $http = axios.create({baseURL: 'http://localhost:8080/',timeout: 60000,headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' }})// 请求拦截器$http.interceptors.request.use((config) => {// 追加时间戳,防止GET请求缓存if (config.method?.toUpperCase() === 'GET') {config.params = { ...config.params, t: new Date().getTime() }}if (Object.values(config.headers).includes('application/x-www-form-urlencoded')) {config.data = qs.stringify(config.data)}return config},error => {return Promise.reject(error)})// 响应拦截器$http.interceptors.response.use(response => {const res = response.datareturn res},error => {return Promise.reject(error)})// cros 跨域是否允许凭证$http.defaults.withCredentials = true;// 导出 axios 实例export default $http第三步:在main.js文件中配置axios

下载了axios必须得导入引用才可以使用,注意一点:必须全部写在挂载函数mount()之前 这里$http为reque.js中暴露出来的

第四步:配置跨域解决方案filter (后端)

对所有的网址进行拦截,设置好跨域请求后再释放

@WebFilter(filterName = "AllFilter",urlPatterns = "/*")public class AllFilter implements Filter { public void destroy() { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { HttpServletResponse response = (HttpServletResponse) resp; HttpServletRequest request = (HttpServletRequest) req;// response.setHeader("Access-Control-Allow-Origin", "*"); //允许所有的域名访问 // 允许携带cookie response.setHeader("Access-Control-Allow-Origin",request.getHeader("origin")); response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, PATCH, DELETE"); //允许的提交方式 response.setHeader("Access-Control-Max-Age", "3600"); //最大有效时间 response.setHeader("Access-Control-Allow-Headers", "x-requested-with, Content-Type, Accept, Origin"); //允许那些请求头 response.setHeader("Access-Control-Allow-Credentials", "true"); //是否支持ajax提交cookie chain.doFilter(req, resp); } public void init(FilterConfig config) throws ServletException { }}第五步:在页面传数据发请求 (前端)axios-前后端数据交互流程(前端axios是什么)

如果是get请求那么请求参数是通过url传递的 也就是

this.$axios.get("https://localhost:8080/login?user="+this.user+"&&password="+this.password).then(...)

如果是post请求那么请求参数通过对象的方式传递

第六步:编写Servlet (后端)

匹配请求的网址,对请求作出相应的操作,需要用到请求码和消息所以会封装几个类,实现响应给前台数据的一致,便于前台拿数据 Servlet: 使用JSON对象必须添加fastjson的jar包到lib目录下

@WebServlet(name = "LoginServlet2",urlPatterns = "/login")public class LoginServlet2 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); // 注意 : 这里跟之前的不一样,需要改成json格式 response.setContentType("application/json;charset=UTF-8"); String user = request.getParameter("user"); String password = request.getParameter("password"); LoginService loginService = new LoginServiceImpl(); User user1 = loginService.logintoUser(user, password); PrintWriter writer = response.getWriter(); String json=""; if (user1!=null){ //登录成功 ResponseData<User> responseData = ResponseDataUtil.buildOk(user1); json = JSON.toJSONString(responseData); }else{ json = JSON.toJSONString(ResponseDataUtil.buildOk(ResultEnums.LOGIN_FAIL)); } writer.print(json); // 刷新,用于大文件 writer.flush(); }}

请求码的属性类

public class Meta { private int status; private String msg; public int getStatus() { return status; } public void setStatus(int status) { this.status = status; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; }}

各种请求码及信息的枚举类

public enum ResultEnums { OK(200, "请求成功"), CREATED(201, "创建成功"), DELETED(204, "删除成功"), UPDATED(205, "修改成功"), BAD_REQUEST(400, "请求的地址不存在或者包含不支持的参数"), UNAUTHORIZED(401,"未授权"), FORBIDDEN(403,"被禁止访问"), LOGIN_FAIL(414,"用户名或者密码错误"), NOT_FOUND(404,"请求的资源不存在"), UNPROCESABLE_ENTITY(422,"[POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误"), INTERNAL_SERVER_ERROR(500,"内部错误"); private int status; private String msg; ResultEnums(int status, String msg) { this.status = status; this.msg = msg; } public int getStatus() { return status; } public void setStatus(int status) { this.status = status; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; }}

响应数据类

package com.ww.web.VuePag;import java.io.Serializable;/** * <p>Title: ${file_name}</p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2020</p> * <p>Company: www.baidudu.com</p> * * @author suke * @version 1.0 * @date ${date} */public class ResponseData<T> implements Serializable { private Meta meta = new Meta(); private T data; public ResponseData(int status, String msg, T data) { this.meta.setStatus(status); this.meta.setMsg(msg); this.data = data; } public ResponseData(int status, String msg) { this.meta.setStatus(status); this.meta.setMsg(msg); } public ResponseData(ResultEnums resultEnums) { this.meta.setStatus(resultEnums.getStatus()); this.meta.setMsg(resultEnums.getMsg()); } public ResponseData(ResultEnums resultEnums, T data) { this.meta.setStatus(resultEnums.getStatus()); this.meta.setMsg(resultEnums.getMsg()); this.data = data; } public ResponseData() { } public Meta getMeta() { return this.meta; } public void setMeta(Meta meta) { this.meta = meta; } public T getData() { return data; } public void setData(T data) { this.data = data; }}

创建响应数据的工具类

/** * 带实体的统一返回 * data 实体 * <T> 实体类型 * */public class ResponseDataUtil { public static ResponseData buildOk(String msg) { return new ResponseData(ResultEnums.OK.getStatus(), msg); } public static <T> ResponseData buildOk(T data) { return new ResponseData<T>(ResultEnums.OK, data); } public static <T> ResponseData<T> buildOk(String msg,T data) { return new ResponseData(ResultEnums.OK.getStatus(), msg,data); } public static ResponseData buildOk(int status , String msg) { return new ResponseData(status, msg); } public static <T> ResponseData buildOk(int status, String msg, T data) { return new ResponseData<T>(status, msg, data); } public static ResponseData buildOk(ResultEnums resultEnums) { return new ResponseData(resultEnums); } public static <T> ResponseData buildCreate(T data) { return new ResponseData<T>(ResultEnums.CREATED, data); } public static <T> ResponseData buildDelete(T data) { return new ResponseData<T>(ResultEnums.DELETED, data); } public static <T> ResponseData buildUpdate(T data) { return new ResponseData<T>(ResultEnums.UPDATED, data); }}第七步:完善第五步中的请求

对响应回来的数据作出后续操作

login() {var that = this; // 因为then中的是箭头函数,箭头函数this指向window,所以需要在开始时获取并赋值this.$axios.post('login', {user: that.user,password: that.password}).then(function (response) {// 处理成功情况console.log(response);if (response.meta.status === 200) {// 登录成功// 将接收回来的对象存放到本地存储中let admin = response.data;localStorage.setItem("token", admin.username)// 跳转页面that.$router.push({name: "index",// 将参数带入index页面query: {username: admin.username}})} else {// 登录失败alert(response.meta.msg);}}).catch(function (error) {// 处理错误情况 500alert("服务器出错")});}使用注解使password反序列化

本文链接地址:https://www.jiuchutong.com/zhishi/294502.html 转载请保留说明!

上一篇:【Vue】- 报错 Error in render: “TypeError: Cannot read properties of undefined (reading ‘nickname‘)“(vue错误处理)

下一篇:Vue3创建项目(四)main.js配置,避坑指南(vuecli3创建项目的过程)

  • 支付宝注销了可以再注册吗(支付宝注销了可以立马注册吗)

    支付宝注销了可以再注册吗(支付宝注销了可以立马注册吗)

  • 机械键盘键帽通用吗(机械键盘键帽坏了怎么修复)

    机械键盘键帽通用吗(机械键盘键帽坏了怎么修复)

  • 探探上如何精准找到一个人(探探上如何精准搜索)

    探探上如何精准找到一个人(探探上如何精准搜索)

  • 陌陌发动态别人看不见怎么办(陌陌发动态别人给我点赞宊然没有了是怎么回事)

    陌陌发动态别人看不见怎么办(陌陌发动态别人给我点赞宊然没有了是怎么回事)

  • 淘宝什么情况下会被禁言(淘宝什么情况下不能代付)

    淘宝什么情况下会被禁言(淘宝什么情况下不能代付)

  • mate20充电功率(华为mate20充电功率)

    mate20充电功率(华为mate20充电功率)

  • bilibili属于哪个公司(bilibili属于哪个系)

    bilibili属于哪个公司(bilibili属于哪个系)

  • 怎样避免微信分身封号(怎样避免微信分身登录)

    怎样避免微信分身封号(怎样避免微信分身登录)

  • qq附近人怎么没有了(qq附近人怎么没有了怎么办)

    qq附近人怎么没有了(qq附近人怎么没有了怎么办)

  • 手机是不是越更新越卡(手机是不是越更新越不好)

    手机是不是越更新越卡(手机是不是越更新越不好)

  • 美团余额能转到微信吗(美团里的钱能转给别人吗)

    美团余额能转到微信吗(美团里的钱能转给别人吗)

  • 电脑上光盘读不出来是什么原因(电脑光盘读不出文件)

    电脑上光盘读不出来是什么原因(电脑光盘读不出文件)

  • 为什么手机会自动反向充电(为什么手机会自动重启)

    为什么手机会自动反向充电(为什么手机会自动重启)

  • 计算器上0ff是什么键(计算器上f是啥意思)

    计算器上0ff是什么键(计算器上f是啥意思)

  • 手机怎么查驾驶本分(手机怎么查驾驶证吊销时间)

    手机怎么查驾驶本分(手机怎么查驾驶证吊销时间)

  • 查找我的iphone要一直开着吗(查找我的iPhone要登陆iCloud)

    查找我的iphone要一直开着吗(查找我的iPhone要登陆iCloud)

  • 快手直播怎么开ktv模式(快手直播怎么开小窗)

    快手直播怎么开ktv模式(快手直播怎么开小窗)

  • 苹果max壁纸比例怎么调(苹果max壁纸尺寸多少)

    苹果max壁纸比例怎么调(苹果max壁纸尺寸多少)

  • 索尼xperia1防水吗

    索尼xperia1防水吗

  • 智慧团建系统终止怎么办(智慧团建系统终止贴吧)

    智慧团建系统终止怎么办(智慧团建系统终止贴吧)

  • flc是动画文件吗(flc动画全称)

    flc是动画文件吗(flc动画全称)

  • qq音乐怎么导入本地音乐(qq音乐怎么导入u盘)

    qq音乐怎么导入本地音乐(qq音乐怎么导入u盘)

  • Python的监控功能示例(python监控模块)

    Python的监控功能示例(python监控模块)

  • 帝国CMS7.0后台关键字中文逗号和空格怎么替换成英文逗号(帝国cms 开启动态)

    帝国CMS7.0后台关键字中文逗号和空格怎么替换成英文逗号(帝国cms 开启动态)

  • 居民个人的综合所得
  • 小规模纳税人收入是含税还是不含税
  • 含税销售额换算成不含税销售额的公式是什么?
  • 银行转账支付凭证有效期多久
  • 企业除了增值税还有什么税
  • 代收税款
  • 有限合伙合伙人要求
  • 准予抵扣的进项税额计算公式
  • 餐饮无票收入怎么做账
  • 折价购入股权
  • 延递所得税资产减少
  • 电费 进项税
  • 融资租入固定资产
  • 红字发票开具只能针对一份发票 不可以只冲红其中一部分吗?
  • 利润分配以前年度损益调整
  • 租赁物丢失如何赔偿
  • 销售不动产差额征收增值税
  • 汇总纳税企业的分公司如何享受税收优惠政策
  • 季度申报财务报表如何更改
  • 对境外支付佣金的规定
  • 增值税专用发票有效期是多长时间
  • 业务招待费进项税额转出
  • 0申报季末资产总额填多少
  • 如何在电脑上玩三国杀移动版
  • 鸿蒙系统怎样关闭音乐
  • 未生产期间的折旧费记到哪
  • 个体户生产经营费用与家庭生活费用无法划分
  • 怎么光驱重装系统
  • 文件被占用无法删除
  • DxDebugService.exe是什么进程 DxDebugService进程安全吗
  • PHP:pg_lo_read()的用法_PostgreSQL函数
  • 收到现金股利会引起什么变化
  • 以物易物双方做什么处理
  • 分配结转制造费用时借方科目
  • php 验证码
  • 国家税务总局关于个人因解除劳动合同
  • 非正常损失的存货进项税额转出
  • 商业汇票抵付前欠货款的分录
  • 蓬莱德尔塔
  • php实现分页显示
  • 十大经典排序算法(动图演示C 实现)
  • vue前端面试官常问的问题
  • scp命令 基于SSH协议远程复制文件
  • 小微企业的增值税税收优惠政策
  • 持续ping ip的命令
  • 帝国cms适合建什么站
  • 单位没有残疾人申报怎么申报
  • 医疗机构收据
  • mongodb快速入门
  • 占地面积法如何分摊土地成本
  • 土地增值税预缴计算方法70号公告
  • 饭店招牌发光字
  • c#连接数据库的基本步骤是什么
  • 付给对方钱对方应该怎么写
  • 不满足收入确认条件的会计分录
  • 完工产品成本计算表怎么填
  • 生产加工企业辅导资料
  • 上年度凭证录错会计凭证录错了怎么修改
  • 获取数据库最新的一条记录
  • 醒狗音乐免费下载歌曲2017最新版
  • 海量数据存储和查询
  • 音频文件恢复
  • scchost.exe - scchost是什么进程 有什么用
  • linux groupdel命令详解
  • linux中rwx
  • linux的newgrp
  • win8系统网络设置在哪里
  • centos6.9
  • cocos creator js教程
  • unity的设置在哪里
  • jquery插件使用教程
  • shell命令大全shell脚本编程100例
  • android.intent.extra.text
  • javascript编程基础
  • 基于jQuery Ajax实现上传文件
  • 基于python的应用
  • python魔法方法详解
  • 水利基金税率‰6什么时候调整
  • 上饶税务局电话号码
  • 青岛网上申请个体工商户
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设