位置: 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创建项目的过程)

  • 湖南多地出现冰雪天气,为确保道路畅通和群众生产生活物资供应

    湖南多地出现冰雪天气,为确保道路畅通和群众生产生活物资供应

  • win10分辨率1920x1080不见了(win10分辨率1920x1080不见了,显卡驱动显示最新)

    win10分辨率1920x1080不见了(win10分辨率1920x1080不见了,显卡驱动显示最新)

  • 华为荣耀v20更新应用闪退(华为荣耀v20更新时退)

    华为荣耀v20更新应用闪退(华为荣耀v20更新时退)

  • 探探发消息为啥别人收不到(探探为什么会给我发消息)

    探探发消息为啥别人收不到(探探为什么会给我发消息)

  • 央视直播间在哪里看(央视频直播在哪看)

    央视直播间在哪里看(央视频直播在哪看)

  • c语言中d%是什意思(c语言中是什么意思)

    c语言中d%是什意思(c语言中是什么意思)

  • 微信不能视频聊天怎么回事(微信怎么开视频号)

    微信不能视频聊天怎么回事(微信怎么开视频号)

  • 三星锁屏就重启(三星锁屏就重启怎么回事)

    三星锁屏就重启(三星锁屏就重启怎么回事)

  • 西瓜视频搬运别人的行不(西瓜视频搬运别人视频会是原创吗)

    西瓜视频搬运别人的行不(西瓜视频搬运别人视频会是原创吗)

  • 微信版本怎么更新不了(微信怎么更最新版本)

    微信版本怎么更新不了(微信怎么更最新版本)

  • 图片怎么保存到微信表情(图片怎么保存到qq相册)

    图片怎么保存到微信表情(图片怎么保存到qq相册)

  • ksaal10是什么型号(ksaal1o)

    ksaal10是什么型号(ksaal1o)

  • usb摄像头电脑上插上为什么不显示(usb摄像头电脑上插上为什么不显示无需驱动)

    usb摄像头电脑上插上为什么不显示(usb摄像头电脑上插上为什么不显示无需驱动)

  • maya和3dmax建模的区别(maya建模和3d max建模方法一样吗)

    maya和3dmax建模的区别(maya建模和3d max建模方法一样吗)

  • 华为mt7-cl00什么型号(华为型号mt7-cl00)

    华为mt7-cl00什么型号(华为型号mt7-cl00)

  • iphonexr有256g的吗(苹果xr有256的吗?)

    iphonexr有256g的吗(苹果xr有256的吗?)

  • 阿里巴巴已收货未到账是什么意思(阿里巴巴已收货未到账)

    阿里巴巴已收货未到账是什么意思(阿里巴巴已收货未到账)

  • 怎么取消快手关注作品(怎么取消快手关联商品)

    怎么取消快手关注作品(怎么取消快手关联商品)

  • 华为mate30怎么插手机卡(华为mate30怎么插耳机)

    华为mate30怎么插手机卡(华为mate30怎么插耳机)

  • 苹果怎么开启录屏功能(苹果怎么开启录屏声音)

    苹果怎么开启录屏功能(苹果怎么开启录屏声音)

  • 锤子和苹果什么关系(锤子手机和苹果手机的关系)

    锤子和苹果什么关系(锤子手机和苹果手机的关系)

  • 苹果8p黑屏中间转圈(苹果8p黑屏有一条线然后重启)

    苹果8p黑屏中间转圈(苹果8p黑屏有一条线然后重启)

  • 收款失败通知(收款失败是什么意思)

    收款失败通知(收款失败是什么意思)

  • 脑病毒感染表现是什么?(脑部病毒感染什么症状)

    脑病毒感染表现是什么?(脑部病毒感染什么症状)

  • stk一al00是华为什么型号详情(stk al00华为)

    stk一al00是华为什么型号详情(stk al00华为)

  • vue3响应式(vue3响应式丢失)

    vue3响应式(vue3响应式丢失)

  • 【GPT4】GPT4 官方报告解读(.gp4)

    【GPT4】GPT4 官方报告解读(.gp4)

  • 什么是应付职工薪酬设定提存计划
  • 什么是存货周转率?存货周转率的意义是什么
  • 营业收入净额是营业总收入吗
  • 审计的基本流程是什么
  • 印花税可以申报以前年度吗
  • 收到赠品入库需要用什么记录
  • 资产重组账务处理 会计视野
  • 用于不动产的进项税能抵扣吗
  • 高新企业如何结转成本
  • 开具正数发票中如何体现扣款
  • 股东变动及股东情况章节
  • 无偿受让股权的股东对发起股东没有出资承担责任
  • 应交增值税减免税款账务处理
  • 卖投资性房地产交税
  • 软件著作权认证查询
  • 王者荣耀进不去怎么回事最新
  • 偶然所得怎么缴纳个人所得税免税
  • 小规模纳税人如何缴纳企业所得税
  • vs code no such file or directory
  • 股东已转让股权还可以追究出资吗
  • 木卫一距离木星多远
  • thinkphp5上传图片
  • 泛微oa二次开发难吗
  • html中的标签有哪些
  • 给员工报销
  • vue的number
  • 申请专利费用计入哪个科目
  • php curl_multi_init
  • php5.6漏洞
  • 应付账款和应收账款的关系
  • sqlcoalesce
  • 进项税额已经抵扣
  • 装修及室内设计学什么
  • 原材料卖出去会计分录
  • 收到税控系统技术维护费分录
  • 增值税现代服务业包括哪些内容
  • 旧设备入账
  • 再保险业务范围
  • 固定资产变动方式名称
  • 销售折让如何做分录
  • 预付账款计提减值吗
  • 纳税申报表多缴了怎么办
  • 社保返还补贴政策2020
  • 原料到产品
  • 建筑企业怎么结算成本
  • 进项发票可以退税吗
  • 免税发票怎么抵扣
  • 员工体检费计入什么会计科目里
  • 应交税费期初有余额吗
  • 全资子公司合并报表编制
  • 软件开发是否属于采购目录
  • 股东变更需要哪些资料和手续
  • sql sever使用教程
  • mysql误删记录查询
  • 出现错误,请联系客服
  • 安卓系统强制竖屏
  • win7 win8.1双系统安装教程
  • ubuntu 12.04安装
  • win7怎么不显示桌面图标
  • ubuntu20.04命令
  • os x10.11el capitan beta5更新了什么?os x10.11el capitan beta5下载地址
  • 在u盘里装win7
  • windowsaudio服务不存在或已删除
  • pqv2isvc.exe - pqv2isvc是什么进程 有什么作用
  • 平板电脑截图
  • win10 edge浏览器崩溃
  • win7 u盘启动按哪个键
  • 开启win7
  • perl中$_
  • 批处理中copy怎么用
  • unity gui教程
  • hbuilderx打包app教程
  • 计算字符串的长度的函数
  • js层级选择器
  • jquery动态添加html代码
  • 大学生活最后的日子
  • JavaScript焦点事件、鼠标事件和滚轮事件使用详解
  • 威海个人社保余额查询
  • 国税局地税局
  • 2o21年公租房
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设