springboot project打包成jar之后上传到服务器无法运行

一个web application的前端是vue, 后端是java
这个程序是一个画图的程序,后端的数据为前端提供dataset

我在自己电脑的localhost上用idea和webstorm运行得很好,之后把项目上传至windows server, 前端通过命令行“npm run serve",后端仍然用idea运行,也在服务器上运行得很好。

第一个问题是:当我用连接vpn的自己 的电脑去启动这个网页程序时,最开始可以正常运行,前端后端都能看到,可是过了一会儿再刷新,就只有前端不见后端了。

第二个问题是:当我把后端在自己电脑上打包成jar,上传至服务器之后,通过命令行运行 java -jar name.jar, 然后网页输入”服务器ip: 端口号" 之后,前端可以运行,但是后端的数据却看不到了。
通过谷歌的developer tools看到怎么办Uncaught (in promise) Error: Request failed with status code 500报错,请问各位这种情况应该怎么办

我对于开发属于一窍不通,前面的东西也是一点点摸索着,以及请教别人弄出来的,上传到服务器之后完全不知道怎么做

img

IndexController这个类第28行,报错了,空指针异常了

加个非空判断吧

空指针异常,加一个非空判断:

//非空判断
if(Object.requireNonNull(files) !=null){
//你的代码
for (int i = 0; i < Objects.requireNonNull(files).length; i++) {...}
}

requireNonNull() 这个方法,进行了一个简单的判断, 如果所要判断的元素为 null, 则返回空指针异常 NullPointerException, 否则直接返回对应的对象。
所以你要先确定.files 是否为空。加个判断。

if(files!=null && files.size>0){

   for (int i = 0; i < Objects.requireNonNull(files).length; i++) {...}

}else{
  System.out.println("files is null");
}


应该是文件路径问题,打成jar包获取文件,可以使用xxx.class.getClassLoader().getResourceAsStream()

是不是哪个扑街写了本机的绝对路径

文件路径.本地Windows和Linux的路径读取是不一样的.

ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource[] resources = resolver.getResources("fileName");
if (resources.length > 0) {
InputStream inputStream = resources[0].getInputStream();
}
试试这个方法

你应该是个初学者吧,初学者有个比较弱的地方就是不太会定位问题,就比如这个空指针的问题,他是后端业务逻辑漏洞而导致的问题,而你却一直在考虑环境问题(其实最终是数据问题),这种能力是需要通过大量的bug调试积累经验才会有的,所以,我想建议你几点:

  1. 不要怕bug,所有的bug都是有解决方案的,要去面对它,克服它,而不是逃避它
  2. 不要怀疑自己,bug是所有程序员的必经之路,也是不可避免的,只要是开发,就存在bug
  3. 解决bug必须要有思考,通过报错信息和自己的主观判断,有能力的可以查看源码分析,而不是一味的求助

ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
// resourcePath以/开头
Resource[] resources = resolver.getResources(""classpath*:" + resourcePath");
if (resources.length > 0) {
InputStream inputStream = resources[0].getInputStream();
}

注意只能读取的是流