当SpringBoot项目的War包在外置Tomcat上运行时,无法加载静态资源或者显示404,到底该怎么解决? 您所在的位置:网站首页 瓷砖怎么堆放好看 当SpringBoot项目的War包在外置Tomcat上运行时,无法加载静态资源或者显示404,到底该怎么解决?

当SpringBoot项目的War包在外置Tomcat上运行时,无法加载静态资源或者显示404,到底该怎么解决?

#当SpringBoot项目的War包在外置Tomcat上运行时,无法加载静态资源或者显示404,到底该怎么解决?| 来源: 网络整理| 查看: 265

当时想要试试集群,不说多的,就像将一个SpringBoot项目同时在两个不同的Tomcat中执行,但是出现了问题? 第一个问题是刚开始运行的时候,显示404,找不到资源; 第二个问题是可以显示基本资源,但是css,js,image等静态资源无法显示; 第三个问题网上很多的博客写的杂七杂八,完全是不知道在讲些什么;

为了解决上面提出的几个问题,这里做一下记录,也顺便为初学者提供一下我的思路;

文章目录 1. 使用Maven将项目打成war包2. 当Tomcat启动后,在浏览器访问却显示404找不到资源3. 在SpringBoot项目的资源路径该如何书写

1. 使用Maven将项目打成war包

下面简单的进行一下介绍,因为重点不在这里;除此之外,这里还有一点需要注意的是,我使用的是外置的Tomcat,为了使得外置的Tomcat能够生效,必须在SpringBoot程序的主入口继承类SpringBootServletInitializer,否则运行tomcat之后会报404; 最好就是直接百度如何将SpringBoot项目打包成war包;但是如果你有些基础,下面进行一下基本路径介绍;

先将pom.xml文件中的packaging标签里的内容换成war;添加如下依赖,保证外置Tomcat可行; org.springframework.boot spring-boot-starter-tomcat provided 最后就是关于Java程序,必须让SpringBoot的主入口继承SpringBootServletInitializer;这样外置Tomcat运行后,访问才能找到入口程序,否则你只能找到404界面; @SpringBootApplication public class BookManagerApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(BookManagerApplication.class); } public static void main(String[] args) { SpringApplication.run(BookManagerApplication.class, args); } } 下面就是打包的图片了,我是使用maven打包的; 上面就是关于打包的基本知识,重点不在打包,所以不过大篇幅; 2. 当Tomcat启动后,在浏览器访问却显示404找不到资源

找不到资源的原因是什么,我一开始也不是很明白,但是我知道,之前在SpringBoot项目的内置Tomcat中执行的时候,项目路径是可以自己设置的,那么现在是外置的Tomcat,项目路径还可能是之前的那个吗?当然不是,在外置的Tomcat中项目路径就是当前war包的名称;

先将War包部署在Tomcat的wabapps目录下面如下:

后面所有的介绍都围绕上面的war包进行;

将War包放入Tomcat后,执行Tomcat;执行之后在浏览器上进行访问;我这里必须要访问http://localhost:8081/BookManager-0.0.1-SNAPSHOT;端口号这个8081是我修改的,不然就会冲突,同一个电脑总不能两个Tomcat使用一个端口号; 刚开始运行时,由于我已经知道了,需要添加一个项目路径所以没有出错,但是在你进行页面跳转时,就比如:你登录界面的时候,要进行跳转;

一旦进行跳转就会导致新跳转出来的界面路径缺少项目路径,这就是它不能找到资源的原因; 那么在这种情况下就只能够去Tomcat的server.xml文件中去设置Host标签;

在上面的设置中,就是为了保证每一次的访问都自带了项目路径;想要完整的了解Host所有功能,可以百度去看别人的解释,这里直接介绍使用;除此之外样式css,或者说时BootStrap里的样式显示不出来,也是因为加载样式的时候没有项目路径,但是在server.xml中将Host标签修改一下,后面访问的所有路径都会加上项目路径;path是虚拟路径,docBase是实际路径;(基本的解释就是只要访问了8081端口,默认就是从这个这个War包中的项目开始执行,直接跳过Tomcat中的Root初始界面;) 在这里插入图片描述 输入账号密码登录之后:(可以跳转)

下面就是bootstrap的样式;打开的地址是http://localhost:8081/webjars/bootstrap/4.5.0/css/bootstrap.min.css,这是因为我在server.xml里面的设置(就是上面的Host);否则完整的应该是http://localhost:8081/BookManager-0.0.1-SNAPSHOT/webjars/bootstrap/4.5.0/css/bootstrap.min.css

所以归根结底,在Tomcat中启动War项目之所以显示404或者说静态资源,或者说样式无法显示,一般都是由于路径的错误,否则应该是可以完整显示的;上面是解决那些本身路径没有太大问题的项目,只是在tomcat中无法显示;

下面是关于在SpringBoot项目中的需要注意的一些问题;

3. 在SpringBoot项目的资源路径该如何书写

不多说,简单介绍一下静态资源的映射,因为一般都是只要路径上是对的,都可以访问到静态资源,当然前提是你没有使用拦截器屏蔽掉静态资源;

在HTML页面里面,资源路径全部从/static/开始写,然后下面代码就是进行一个映射,将/static/下的文件全部映射到实际位置为classpath:/static/的代码;

@Configuration public class BookWebConfiguration implements WebMvcConfigurer { @Bean public WebMvcConfigurer webMvcConfigurer() { return new WebMvcConfigurer() { //加载资源路径;还可以添加拦截器,视图控制器; @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/"); } }; } }

然后就是在HTML界面里面,一般都是从/static/比如一张images下的图片/static/images/login_Img/library_icon.png;路径都按着个模式写就不会有问题;

解决方法就是按照上面的步骤就可以了;基本就可以解决一些同类的问题,反正一般情况下都是路径容易出问题,所以出了问题第一个要考虑的就是路径;



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有