Vue项目搭建及使用vue-cli创建项目、创建登录页面、与后台进行交互,以及安装和使用axios、qs和vue-axios
目录
1. 搭建项目
1.1 使用vue-cli创建项目
1.2 通过npm安装element-ui
1.3 导入组件
2 创建登录页面
2.1 创建登录组件
2.2 引入css(css.txt)
2.3 配置路由
2.5 运行效果
3. 后台交互
3.1 引入axios
3.2 axios/qs/vue-axios安装与使用
3.2.1 安装axios
3.2.2 发送get请求:
3.2.3 发送post请求:
3.2.4 简化axios使用
1. 搭建项目
工程方式搭建项目,请将测试需要用的后台web服务程序事先准备好。
1.1 使用vue-cli创建项目
在命令行,到自己的vue工程存放的目录,运行一下命令,前提是vue-cli先安装好。
vue init webpack vuepro
1.2 通过npm安装element-ui
npm install element-ui -S
1.3 导入组件
打开 src目录下的main.js,该文件是项目的入口文件,所以在这里导入,其他组件均可使用,不用再导入。
import Vue from 'vue'//新添
import ElementUI from 'element-ui' //新增
import 'element-ui/lib/theme-chalk/index.css'//新增
Vue.use(ElementUI)
。。。
2 创建登录页面
2.1 创建登录组件
1) 新建views目录,在目录上右击,选择新建vue(简单模块)创建Login
<template>
</template><script>
</script><style>
</style>
2)在element-ui组件,在form组件中找到与登录页面类似的组件,拷贝代码到刚新建的Login组件中,修改为自己需要的登录页面,页面包含:账户,密码, 提交按钮
<template><div><el-form ><el-form-item label="账户" ><el-input type="password" v-model="userName" autocomplete="off"></el-input></el-form-item><el-form-item label="密码" ><el-input type="password" v-model="passWord" autocomplete="off"></el-input></el-form-item><el-form-item><el-button type="primary" @click="submitForm('ruleForm')">提交</el-button></el-form-item></el-form></div>
</template><script>export default {name: 'Login',data: function() {return {userName: null,passWord: null,}},methods: {submitForm: function() {console.log("fdfdd");}}}
</script><style>
</style>
2.2 引入css(css.txt)
按照css.txt中的说明进行引入,用于控制样式,加入样式
base64编码:
基于64个可打印字符来表示二进制数据,用于传输8Bit字节代码,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。
2.3 配置路由
router/index.js
import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'//首先导入组件
import Login from '@/views/Login'Vue.use(Router)export default new Router({routes: [{//配置路由,根路径访问Login组件path: '/',name: 'Login',component: Login}]
})
2.4 在Login组件中将提交按键调整为100%宽度
<el-button type="primary" @click="submitForm('ruleForm')" style="width:100%">提交</el-button>
2.5 运行效果
在项目目录,运行一下命令,启动服务:
3. 后台交互
3.1 引入axios
axios是vue2提倡使用的轻量版的ajax。它是基于promise的HTTP库。它会从浏览器中创建XMLHttpRequests,与Vue配合使用非常好。
vue.js有著名的全家桶系列:vue-router,vuex, vue-resource,再加上构建工具vue-cli,就是一个完整的vue项目的核心构成。其中vue-resource是Vue.js的一款插件,它可以通过XMLHttpRequest或JSONP发起请求并处理响应,但在vue更新到2.0之后,作者就宣告不再对vue-resource更新,而是推荐的axios
3.2 axios/qs/vue-axios安装与使用
注:
qs.js它是一个url参数转化的js库。用法就两个:
var obj = qs.parse('a=b&c=d'); //将URL解析成对象的形式:{a:'b',c:'d'}
var str = qs.stringify(obj); //将对象 序列化成URL的形式,以&进行拼接:a=b&c=d'
vue-axios是在axios基础上扩展的插件,在Vue.prototype原型上扩展了$http等属性,可以更加方便的使用axios
3.2.1 安装axios
npm install axios -S
2)在Login组件中导入axios
import axios from 'axios'export default {......
3.2.2 发送get请求:
在提交按钮的监听函数中加入发送get请求的代码:
//请求url,需要保证服务可用
let url = 'http://localhost:8080/webserver/userMsg/userAction!login.action';
//注意数据是保存到json对象的params属性
axios.get(url, {params: {userNo: this.userNo,userPwd: this.userPwd}
}).then(function(response) {console.log(response);
}).catch(function(error) {console.log(error);
});
请注意下面图上的错误信息,请求发生了跨域错误问题:
跨域请求问题:
因为我们采用的是前后端分离的方式进行开发,前端和后端分别泡在不同的服务器上,基于安全性考虑,浏览器有同源策略,所以出现了跨域问题。
同源策略[same origin policy]是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源。 同源策略是浏览器安全的基石。
4)跨域问题的处理
在filter中处理跨域问题,关键代码:
// Access-Control-Allow-Origin就是我们需要设置的域名
// Access-Control-Allow-Headers跨域允许包含的头。
// Access-Control-Allow-Methods是允许的请求方式
httpResponse.setHeader("Access-Control-Allow-Origin", "*");// *,任何域名
httpResponse.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
httpResponse.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE");
filterChain.doFilter(servletRequest, servletResponse);
在资料中提供了CorsFilter,配置到web.xml中,对所以请求进行拦截处理,可解决跨域问题。注意:请配置在struts中央控制器之前
3.2.3 发送post请求:
//注意数据是直接保存到json对象
axios.post(url, {userNo: 'admin',userPwd: '123'
}).then(function(response) {console.log(response);
}).catch(function(error) {console.log(error);
});
输入的测试账号和密码均正确,使用get发送请求获取的响应为“密码正确”,但post方式发送的请求获取的响应为“密码不正确”!
原因分析:通过观察控制台可以发现,post发送请求时,请求参数是以json格式通过request payload进行传送的,的struts的并没有处理这种方式传递的参数(起码是我们使用的struts版本),所以传递到服务器的参数并没有得到有效的解析。
问题处理:
第一种方式: 在服务端编码实现request payload参数解析。在BaseAction中加入一个方法,该方法从request payload中获取json数据,并转化为指定的类。
public Object getRequestBody(Class clazz) { BufferedReader br;HttpServletRequest request = ServletActionContext.getRequest();try {br = request.getReader();String str, aStr = "";while((str = br.readLine()) != null){aStr += str;}System.out.println(aStr);Object obj = JSONObject.parseObject(aStr, clazz);return obj;} catch (IOException e) {throw new RuntimeException("获取请求参数异常: " + e);}}
获取参数时调用该方法获取
User user = (User)this.getRequestBody(User.class);
第二种方式:使用qs.js库,将{a:'b',c:'d'}转换成'a=b&c=d'。
1) 安装qs和vue-axios
npm install qs -Snpm install vue-axios -S
安装成功后会在package.json中“dependencies”中会看到安装的新库。
在提交请求时使用qs对json对象进行转换
//注意数据是直接保存到json对象
let params = {userNo: 'admin',userPwd: '123'
};//参数格式转换
let paramStr = qs.stringify(params);
console.log(paramStr);//提交时使用转换之后的参数
axios.post(url, paramStr).then(function(response) {console.log(response);
}).catch(function(error) {console.log(error);
});
观察控制台中的输出,已经将json格式转化为&连接的格式。查看返回结果是否是预期值。
3.2.4 简化axios使用
为简化axios使用,还可以使用axios全局配置及拦截器
1) 安装vue-axios
npm install vue-axios -S
2) 将提供的api目录考到src根路径下
现在可以将在Login组件中的导入axios和qs语句删除, action.js和http.js的配置详见代码中的注释。
3)将action中的配置修改为自己的后台服务配置
export default {'SERVER': 'http://localhost:8080/webserver', //服务器'SYSTEM_USER_DOLOGIN': '/userMsg/userAction!login.action', //登陆'SYSTEM_USER_DOREG': '/userAction.action', //注册//获取完整的请求地址'getFullPath': k => { //获得请求的完整地址,用于mockjs测试时使用return this.SERVER + this[k];}
}
4)配置main.js
import Vue from 'vue'//vue项目对axios的全局配置(增加配置)
import axios from '@/api/http'
import VueAxios from 'vue-axios'
Vue.use(VueAxios,axios)
......
5) 在提交时不需要手动处理转换,全局配置进行转换。
//修改url的获取方式,url已经配置在了action.js中,这里只要指定action路径
//服务地址和服务上下文已经在http.js中设置了axios.defaults.baseURL,
//axios会根据配置自动获取。
let url = this.axios.urls.SYSTEM_USER_DOLOGIN;
this.axios.post(url, params).then(resp => {console.log(resp);
}).catch(resp => {});
6)发生post请求,测试
相关文章:

