Springboot解决JSP找不到的问题, 解决 Maven 多模块 JSP 无法读取的问题

最近在做项目的时候发想一个jsp 找不到的问题,很头痛, 先还原一下问题

先上一张图吧 :

    

然后呢我的控制器是这样的

当然我这个是还原错误,所以就简单的写了一个Demo

这个呢是我的Config  所以我很确定的以为它肯定能显示出来 但是事与愿违 它永远都是404  然后我问了一下同事,他告诉了我一个方法 :

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

打包 mvn -Dmaven.test.skip -U clean package 

在maven项目中加入 打包的插件 在用如上命令打包一下,在控制台用jar 命令去启动war 包就可以成功的访问到 

然后果然成功了,但是本人我思前想后 不知道为什么 

所谓知其然得知起所以然, 于是我就开始掰扯源码 : 问题的关键在于它的实现的原理

 首先我们确定的是 由于用了jsp  它到页面渲染的时候肯定是用到 

这个类是用来处理JSP模板的  转发到 JSPServlet这个类

  InternalResourceViewResolver -> forward -> JspServlet

JspServlet 这个类 ,然后呢从这个类我又找到了

这个类,那么就来debug一下来看看到底发生了什么?

private File getCommonDocumentRoot() {
   for (String commonDocRoot : COMMON_DOC_ROOTS) {
      File root = new File(commonDocRoot);
      if (root.exists() && root.isDirectory()) {
         return root.getAbsoluteFile();
      }
   }
   return null;
}

ok我们发现这儿有个循环 那么我就看它里面是什么东西 

这个Newfile 的时候肯定不用是他是去找文件,去了 

那么这里就拿工具获取一下他的数据 

这个参数呢是获取到他的工作的目录 

好的那么看看这个时候这个new File 的绝对目录:

好的我们看到这边这个newFile的时候呢 找到的是这个目录,所以问题就显而易见了,由于我们这个工程是父字工程,所以它在找目录的时候呢,一直用的父 pom 的名字,所以肯定是404啦!!

因此包404是很正常的了我们需要的目录是 它的子工程,

所以我们怎么去修复呢?

问题是我们的Springboot 后台设置嵌入式tomcat的时候它会给到一个临时的路径 

所哟找到了这个类:

WebServerFactoryCustomizer这个类呢就是tomcat的自定义器,我们在这儿定义好之后,就不会找不到啦
@Bean
public WebServerFactoryCustomizer<TomcatServletWebServerFactory> customizer() {
    return (factory) -> {
        factory.addContextCustomizers((context) -> {
                   //当然这里要写你自己的
                    String relativePath = "springboot-view/src/main/webapp";
                    // 相对于 user.dir = D:\javawork\dive-in-spring-boot
                    File docBaseFile = new File(relativePath);
                    // 路径是否存在
                    if (docBaseFile.exists()) {
                       
                        context.setDocBase(docBaseFile.getAbsolutePath());
                    }
                }
        );
    };
}

加上这个配置 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值