繁体   English   中英

已解决:Static 资源 Springboot (2.6.3) 和 Vaadin (23.2.5) 未在生产中提供

[英]Solved : Static Resources Springboot (2.6.3) and Vaadin (23.2.5) not served in production

我已经更新了我的 springboot 项目库:

Vaadin:23.0.10 -> 23.2.5(我认为这是问题所在)

从那时起,该应用程序不再提供 static 资源,例如图像。 我可以验证,那

  • 项目结构没有改变(/src/main/resources/META-INF/resources 下的静态文件,如 [Vaadin 文档][1] 中所述)
  • 生成的 jar 文件结构没有改变(静态文件仍在 /META-INF/resources 下)

在日志中,我可以找到文件结构和资源路径之间的以下不匹配:

TRACE o.s.web.servlet.DispatcherServlet.traceDebug - GET "/images/countries/de.png", parameters={}, headers={masked} in DispatcherServlet 'dispatcherServlet'
TRACE o.s.w.s.h.SimpleUrlHandlerMapping.getHandler - Mapped to HandlerExecutionChain with [org.springframework.web.servlet.mvc.ServletForwardingController@9cd25ff] and 1 interceptors
TRACE o.s.w.s.m.ServletForwardingController.prepareResponse - Applying default cacheSeconds=-1
DEBUG o.a.catalina.core.StandardWrapper.log -   Returning non-STM instance
DEBUG o.a.c.loader.WebappClassLoaderBase.log - getResource(META-INF/VAADIN/webapp/images/countries/de.png)
DEBUG o.a.c.loader.WebappClassLoaderBase.log -   --> Resource not found, returning null

所以我很清楚,应用程序现在在不同的文件夹中搜索媒体。

有人可以提示我,

  1. 资源必须放在 jar 文件中的什么地方? 我应该修改 maven 步骤吗?
  2. 我如何为这个资源加载机制实现和注册委托者/拦截器? (只是出于调试/记录的原因——因为这不是第一次出现这个问题)

[第一次更新 - 18.11.2022]

短暂休息后,我花更多时间在这上面。 我延续了 Simon Martinelli 的方法。 我使用了 start.vaadin.com 中的演示应用程序并在 ProductionMode 中启动它。 我将我项目中的图像“empty-plant.png”复制到我的其他 static 资源所在的同一文件夹中。

以下是日志和差异。

Vaadin-Demo-App:
app.jar\META-INF\resources\images\empty-plant.png
10:52:03.952 [http-nio-8080-exec-5] TRACE o.s.web.servlet.DispatcherServlet.traceDebug:116 - GET "/images/empty-plant.png", parameters={}, headers={masked} in DispatcherServlet 'dispatcherServlet'
10:52:03.953 [http-nio-8080-exec-5] TRACE o.s.w.s.h.SimpleUrlHandlerMapping.getHandler:519 - Mapped to HandlerExecutionChain with [org.springframework.web.servlet.mvc.ServletForwardingController@58d6b7b9] and 1 interceptors
10:52:03.953 [http-nio-8080-exec-5] TRACE o.s.w.s.m.ServletForwardingController.prepareResponse:405 - Applying default cacheSeconds=-1
10:52:03.953 [http-nio-8080-exec-5] DEBUG o.a.c.loader.WebappClassLoaderBase.log:173 - getResource(META-INF/VAADIN/webapp/images/empty-plant.png)
10:52:03.953 [http-nio-8080-exec-5] DEBUG o.a.c.loader.WebappClassLoaderBase.log:173 -   Delegating to parent classloader org.springframework.boot.loader.LaunchedURLClassLoader@7e32c033
10:52:03.954 [http-nio-8080-exec-5] DEBUG o.a.c.loader.WebappClassLoaderBase.log:173 -   --> Resource not found, returning null
10:52:03.978 [http-nio-8080-exec-5] DEBUG o.a.c.loader.WebappClassLoaderBase.log:173 - getResource(META-INF/resources/images/empty-plant.png)
10:52:03.978 [http-nio-8080-exec-5] DEBUG o.a.c.loader.WebappClassLoaderBase.log:173 -   Delegating to parent classloader org.springframework.boot.loader.LaunchedURLClassLoader@7e32c033
10:52:03.978 [http-nio-8080-exec-5] DEBUG o.a.c.loader.WebappClassLoaderBase.log:173 -   --> Returning 'jar:file:/C:/Users/#############/Desktop/my-app/my-app/target/app.jar!/META-INF/resources/images/empty-plant.png'
10:52:03.982 [http-nio-8080-exec-5] TRACE o.s.w.s.m.ServletForwardingController.handleRequestInternal:143 - Forwarded to servlet [springServlet] in ServletForwardingController 'vaadinForwardingController'
10:52:03.982 [http-nio-8080-exec-5] TRACE o.s.web.servlet.DispatcherServlet.processDispatchResult:1156 - No view rendering, null ModelAndView returned.
10:52:03.982 [http-nio-8080-exec-5] DEBUG o.s.web.servlet.DispatcherServlet.logResult:1131 - Completed 304 NOT_MODIFIED, headers={masked}



