vue 一键导出数据为excel文件并附带样式 十分简单

自入行以来我就一直疑惑一个问题,导出excel为什么总是搞的很复杂,包括网上的教程,屎里淘金,非常耗费精力。今天刚好业务需要,整理一个简单明了的由vue前端导出的版本出来。

开始:

  #1.添加xlsx、xlsx-style、file-saver三个包

npm install xlsx xlsx-style file-saver

如果项目里已经有了这三个包,那就不用再执行了,请自行查看项目的package.json文件

  #2.在使用的页面中引入

import XLSX from 'xlsx';
import XLSX_STYLE from 'xlsx-style';
import { saveAs } from 'file-saver';

  #3.添加如下方法

如下,添加如下方法,vue项目方法写在哪里我就不赘述了。showData为Array对象,用map自行组装数据,然后定义表头样式,内容样式,可自行修改,最后一键导出,十分简洁明了,非常省事,需要操心的仅仅是准备数据集

    exportExcel() {
      const data = this.showData.map(item => {
        return {
          '类型': item.type,
          '订单日期': item.createdTime,
          '订单号': item.logistNo,
          '备注': item.note,
        }
      });
      // 定义表头样式
      const headerStyle = {
        fill: {
          fgColor: { rgb: '0070C0' },
        },
        font: {
          color: { rgb: 'FFFFFF' },
          name: 'Calibri',
          sz: 11,
        },
        border: {
          top: { style: 'thin', color: { rgb: '000000' } },
          bottom: { style: 'thin', color: { rgb: '000000' } },
          left: { style: 'thin', color: { rgb: '000000' } },
          right: { style: 'thin', color: { rgb: '000000' } },
        },
      };
      const contentStyle = {
        font: {
          name: 'Calibri',
          sz: 11,
        },
        border: {
          top: { style: 'thin', color: { rgb: '000000' } },
          bottom: { style: 'thin', color: { rgb: '000000' } },
          left: { style: 'thin', color: { rgb: '000000' } },
          right: { style: 'thin', color: { rgb: '000000' } },
        },
      };
      const worksheet = XLSX.utils.json_to_sheet(data);

      // 将表头样式应用到 worksheet 对象中的表头单元格
      const headerRange = XLSX.utils.decode_range(worksheet['!ref']);
      for (let col = headerRange.s.c; col <= headerRange.e.c; col++) {
        const headerCell = XLSX.utils.encode_cell({ r: headerRange.s.r, c: col });
        worksheet[headerCell].s = headerStyle;
      }

      // 将内容样式应用到 worksheet 对象中的所有单元格
      const contentRange = XLSX.utils.decode_range(worksheet['!ref']);
      for (let row = contentRange.s.r + 1; row <= contentRange.e.r; row++) {
        for (let col = contentRange.s.c; col <= contentRange.e.c; col++) {
          const contentCell = XLSX.utils.encode_cell({ r: row, c: col });
          worksheet[contentCell].s = contentStyle;
        }
      }
      const workbook = XLSX.utils.book_new();
      XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
      // 将 workbook 对象转换为二进制数据流并下载
      const wbout = XLSX_STYLE.write(workbook, { bookType: 'xlsx', type: 'binary' });
      const blob = new Blob([this.s2ab(wbout)], { type: 'application/octet-stream' });
      saveAs(blob, 'table.xlsx');
    },
    s2ab(s) {
      const buf = new ArrayBuffer(s.length);
      const view = new Uint8Array(buf);
      for (let i = 0; i < s.length; i++) {
        view[i] = s.charCodeAt(i) & 0xFF;
      }
      return buf;
    }

  #4.Excel样式展示

 

 结束

本文转载于网络 如有侵权请联系删除

