(原)

以下例子springboot后端地址为:localhost:7080/pingandai

vue前端地址为:locahost:8080/pingandai/

1、如果路由模式设置的是history。

那么最好带上base,(base是根目录的地址,比如你在页面上访问localhost:8080/b,那么它会自动跳转到localhost:8080/pingandai/b路径上)

打包完成后(打包过程这里不再描述,npm run build,网上很多例子),如果将dist下的文件都拷贝到springboot中resources/static目录下(比如后台的地址为localhost:7080/pingandai),此时你在URL上输入localhsot:7080/pingandai/b,你是找不到页面的,原因是它在controller中找地址,发现没有,直接就跳到错误页面了,由于前端打包后只有一个index.html页面,所以我们把请求错误重定向到index.html就可以了。
路由官网的描述在这里:
https://router.vuejs.org/zh/guide/essentials/history-mode.html#后端配置例子

我们在spring中怎么配呢?
在springboot2.0以下和springboot2.0以上的配置不一样,有些公司用的springboot2.0+的版本,但是网上给的全是

这种代码,springboot2.0以上的版本已经把EmbeddedServletContainerCustomizer给移除了,所以根本找不到,先看下官网在二个版本中不同的写法。
https://docs.spring.io/spring-boot/docs/1.5.21.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-programmatic-embedded-container-customization
https://docs.spring.io/spring-boot/docs/2.0.9.RELEASE/reference/htmlsingle/#boot-features-programmatic-embedded-container-customization
1.5.21版本代码如下:

2.0.9版本代码如下:

这里的nofount.html就是index.html页面:

这样,通过http://localhost:7080/pingandai/b就可以正常访问到页面了。
注意:如果前端的路由设置的是二级或以上的话,页面是访问不了的,就像这样:

前端访问地址为:http://localhost:7080/pingandai/a/b,控制台会报错:

原因是vue是一个单页面应用,打包后的文件index.html引用js和css的路径为其目录下的相对路径:

但是放在浏览器上,它会从url上找当前路径,就变成了去pingandai/a/static/…目录下找资源,这肯定是找不到的。js及css资源路径应该在pingandai/static/… 下。所以路由在history模式下打包后若要发布在springboot项目中,需要注意路径的地址不要出现多级。

2、 如果路由模式设置的是默认的hash

如果路由是hash模式打包放到springboot的resources/static目录下,以上history模式不能访问二级url地址的问题就不存在了。
但是它的访问路径将会变成:locahost:7080/pingandai/#/a或者locahost:7080/pingandai/#/a/b才行,由于hash模式中#后面字符是页面定位的,所以不会发送给后端(比如url上输入的是locahost:7080/pingandai/#/a/b,后端实际收到的请求地址是locahost:7080/pingandai),这里的locahost:7080/pingandai实际上是访问的index.html页面(因为找不到这个页面会跳到错误页面index.html上,前提是配置了错误页面),在这个页面上显示的内容则完全由#后面的内容控制。
但是这样会存在一个问题,如果springboot集成了shiro,那么权限过滤时必然要设置成这样filterMap.put("/**", "过滤器");过滤器如果是/anon,这会导至页面所有请求都放行,刚才的locahost:7080/pingandai/#/a和locahost:7080/pingandai/#/a/b是可以访问了,但是权限过滤不生效。如果设置成/oath(假定这里的oath是权限拦截的过滤器),那么/a和/a/b页面又出不来。
 
由于以上问题,所以最好不要直接打包后放到spingboot下,用单独的tomcat或nignx去部署。


												

