[英]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 资源,例如图像。 我可以验证,那
在日志中,我可以找到文件结构和资源路径之间的以下不匹配:
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
所以我很清楚,应用程序现在在不同的文件夹中搜索媒体。
有人可以提示我,
[第一次更新 - 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.