Vue项目搭建及使用vue-cli创建项目、创建登录页面、与后台进行交互,以及安装和使用axios、qs和vue-axios
目录 1. 搭建项目 1.1 使用vue-cli创建项目 1.2 通过npm安装element-ui 1.3 导入组件 2 创建登录页面 2.1 创建登录组件 2.2 引入css(css.txt) 2.3 配置路由 2.5 运行效果 3. 后台交互 3.1 引入axios 3.2 axios/qs/vue-axios安装与使用 3.2…...
AVL树、红黑树的介绍和实现[C++]
本文主要对AVL树和红黑树的结构和实现方法进行一定的介绍,仅实现部分接口。 目录 一、AVL树 1.AVL树的概念 2.AVL树节点的定义 3.AVL树的插入 4.AVL树的旋转 1. 新节点插入较高左子树的左侧——左左:右单旋 2. 新节点插入较高右子树的右侧——右…...

meta分析的异质性检验指标如何计算?
一、什么是异质性? 广义:描述参与者、干预措施和一系列研究间测量结果的差异和多样性,或那些研究中内在真实性的变异。 狭义:统计学异质性,用来描述一系列研究中效应量的变异程度,也用于表明除仅可预见的…...

如何在mac 安装 cocos 的 android环境
基本概念: Java: Java 是一种编程语言,由Sun Microsystems(现在是 Oracle Corporation)开发。Java 是一种跨平台的语言,可以用于开发各种应用程序,包括 Android 应用程序。Android 应用程序的核心代码通常用…...

作为网工有必要了解一下什么是SRv6?
什么是SRv6? 【微|信|公|众|号:厦门微思网络】 【微思网络http://www.xmws.cn,成立于2002年,专业培训21年,思科、华为、红帽、ORACLE、VMware等厂商认证及考试,以及其他认证PMP、CISP、ITIL等】 SRv6&…...

Jmeter(十八):硬件性能监控指标详解
硬件性能监控指标 一、性能监控初步介绍 性能测试的主要目标 1.在当前的服务器配置情况,最大的用户数 2.平均响应时间ART,找出时间较长的业务 3.每秒事务数TPS,服务器的处理能力 性能测试涉及的内容 1.客户端性能测试:web前…...

【ARM Trace32(劳特巴赫) 使用介绍 2 -- Trace32 cmm 脚本基本语法及常用命令】
文章目录 Trace32 CMM 概述1.1 Trace32 系统命令 SYStem1.1.1 Trace32 SYStem.CONFIG1.1.2 SYStem.MemAccess1.1.3 SYStem.Mode1.1.3.1 TRST-Resets the JTAG TAP controller and the CPU internal debug logic1.1.3.2 SRST- Resets the CPU core and peripherals 1.2 Trace32 …...

2023年第七期丨全国高校大数据与人工智能师资研修班
全国高校大数据与人工智能 师资研修班邀请函 2023年第七期 线下班(昆明): 数据采集与机器学习实战 线上班(七大专题): PyTorch深度学习与大模型应用实战 数据采集与处理实战 大数据分析与机器学习实战 大数据技…...