vue打包发布在spingboot项目中 vue-router路由的处理的更多相关文章

  1. 在使用vue+webpack模版创建的项目中使用font-awesome

    前言:最近使用vue+webpack进行一个小项目的开发,按照官方模版文档完成项目初始化后打算引入ont-awesome字体图标库进行使用,引入过程中遇到一些问题并解决,现记录如下. 一开始进展很顺利 ...

  2. 全面解析JavaScript的Backbone.js框架中的Router路由

    这篇文章主要介绍了Backbone.js框架中的Router路由功能,Router在Backbone中相当于一个MVC框架中的Controller控制器功能,需要的朋友可以参考下. Backbone ...

  3. 《论vue在前后端分离项目中的实践之年终总结》

    我是2014年的时候开始了解知道的vue,当时vue还不太成熟,想用但是又怕自己hold不住,况且那时候vue还没有成熟的(路由.验证.ui组件)插件,社区也是不温不火的,再说也没有合适的机遇让我去项 ...

  4. VUE打包发布后无法访问js、css资源

    在vue开发中,本地测试以及测试环境中都没有遇到问题,当发布生产,有虚拟路径时,便出现js.css均报错404: 首先在config的index.js文件中,将assetsPublicPath修改为' ...

  5. 后端 SpringBoot + 前端 vue 打包发布到Tomcat

    近段时间 做了一些前后端的开发 需要在Tomcat里进行发布    把自己整理的分享出来 后端打包 pom.xml 文件 <packaging>war</packaging> ...

  6. vue 项目中当访问路由不存在的时候默认访问404页面

    前言: 在Vue项目中,当访问的页面路由不存在或错误时,页面显示为一片空白.然而,通常我们需要对访问url不存在或者错误的情况下添加默认的404页面,即not found页面. 一般的处理方法是: 在 ...

  7. mockjs 在项目中vue项目中使用

    一.为什么要使用mockjs 总结起来就是在后端接口没有开发完成之前,前端可以用已有的接口文档,在真实的请求上拦截ajax,并根据mockjs的mock数据的规则,模拟真实接口返回的数据,并将随机的模 ...

  8. 「实践篇」解决微前端 single-spa 项目中 Vue 和 React 路由跳转问题

    前言 本文介绍的是在做微前端 single-spa 项目过程中,遇到的 Vue 子应用和 React 子应用互相跳转路由时遇到的问题. 项目情况:single-spa 项目,基座用的是 React,目 ...

  9. vue学习面向对象,在项目中怎么用呢?

    面向对象感觉很牛逼,可是在项目中怎么用呢? 我至今见到的用法,写了一个用户对象. 效果:只要执行了new User(userInfo)就会在cookie,localStorage存放数据. 所以最简单 ...

随机推荐

  1. 第六周LINUX学习笔记

    DNS服务 DNS:Domain Name Service //协议     实现:BIND(Berkeley Internet Name Domain)     监听端口:        UDP:5 ...

  2. Install Windows 2016 on VirtualBox

    Download ISO file for Windows 2016 (180 days free).  https://www.microsoft.com/en-us/evalcenter/eval ...

  3. 常见dos命令行

    查找本地端口占用情况 是否8080端口被占用netstat -aon|findstr "8080" 在1.txt文档当中查找java字符串type 1.txt|findstr 'j ...

  4. IIS虚拟目录挂载文件服务器目录

    要求说明: 通过网站上传文件保存到统一的文件服务器上. 服务器说明: 1.文件服务器以下称为FilesServer,IP地址为:192.168.1.213 2.Web服务器为以下称为WebServer ...

  5. 最短路问题之Dijkstra算法

    题目: 在上一篇博客的基础上,这是另一种方法求最短路径的问题. Dijkstra(迪杰斯特拉)算法:找到最短距离已经确定的点,从它出发更新相邻顶点的最短距离.此后不再关心前面已经确定的“最短距离已经确 ...

  6. Python基础(random模块)

    random 常用的方法: #Author : Kelvin #Date : 2019/1/6 15:33 import random print(random.random()) #产生0-1之间的 ...

  7. Springboot整合Elastic-Job(二)

    上文我们讲到Springboot整合Elastic-Job整合的demo,只是简单的实现了主要功能.本文在上文基础上,进行新的调整. 事件追踪 Elastic-Job提供了事件追踪功能,可通过事件订阅 ...

  8. 如何让vue自定义组件可以包裹内容,并且渲染出来,以及组件的组合使用

    当我们用vue一开始写项目时,按需求文档自定义了一个公用组件,这个组件很多地方都用到了,然后随着项目的推进,又有了新的需求要在里面加东西,但又不是所有的地方都要加 这时候我们想这样往里面塞内容↓    ...

  9. Asp.Net Core 轻松学-在.Net Core 中使用钩子

    前言     Host startup hook,是2.2中提供的一项新的功能,通过使用主机启动钩子,允许开发人员在不修改代码的情况下,在服务启动之前注入代码:通过使用钩子,可以对已部署好的服务在服务 ...

  10. 版本控制工具——Git常用操作(下)

    本文由云+社区发表 作者:工程师小熊 摘要:上一集我们一起入门学习了git的基本概念和git常用的操作,包括提交和同步代码.使用分支.出现代码冲突的解决办法.紧急保存现场和恢复现场的操作.学会以后已经 ...