springboot项目下的resources下的template的资源访问默认是要走servlet跳转,这里我们将静态资源放到webapp下,以便直接访问。

目录结构:(目标是运行后能直接访问webapp目录下资源)

这样设置好后,ide单独打开此工程运行完全正常,但是项目是多模块的,在idea中作为子模块运行会出现webapp目录资源404问题。

一:问题分析

1.查看springboot启动tomcat源码的类

切换到类org.springframework.boot.context.embedded.AbstractEmbeddedServletContainerFactory,找到获取资源方法。

查看getCommonDocumentRoot方法的逻辑发现是使用绝对路径。

2:问题分析

windows版本下的jdk8获取绝对路径使用了user.dir这个系统变量。debug一下System.getProperty("user.dir") 发现变量是输出了根工程的路径,这就解释了为啥单独打开模块能正常运行,作为子模块运行出现404了。

二:问题修复:

1:直接在idea中设置模块工作目录

2:使用外部tomcat运行

2.1、修改Spring Boot启动类

启动类继承 SpringBootServletInitializer类,并覆盖 configure方法。

@SpringBootApplication
public class DemoApplication extends SpringBootServletInitializer {
@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {return builder.sources(DemoApplication.class);}public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);Logger.getGlobal().info("application start");}
}

2.2、修改jar为war包形式:

  1. 2.3、去除Spring Boot内置Tomcat(修改自带tomcat依赖范围为provided,防止与外部tomcat发生冲突)

  2. <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope>
    </dependency>
  3. 2.4、添加war包打包插件:

    如果你用的是继承spring-boot-starter-parent的形式使用Spring Boot,那可以跳过,因为它已经帮你配置好了。如果你使用的依赖spring-boot-dependencies形式,你需要添加以下插件:

  4. <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><configuration><failOnMissingWebXml>false</failOnMissingWebXml></configuration>
    </plugin>
  5. 接着配置本地tomcat运行:

运行效果:

idea webapp目录404问题,war包方式运行相关推荐

  1. tomcat会自动解压webapps目录下的war包

    如图,把war包放到tomcat的webapps目录,会被自动解压 转载于:https://www.cnblogs.com/shengulong/p/8334083.html

  2. war包方式部署solo博客

    *solo,一款小而美的博客系统,GitHub:https://github.com/b3log/solo* 环境和文件准备 服务器:用的阿里云服务器,系统是 CentOS 7.3 64 位. JDK ...

  3. 悟空crm环境部署-Java的war包方式

    适用场景 本文档适用于所有war包与Tomcat环境部署 1. 文件准备 新建一个属于自己的文件夹,并将apache-tomcat-8.5.39.tar和ROOT.war复制到这个文件夹里 说明 (1 ...

  4. idea怎么打开war包并运行

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1.解压war包 2.用idea打开 3.配置jdk 4.添加框架支持和配置tomcat 前言 打开已有的war包案例进行学 ...

  5. java war包怎么运行_springboot web项目打jar或者war包并运行的实现

    (一)springboot web项目打jar包 1.打包 两种打包方式 maven命令打包 切换目录到工程根下,pom.xml所在位置,运行maven的打包命令 mvn clean package ...

  6. Spring Boot 以 jar 包方式运行在后台

    spring-boot jar 包方式启动: 首先,为了防止和常用的 Tomcat 8080 端口冲突,将 Spring-boot 项目的端口号设置为 9090. 具体方法:在 application ...

  7. idea打包springboot项目为war包并运行

    等在打包完成,完成之后 命令行运行 java -jar war包路径名称 如设置域名访问 配置nginx反向代理 nginx文章有配置教程

  8. Spring Boot以jar包方式运行在后台(linux)

    为什么80%的码农都做不了架构师?>>>    nohup java -jar spring-boot-1.0-SNAPSHOT.jar > log.file 2>&am ...

  9. idea ssm打war包_IDEA下从零开始搭建SpringBoot工程

    SpringBoot的具体介绍可以参看其他网上介绍,这里就不多说了,就这几天的学习,个人理解,简而言之: 如果想学习Java工程化.高性能及分布式.深入浅出.微服务.Spring,MyBatis,Ne ...

最新文章

  1. 抢人饭碗了!推荐一款全自动的机器学习建模神器PyCaret
  2. SQLiteOpenHelper简介
  3. Linux上(Redhat7)实现NFS文件共享服务
  4. 单片机人流统计装置的程序_单片机其实不难
  5. 信号量进程同步与互斥
  6. 基于MaxCompute的数仓数据质量管理
  7. Linux 下查看线程信息
  8. centos7 mysql 5.5.27_centos7上安装mysql-5.7.27
  9. 【Flink】Flink 报错 Hash join exceeded Too many duplicate keys
  10. hql 查询关联对象_在spring data jpa中如何做报表统计查询?
  11. 成功是需要付出代价的: 32个成功观念分享
  12. 为了对电脑进行保护,已经阻止此应用。
  13. 微信世界争霸服务器,微信世界争霸小程序进不去游戏怎么办
  14. Seventh season twenty-first episode,Monica and Chandler both did not know how to write their vows???
  15. 工作经验分享-vivo链路监控
  16. Access 2007技巧 “伊妹儿”数据采集
  17. EXCEL双击文件打开是空白的
  18. java 线程的插队运行_Java线程插队
  19. Shopee上新,真的很重要吗?
  20. 各linux桌面性能比较,七大顶级桌面比较!Linux平台自由选择

热门文章

  1. 利用SQL中的递归返回多行数据的连接
  2. mysql的几种插入语句_Mysql 几种常见的插入 Insert into,Replace Into,Insert ignore
  3. gsonformat安装怎么使用_IDEA中使用GsonFormat
  4. idea2020shezhi代码检查级别_优秀的模糊测试代码是如何炼成的?
  5. mysql page校验_MySQL InnoDB离线校验工具innochecksum使用
  6. html图片postmultipart,sendmail-MIMEText-MIMEImage-MIMEMultipart.py——发送带图片的HTML格式报表...
  7. iview table 自定义列_案例 | iview中Table:拖拽适配列、自定义固定列、合并行
  8. dns设置服务器版本信息,DNS设置方法
  9. matlab电力系统潮流计算,大神们,求个电力系统潮流计算的matlab程序。
  10. 【小白学习C++ 教程】十、C++中指针和内存分配