vue加跨域代理静态文件404_部署spring boot + Vue遇到的坑(权限、刷新404、跨域、内存)...

本文详细介绍了在部署Spring Boot后端和Vue前端应用时遇到的问题及解决方案,包括启动权限不足、刷新404错误、端口冲突引发的跨域问题以及内存不足的处理。通过修改配置文件、添加web.xml、调整jar/war包以及优化内存管理,成功解决了这些问题。
摘要由CSDN通过智能技术生成

部署spring boot + Vue遇到的坑(权限、刷新404、跨域、内存)

项目背景是采用前后端分离,前端使用vue,后端使用springboot。

工具

工欲善其事必先利其器,我们先找一个操作Linux系统的工具极力推荐FinalShell。

一眼看过去是不是感觉很方便,对内存、CPU的监控也可以实时看到,访问目录更是方便,对于Linux小白来说简直是神兵利器。

好了,我要开始入坑了。

问题一:权限不够

把vue包放到tomcat->webapps->ROOT目录下。

启动tomcat:cd到tomcat的bin目录下面,然后执行./startup.sh命令。

出现第一个问题:-bash: ./startup.sh: Permission denied ,说是权限不够。

百度之后,执行此命令:chmod u+x *.sh 再次执行就OK了

问题二:刷新404

我先测试Vue包是否正常,于是启动tomcat,可以成功访问页面,但是刷新时出现了404。

解决404,在tomcat->webapps->ROOT目录下创建WEB-INF目录,在WEB-INF目录下面建web.xml文件

文件内容:

1 <?xml version="1.0" encoding="UTF-8"?>

2

3 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee4 http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"

5 version="3.1"metadata-complete="true">

6 Router for Tomcat

7

8 404

9 /index.html

10

11

重启tomcat,再次刷新,不会再出现404。

问题三:端口占用&跨域

启动java -jar xxx.jar 和tomcat 发现有一个会起不来,因为端口被占用了,springboot打出的jar包,内置了tomcat服务器,如果和外部的服务器端口设置一样,就会出现端口冲突,如果不一样,启动是可以启动,但是却会出现跨域问题。

是解决端口冲突还是跨域问题你们怎么选呢,我就解决端口冲突吧。

后来想到一个办法,既然jar包不行,那就war包吧

1、把这里改成war包

1 war

2、排除内置tomcat容器

1

2 org.springframework.boot

3 spring-boot-starter-tomcat

4 provided

5

3、修改Application类,让它继承SpringBootServletInitializer,如下。

1 @SpringBootApplication2 public classApplication {3

4 public static voidmain(String[] args) {5 SpringApplication.run(Application.class, args);6 }7

8 }

改成:

1 @SpringBootApplication2 public class Application extendsSpringBootServletInitializer {3

4 public static voidmain(String[] args) {5 SpringApplication.run(Application.class, args);6 }7

8 @Override9 protectedSpringApplicationBuilder configure(SpringApplicationBuilder builder) {10 return builder.sources(Application.class);11 }12 }

问题四:配置docbase

打完war包,访问接口时要加项目名称,为了让前端不再改代码,就在tomcat->bin->server.xml中加上如下配置:

好,重启tomcat,发现页面访问不到了,猜测是因为改了docbase路径,才导致的,于是把Vue文件放到项目路径下面,

重启tomcat,可以访问,但是刷新页面404又出现了,就是加了web.xml文件也不行。

头疼了好半天,行吧,不折腾了,我去折腾前端去,“前端小姐姐,把你的url路径上都加上项目名称”

前端小姐姐:“好的”。

“卧槽,这么好说话”。

折腾完之后,把之前的配置再改回去。

去掉了docbase的配置,Vue文件还是放在ROOT下面。

好了,重启tomcat,访问项目,完美解决,心里高兴了好一会儿,卧槽,牛逼呀,给自己点个赞。

问题五:内存不够

我怕是高兴的太早了。

因为项目的更新,我做的反复操作就是,./shutdown.sh和./srartup.sh。反复的关闭tomcat和打开tomcat。

用着用着发现启动不了了,启动的时候,报了一个内存不够的错误(当时没截图,现在不想折腾去重现这个问题了,这里就简单描述一下)。

一看FinalShell,卧槽,内存占用完了(现在的图是后来截的,所有显示的是内存还够)。

当时已经用到了15.4G,卧槽,瞬间崩溃,头都大了没找到原因。最后看一下哪些进程占用了内存吧,

查看所有进程

1 ps -ef

查看tomcat进程

1 ps -ef | grep tomcat

发现有好三个tomcat进程,而且都是同一个tomcat,因为服务器部署了几个tomcat,看路径可以看出是同一个。但是不对呀,我每次都是先关闭tomcat,再打开,不可能会出现这么多进程呀。

猜想不会是./shutdown.sh只会关闭tomcat不会杀死进程吧,卧槽,上网一搜有的说可以直接杀死进程,有的说不行,不管怎样都要解决呀。

问了度娘,度娘给我两种方案,

一种是直接杀死进程,kill -s 9 PID ,杀死PID的进程,法相确实是,杀死了两个,发现内存瞬间降下来了 。

但是我每次关闭tomcat之后,再杀进程,那也太麻烦了。

于是用了第二种方案。

第一步 :vim修改tomcat下bin/catalina.sh文件,添加点东西,主要是记录tomcat的pid,如下:

1 #设置记录CATALINA_PID。2

3 #该设置会在启动时候bin下新建一个CATALINA_PID文件4

5 #关闭时候从CATALINA_PID文件找到pid,kill。。。同时删除CATALINA_PID文件6

7 if [ -z "$CATALINA_PID"]; then8

9 CATALINA_PID=$PRGDIR/CATALINA_PID10

11 fi

第二步 vim tomcat的shutdown.sh文件,在最后一行加上-force:

问题六:tomcat启动

好,启动tomcat,访问正常,解决完毕,收工,关闭FinalShell,第一次再Linux上部署项目出现的问题都一步一步解决了,但是怎么感觉事情没那么简单。

果然,关闭FinalShell之后,项目访问不了了。卧槽,无情 ,是不是要这样折腾我。上网搜了之后发现:

1、启动tomcat服务

方式一:直接启动 ./startup.sh

方式二:作为服务启动 nohup ./startup.sh &

方式三:控制台动态输出方式启动 ./catalina.sh run 动态地显示tomcat后台的控制台输出信息,Ctrl+C后退出并关闭服务

2、解释

通过方式一、方式三启动的tomcat有个弊端,当客户端连接断开的时候,tomcat服务也会立即停止,

通过方式二可以作为linux服务一直运行 通过方式一、方式二方式启动的tomcat,其日志会写到相应的日志文件中,而不能动态地查看tomcat控制台的输出信息与错误情况,

通过方式三可以以控制台模式启动tomcat服务,

直接看到程序运行时后台的控制台输出信息,不必每次都要很麻烦的打开catalina.out日志文件进行查看,这样便于跟踪查阅后台输出信息。tomcat控制台信息包括log4j和System.out.println()等输出的信息。

最后nohup ./startup.sh &这样启动,完美解决。小夜的第一次Linux部署项目之旅就此结束了,一路上也是坎坎坷坷,一步一个坑,但是也都一个一个解决了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值