一文获取鼎捷医疗器械行业数智化合规敏态方案
医疗器械产业是关乎国计民生的重要产业,高端医疗器械更是“国之重器”。为加强医疗器械的监督管理,提升行业质量和安全整体水平,我国出台了《医疗器械监督管理条例》、《医疗器械召回管理办法》、《医疗器械临床试验质量管理规范》、《医疗器…...

2023最新版本 FreeRTOS教程 -1-标准库移植FreeRTOS
源码下载 官网下载驱动 点击直达 源码剪裁 剪裁之后的图片,找我免费获取 添加进MDK 配置滴答定时器 全部工程获取 查看下方头像...
python笔记(函数参数、面向对象、装饰器、高级函数、捕获异常)
Python 笔记 函数参数 默认参数 在Python中,我们可以为函数的参数设置默认值。如果调用函数时没有传递参数,那么参数将使用默认值。 def greet(nameWorld):print(f"Hello, {name}!")greet() # 输出:Hello, World! greet…...
JAVA命令总结
jps命令的基本语法如下: jps [options] [hostid]其中,options是可选参数,用于指定额外的选项,hostid是可选参数,用于指定在远程主机上执行jps命令。 以下是一些常用的jps命令选项: -q:仅显示…...

删除的PPT怎么找回来?4个必备恢复方法!
“最近的期末展示需要制作一个PPT,我熬了几个大夜才完成了,但是不知道怎么的我在删除其他文件时不小心把这个PPT一起删掉了,有什么方法可以帮我找回这个误删的PPT吗?” 我们在工作和学习中,经常都需要使用到PPT&#x…...

Binder机制总结笔记
Binder机制总结笔记 什么是Binder? Binder的Android特有的IPC通信机制。Android的四大组件Activity、Service、Broadcast、ContentProvider,不同的App等都运行在不同的进程内,他们之间的通信都需要依靠Binder完成。因此Binder在整个Android系…...

SQL SERVER 表分区
1. 概要说明 SQL SERVER的表分区功能是为了将一个大表(表中含有非常多条数据)的数据根据某条件(仅限该表的主键)拆分成多个文件存放,以提高查询数据时的效率。创建表分区的主要步骤是 1、确定需要以哪一个字段作为分…...

从零开始学习PX4源码0(固件下载及编译)
目录 文章目录目录摘要1.重点学习网址2.固件下载1.下载最新版本固件2.下载之前版本固件 摘要 本节主要记录从零开始学习PX4源码1(固件下载)的过程,欢迎批评指正!!! 下载固件主要分为两个版本,之前稳定版本和最新官网发布版本,为什么要下载两个版本,主要是说明两个版本有…...
centos格式化硬盘/u盘的分区为NTFS格式
centos7好像不支持ntfs? 对报这个,ntfs not configured in kernel。 安装了ntfs-3g就可以访问了。 插上u盘查看u盘设备 #查看硬件设备及挂载目录 df -h #查看硬件设备(包括未挂载的) fdisk -l卸载外部设备 umount /dev/sdbxxx …...

【工具】FreePic2PDF+PdgCntEditor|PDF批量添加书签(Windows)
这俩软件都不大,比较便携。 FreePic2PDF: 我下载的来源:https://www.52pojie.cn/thread-1317140-1-1.html(包含下载链接https://www.lanzoui.com/it4x6j4hbvc)下载的结果:https://pan.baidu.com/s/1r8n5G42…...

中移链浏览器简介
(1)简介 生活中,常用的互联网浏览器,是用来检索、展示以及传递Web信息资源的应用程序。用浏览器进行搜索,可以快速查找到目标信息。而对于区块链而言,也有区块链浏览器。 区块链浏览器,是指为用…...

深入浅出排序算法之计数排序
目录 1. 原理 2. 代码实现 3. 性能分析 1. 原理 首先看一个题目,有n个数,取值范围是 0~n,写出一个排序算法,要求时间复杂度和空间复杂度都是O(n)的。 为了达到这种效果,这一篇将会介绍一种不基于比较的排序方法。这…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...

【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...