相关文章

  • 使用Iocomp工控图表工具绘制实时曲线

    大家好,又见面了,我是你们的朋友全栈君。概述:本文为使用Iocomp工控图表工具绘制实时曲线探索及研究教程,为大家介绍了Iocomp控件、实时曲线绘制方法、Iocomp界面操作,属性分类等。帮助学习者更好的运用Iocomp。[摘要]数据采集是控制系统最常见的任务,对于大量的实时采集数据采用曲线加以分析已成为很重要的一种手段。文章将介绍如何用Iocomp控件实现控制软件中的实时曲线的设计与绘制,并结合实例程序加以具体说明。实践表明,该方法简单可靠,对工业实时控制应用有一定借鉴意义。Iocomp控件:IocompActiveX/VCL Iocomp.NETWinForm Iocomp.NetCF 0.引言在工业控制领域,需要进行大量的数据处理和可视化显示。实时监测软件中,常常需要将采集到的数据实时显示到界面上来,以便于工作人员观测,及时发现问题和解决问题,通常还要求曲线可伸缩、可漫游、可取值,可若干条曲线的比较,以增强其可分析性。传统的控制软件开发工具多用DOS或Windows下的C语言开发,导致系统开发周期长,可维护性差,并且不具有标准的Windows图形用户界面。VB作为一种Wind

  • Jenkins pipeline 拉取gitlab项目大文件失败

    背景:pipeline都基本是一个模板,参照:JenkinsPipeline演进。最近新上了一个项目。springcloud的聚合工程,8个子项目。本来是要求程序直接提交代码到gitlab,我直接自己maven打包,并且dockerbuild构建镜像并发布到线上环境。但是程序喜欢个人提交jar包(每个jar包100m左右)。gitlab比较老只开通了http方式,并没有开通ssh方式。开始还好jenkins还能发布,昨天晚上直接不能发布了....报错如下:RPCfailed;HTTP504curl22TherequestedURLreturnederror:504GatewayTime-out复制解决问题思路:嗯git文件过大!。解决方式无非两种:1.增加ssh方式clone方式修改为ssh。老的不想动了,并且容器里面clone构建的。整ssh的方式就不采用了。2.获取最新的版本--depth=1的方式如下: stage("GetCode"){ agent{label"build01"} steps{ script{

  • 字节终面:CPU 是如何读写内存的?

    如果你觉得这是一个非常简单的问题,那么你真应该好好读读本文,我敢保证这个问题绝没有你想象的那么简单。注意,一定要完本文,否则可能会得出错误的结论。闲话少说,让我们来看看CPU在读写内存时底层究竟发生了什么。谁来告诉CPU读写内存我们第一个要搞清楚的问题是:谁来告诉CPU去读写内存?答案很明显,是程序员,更具体的是编译器。CPU只是按照指令按部就班的执行,机器指令从哪里来的呢?是编译器生成的,程序员通过高级语言编写程序,编译器将其翻译为机器指令,机器指令来告诉CPU去读写内存。在精简指令集架构下会有特定的机器指令,Load/Store指令来读写内存,以x86为代表的复杂指令集架构下没有特定的访存指令。精简指令集下,一条机器指令操作的数据必须来存放在寄存器中,不能直接操作内存数据,因此RISC下,数据必须先从内存搬运到寄存器,这就是为什么RISC下会有特定的Load/Store访存指令,明白了吧。而x86下无此限制,一条机器指令操作的数据可以来自于寄存器也可以来自内存,因此这样一条机器指令在执行过程中会首先从内存中读取数据。关于复杂指令集以及精简指令集你可以参考这两篇文章《CPU进化论:复

  • Linux 内存管理之vmalloc

    走进vmalloc根据前面的系列文章,我们知道了buddysystem是基于页框分配器,kmalloc是基于slab分配器,而且这些分配的地址都是物理内存连续的。但是随着碎片化的积累,连续物理内存的分配就会变得困难,对于那些非DMA访问,不一定非要连续物理内存的话完全可以像malloc那样,将不连续的物理内存页框映射到连续的虚拟地址空间中,这就是vmap的来源)(提供把离散的page映射到连续的虚拟地址空间),vmalloc的分配就是基于这个机制来实现的。vmalloc最小分配一个page,并且分配到的页面不保证是连续的,因为vmalloc内部调用alloc_page多次分配单个页面。vmalloc的区域就是在上图中VMALLOC_START-VMALLOC_END之间,可通过/proc/vmallocinfo查看。数据结构vmap_area描述一段虚拟地址的区域,可以将structvm_struct构成一个链表,维护多段映射。structvmap_area{ unsignedlongva_start;//vmalloc申请虚拟地址返回的起始地址 unsignedlongva_end;

  • 原来sqlite3_get_table() 是这样抓取数据的!!!

    ①容我重新介绍一下sqlite3_get_teble()函数和sqlite3_exec()这种使用回调函数的方式不同,sqlite3_get_table()的功能要显得更加直接。它通过控制语句的传入,直接将参数赋值给指针传出。来看一下函数原型:#include<sqlite3.h> intsqlite3_get_table(sqlite3*db,char*order,char***dResult,int*nRow,int*nColnm,char**errmsg); //参数释义 /* db:数据库 order:控制语句 **dResult:二维数组 nRow:查询结果条数 nColnm:每条结果包含多少数据 errmsg:报错信息 */复制②从“大数据”中抓取我们需要的数据 上面是我们的“大数据”(别笑,哈哈哈哈哈)。数据库对象为db,表名叫v_tableQ:现在,我们要从这组数据中抓取v_id为1001的图片信息(v_pic),怎么办? A:查询语句:selectv_picfromv_tablewherev_id=1001 很简单啊,但是通过sqlite3

  • 「软件架构」InfoQ 软件架构和设计趋势报告2020年4月

    关键点需要关注的新软件架构趋势包括微前端、数据网格、AsyncAPI和作为代码的策略(PolicyasCode)。目的的多样性表明,创新在架构景观的许多不同领域都在发生。随着微服务变得越来越普遍,开始使用微服务架构的阻力也越来越大。更多的公司正在研究正确构建分布式系统或创建现代、模块化单体的基本原理,他们的想法是,可能需要在稍后的时间将它们分为微服务。GraphQL显然已经跨越了鸿沟,唯一的争论是它被采用的范围有多广。在扩展GraphQL并使其普遍适用于大型企业方面仍有创新。人们对低代码/无代码平台越来越感兴趣,这使得非开发人员能够定制系统。跟踪的几个架构概念仅适用于某些情况。因此,他们在采纳曲线上没有自然的进展。示例包括函数式编程和事件驱动架构。良好的软件架构的目标是帮助管理复杂的系统。针对分布式系统、事件驱动架构和大数据,软件架构的最新创新希望利用正在出现的最佳实践,并帮助指导工程师远离常见的陷阱。InfoQ软件架构和设计主题图强调了主要的软件架构概念及其在业界的应用现状。InfoQ和QCon都专注于图表的左侧,涵盖了创新者和早期采用者之间的软件趋势状态。我们也在寻找最终“跨越鸿沟

  • C++核心准则编译边学-F.16 对于输入参数来说,拷贝代价小的传值,其他传递const参照

    F.16:For"in"parameters,passcheaply-copiedtypesbyvalueandothersbyreferencetoconst(对于输入参数来说,拷贝代价小的传值,其他传递const参照)Reason(原因)Bothletthecallerknowthatafunctionwillnotmodifytheargument,andbothallowinitializationbyrvalues.两种方式都可以让调用者知道函数不会修改参数并且都可以通过右值初始化。 Whatis"cheaptocopy"dependsonthemachinearchitecture,buttwoorthreewords(doubles,pointers,references)areusuallybestpassedbyvalue.Whencopyingischeap,nothingbeatsthesimplicityandsafetyofcopying,andforsmallobjects(uptotwoorthreewords)it

  • 业界代码安全分析软件介绍

    前言应用安全分析类型按照使用场景分为四类方向:静态AST(SAST)技术通常在编程和/或测试软件生命周期(SLC)阶段分析应用程序的源代码,字节代码或二进制代码以查找安全漏洞。动态AST(DAST)技术在测试或运行阶段分析应用程序的动态运行状态。它模拟针对应用程序(通常是支持Web的应用程序和服务)的攻击,分析应用程序的反应,从而确定它是否易受攻击。交互式AST(IAST)技术同时结合了SAST和DAST的元素。它通常作为测试运行时环境中的代理实现(例如,测试Java虚拟机[JVM]或.NETCLR),用于观察操作或攻击并识别漏洞。(可以发现iast类似于rasp,可以同扫描器结合起来将安全检测融入产品,通过类似于打桩的机制判断漏洞真实性。)MobileAST对字节或二进制代码执行SAST,DAST,IAST和/或行为分析,以识别移动应用程序中的漏洞。考量点静态代码审计目前比较好的案例有Android方面改造的静态检查组合sonarLint+findbugs+AndroidLint。但是对于服务器端代码质量和安全方面都检测手段还是严重不足的。目前的开源工具普遍适用于表现在对代码检测,而

  • 使用ApiBoot Logging进行统一管理请求日志

    ApiBootLogging通过集成minbox-logging来进行管理每一次请求的日志信息,包含头信息、参数、主体内容、路径、发生的服务器相关信息等,根据接口的响应状态还可以记录响应的头信息、响应的内容以及发生异常时的堆栈信息。minbox-projects开源组织“org.minbox.framework”致力于向广大开发者提供一系列的“开箱即用”的框架落地实现解决方案。自从ApiBoot框架的落地,内部集成的第三方插件(plugin)日渐增多也同样导致了ApiBoot的源码太过于冗肿,针对这个问题minbox-projects开源组织就诞生了,ApiBoot第一个加入了该组织,并且会将ApiBoot内集成的第三方插件进行陆续分离,将每一个插件作为独立的开源项目加入minbox-projects开源组织,方便各个项目的单独维护以及更新发版。组织首页:https://gitee.com/minbox-projectsminbox-logging日志组件minbox-logging日志组件是minbox-projects开源组织内的一员,是一款分布式零侵入式、链路式请求日志分析框架。

  • Click fireworks

    Gridea博客添加点击爆炸特效将下方代码添加到你当前使用主题的index.ejs即可加入到首页,我推荐只将其加入到首页,文章页尽量保持简洁。<!--点击爆炸特效start--> <canvasclass="fireworks"style="position:fixed;left:0;top:0;z-index:1;pointer-events:none;"></canvas> <scriptsrc="https://cdn.bootcss.com/animejs/2.2.0/anime.min.js"></script> <scriptsrc="https://borber.cn/media/scripts/lib/fireworks.js"></script> <!--点击爆炸特效ends-->复制如果有问题的话尝试添加下面这段代码到你的head.ejs<scriptsrc="https://

  • 业界 | 谷歌和 OpenAI 强强联手找到了神经网络「黑盒子」的正确打开方式!

    AI科技评论按:现代神经网络经常被吐槽为「黑盒子」。尽管它们在各类问题上都取得了成功,但我们仍无法直观地理解它们是如何在内部做出决策的。随着人工智能系统被应用到更多重要的场景中,更好地了解其内部决策过程将有助于研究者能够及时发现其中的缺陷和错误。对此,谷歌AI研究院与OpenAI一起合作提出了能够弄清这个「黑盒子」里面到底有什么的新方法——激活图集。谷歌在博客上发布文章介绍了这一意义重大的成果,AI科技评论编译如下。神经网络已成为图像相关计算任务中的实际标准,目前已被部署在多种场景中:从自动标记图像库中的照片到自动驾驶系统,我们都能看到神经网络的身影。鉴于机器学习系统的在执行方面的准确性比不使用机器学习、直接由人为设计的系统更好,机器学习系统开始变得无处不在。但是,由于这些系统所了解的基本信息都是在自动训练过程中学习到的,因此我们对于网络处理其给定任务的整个过程的了解,有时仍然隔着一层纱。近期,经过与OpenAI同事的通力合作,我们在发表的《用激活图集探索神经网络》论文中(「ExploringNeuralNetworkswithActivationAtlases」,论文地址:https

  • 齿轮说干货:TO B 企业内容营销框架概览

    在上次分享的《企业新媒体营销框架概览》中,主要从互联网内容行业进阶过程、企业新媒体传播渠道、企业新媒体如何布局三方面为大家梳理新媒体营销框架,此篇接力上篇内容,以TOB企业为例,为大家详细展示内容营销框架和注意事项,力求为大家展现内容营销的全流程和内在逻辑。内容营销框架主要分为内容规划、内容团队搭建、内容生产、内容传播、内容效果评估等五大部分。在日常工作中,大部分公司都不一定有严格意义上的框架逻辑,大家可以根据自己的需要有针对性地阅读以下内容。内容规划对于B端用户,一般呈现的内容类型有干货、案例、新闻、白皮书、电子书及书籍。近两年,随着短视频的火热,一些TOB企业也会适当在一些平台发布音频和视频。以上只是对B端内容做简单的分类,具体什么阶段发布什么内容,还需要细分。可以从用户类型、用户角色模型和用户转化过程进行内容规划。用户类型细分很少企业目标只有一个类型的客户,一般都会有几个不同客户类型。客户分类的方法很多,总体上可以分为:普通客户、潜在客户、成交客户、忠诚客户。不同类型,需准备的内容也不同。要明确目标群体是谁?他们关心什么问题?你能提供怎样的答案?你能提供怎样的服务?1)普通客户,

  • python测试开发django-18.admin后台中文版

    前言django的admin后台页面默认是英文的,不喜欢英文的话,可以改下setting.py里面的语言设置,改成中文版的显示语言设置打开setting.py,找到以下内容#Internationalization #https://docs.djangoproject.com/en/2.1/topics/i18n/ LANGUAGE_CODE='en-us' TIME_ZONE='UTC' USE_I18N=True USE_L10N=True USE_TZ=True复制需要修改一个地方,其中zh-Hans是简体中文,zh-Hant是繁体中文。修改后如下#LANGUAGE_CODE='en-us' LANGUAGE_CODE='zh-Hans'#设置简体中文,zh-Hant是繁体中文 TIME_ZONE='UTC'#时区 USE_I18N=True USE_L10N=True USE_TZ=True复制TIME_ZONE是设置时区,如果想设置中国的时区,可以设置TIME

  • Kotlin---接口与继承

    接口与抽象类的区别同样在Kotlin中也有接口的概念,与Java不同的是,Kotlin中的接口可以定义变量,但是不能为变量提供构造函数,也可以实现函数体,如果没有实现的函数,默认抽象,不需要使用abstract来定义。而抽象类中,可以为定义的变量提供构造函数进行赋值,而如果没有赋值的变量需要使用abstract来定义,而没有实现的函数也需要使用abstract来定义接口Kotlin中的接口可以定义变量,也允许实现函数体。但是不允许有构造函数,并且抽象函数也不需要使用abstract关键字定义。但是在实现接口的子类中必须使用override来覆盖接口中所定义的变量以及抽象函数。而提供了get方法的变量,也就不需要子类实现了。interfaceIPerson{ valmName:String varmAge:Int valmDump:String get()="$mName...$mAge" funprint(){ Log.e("IPerson","mName:$mName...mAge:$mAge") } funwalk()

  • 7.10 VR扫描:VR恐怖游戏《Gates of Nowhere》已提前登陆Steam

    微软系MR头显大力促销中,最大折扣超4成 微软系MR头显是微软和一众OEM大厂合作开发的,其即插即用性相比其HTCVive等更加的平易近人。近日,亚马逊上大多数WindowsMR头显正在大折扣促销中,最大的一项折扣超过4成。虽然有好多款头显都在促销,但是三星的奥德赛MR头显依旧是499美元的原价,并没有加入到促销活动。VRPinea独家点评:此次的大促销虽不明原因,但是却推动了用户购买WindowsMR头显。深圳商报推出首个纸媒AR广告今日,深圳市民用手机扫描深圳商报封面报眼广告时,惊讶的发现,广告里的图片居然“动”了起来,广告版面立马变成了屏幕画面。这是深圳商报精心打造的第一个报纸AR广告。这项技术,巧妙的打破了二维与三维的界限,实现平面阅读和立体影像的无界转换。但这并不是国内首例,早在5月初,河南日报就推出过了这种AR广告。VRPinea独家点评:有趣的阅读方式,让纸媒也变得“活泼”起来。致敬《马里奥赛车》,《RoomRacer》带来休闲AR竞速体验支持于iPhone和iPad的《RoomRacer》,作为一款传统的遥控赛车游戏,在AR中获得了新的生命。该款游戏支持完整的赛道编辑器

  • nginx+php-fpm配置zend framework

    server{ listen80; server_name192.168.1.187; root/var/www/html/public; indexindex.php; #charsetutf-8; location~*\.(js|ico|gif|jpg|png|css|jpeg|swf)${ access_logoff; expires2d; } location/{ if(!-f$request_filename){ rewrite^(.+)$/index.php?$1&last; } } location~\.php${ root/var/www/html/public; fastcgi_pass127.0.0.1:9000; fastcgi_indexindex.php; fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name; includefastcgi_params; } #denyaccessto.htaccessfiles,ifApache’sdocumentroot #concurswi

  • 金融科技&大数据产品推荐: 换汇API/海外支付API——让跨境支付更简单

    官网|www.datayuan.cn 微信公众号ID|datayuancn 本产品为数据猿推出的“金融科技价值—数据驱动金融商业裂变”大型主题策划活动第一部分的文章/案例/产品征集部分;感谢Airwallex的产品投递 1、产品名称 换汇API/海外支付API 2、所属分类 金融科技·风控、智能定价 3、产品介绍 针对跨境支付流程中,传统支付方式效率偏低,到账时间不确定,小额高频成本居高不下等常见问题,Airwallex(空中云汇系统)运用先进的大数据,人工智能和算法技术,通过多币种分布式账本和点对点结算提供实时换汇,实时追踪交易款项的位置和进程,选择最优途径,并绕开代理行,省去中间费用和人工损耗,大幅提高效率,保障资金安全;同时,空中云汇还提供自动化API,专为处理量大、换汇频次高的客户而设计,在提高支付速度的同时,优化付款流程,最小化风险和成本。 4、应用场景/人群 应用场景:海外换汇分发 目标客户群:银行,支付机构,以及有海外换汇分发需求的商户(如跨境电商、在线教育平台、在线旅游平台等) 5、产品功能 通过自行研发的软件系统来控制跨境支付中的换汇及分发的资金流和信息流; 通过机器

  • 英特尔布局神经形态计算芯片

    据外媒报道,英特尔(Intel)实验室开发了一种神经形态处理器,研究人员认为它可以比传统架构的芯片(如GPU或CPU)更快、更有效地执行机器学习任务。对这种代号为Loihi的新芯片的研制工作已经进行六年了。Loihi由数字形式的神经元和突触提供动力,它们被用来执行异步脉冲,这是一种类似于我们大脑工作方式的计算方式。目前的理论是,我们大脑内的生物神经网络会对外部刺激产生响应脉冲,并通过修改网络连接将这些脉冲存储为信息。Loihi也有自己的虚拟神经元和突触,因此能够具有类似的能力和行为。这样的模型能够以交互和连续的方式执行机器学习任务。英特尔实验室总监兼企业副总裁MichaelMayberry发表了一篇关于该新型芯片的社论,解释了这种架构的意义:“Loihi测试芯片能够提供高度灵活的片上学习功能,并能够将训练和推理集成到单个芯片上。这使得机器实现了自动化,并能够进行实时调整,而不需要等待来自云端的下一次更新。研究人员已表明,在解决MNIST数字识别问题时,为了达到一定的准确性,其他典型的脉冲神经网络以总操作来测量,与之相比,该芯片的学习速度提高了100万倍。与诸如卷积神经网络和深度学习神经

  • ASP.NET MVC5 高级编程-学习日记-第二章 控制器

    2.1控制器的角色 MVC模式中的控制器(Controller)主要负责响应用户的输入,冰球在响应时修改模型(Model)。通过这种方式,MVC模式中的控制器主要关注的是应用程序流、输入数据的处理,以及对相关视图(View)输出数据的提供。 URL首先告知路由机制去实例化哪个控制器,调用哪个操作方法,并为该方法提供需要的参数。然后控制器的方法决定使用哪个视图,并对该视图进行渲染。 URL并不用存储在Web服务器磁盘上的文件有直接对应关系,而是与控制器类的方法有关。 2.2示例应用程序:MVCMusicStore 我们将要构建的应用程序是一个简单的音乐商店。该应用程序有三个主要部分:购物,结帐和管理。 访客可以按类型浏览相册: 他们可以查看单个相册并将其添加到购物车中: 他们可以查看购物车,删除他们不再需要的任何商品: 继续结帐将提示他们登录或注册用户帐户。   创建帐户后,他们可以通过填写运费和付款信息来完成订单。为了简单起见,我们正在进行一项惊人的促销活动:如果他们输入促销代码“免费”,一切都是免费的! 订购后,他们会看到一个简单的确认屏幕:   除了

  • 重定向与转发对从servlet跳转的影响

    重定向与转发对从servlet跳转的影响 在jsp中有两种方式跳转到servelt来处理相关信息,注意转发和重定向的区别。 如果是重定向,相当于浏览器请求的,url会改变如果是转发的方式,那么就要注意了。由于转发是服务器内部进行的,url根本就没有发生变化,所以位置还是本页面的位置,当需要从servlet跳转时,跳转的相对路径不能是相对于servlet的路径,而是相对于本页面的路径. 如果是重定向的方式跳转到sevrlet中的,那么当前页面的位置就是这个servlet,当从servlet跳转的时候,跳转路径就应该是相对于servlet的路径 梦里不知身是客,一晌贪欢。

  • git无密码push

    近来项目中调研,jupyterlab和git的整合内容,gitserver我使用的gitbucket和bitbucket.(项目要求使用bitbucket,看错一个字母下载了两个镜像) gitbucket是免费的,bitbucket需要收费,使用容器的话也需要先用gogole邮箱注册一个账号,生成试用的license,可以用一个月。 我使用jupyterlab-git插件来访问gitserver,但是此插件没有提供用户安全验证,所以我clone下来之后,无法push,pull. 经查找资料,找到如下方法,记录一下: 1.gitclonexxx.git gitconfig--globaluser.name"xxxx"gitconfig--globaluser.email"xxx@126.com"2.进入项目目录,生成文件.git-credentials touch.git-credentials cat.git-credentialshttps://zdwhl:AAss12345@172.18.0.1:7990 最后执行下面的命令gitconfig--globalcredential.h

相关推荐

推荐阅读