My App 
app.jar\META-INF\resources\images\empty-plant.png
10:57:04.617 [http-nio-127.0.0.1-32152-exec-9] TRACE o.s.web.servlet.DispatcherServlet.traceDebug:116 - GET "/images/empty-plant.png", parameters={}, headers={masked} in DispatcherServlet 'dispatcherServlet'
10:57:04.617 [http-nio-127.0.0.1-32152-exec-9] TRACE o.s.w.s.h.SimpleUrlHandlerMapping.getHandler:519 - Mapped to HandlerExecutionChain with [org.springframework.web.servlet.mvc.ServletForwardingController@790174f2] and 1 interceptors
10:57:04.620 [http-nio-127.0.0.1-32152-exec-9] TRACE o.s.w.s.m.ServletForwardingController.prepareResponse:405 - Applying default cacheSeconds=-1
10:57:04.621 [http-nio-127.0.0.1-32152-exec-9] DEBUG o.a.c.loader.WebappClassLoaderBase.log:173 - getResource(META-INF/VAADIN/webapp/images/empty-plant.png)
10:57:04.621 [http-nio-127.0.0.1-32152-exec-9] DEBUG o.a.c.loader.WebappClassLoaderBase.log:173 -   Delegating to parent classloader org.springframework.boot.loader.LaunchedURLClassLoader@7eda2dbb
10:57:04.622 [http-nio-127.0.0.1-32152-exec-9] DEBUG o.a.c.loader.WebappClassLoaderBase.log:173 -   --> Resource not found, returning null
10:57:04.676 [http-nio-127.0.0.1-32152-exec-9] TRACE o.s.w.s.m.ServletForwardingController.handleRequestInternal:143 - Forwarded to servlet [springServlet] in ServletForwardingController 'vaadinForwardingController'
10:57:04.676 [http-nio-127.0.0.1-32152-exec-9] TRACE o.s.web.servlet.DispatcherServlet.processDispatchResult:1156 - No view rendering, null ModelAndView returned.
10:57:04.676 [http-nio-127.0.0.1-32152-exec-9] DEBUG o.s.web.servlet.DispatcherServlet.logResult:1131 - Completed 200 OK, headers={masked}

我认为 ServletForwardingController 有问题,不是吗?

[第二次更新 - 18.11.2022]

删除 @EnableWebMvc 注解即可解决。

[1]: https://vaadin.com/docs/latest/advanced/loading-resouWie rces #resource-cheat-sheet

在 2022 年 11 月 18 日之后,我在谷歌上搜索了一下,发现了这个问题 它提示我 Spring MVC。 我记得,我用它做了一些测试。

因此,在 spring 引导配置类之一中有一个活动的 @EnableWebMvc 注释。 当然,这破坏了预期的行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM