我正在使用标准的 Spring Boot 方法(一个 Java 项目),其中我们使用嵌入式 Tomcat 和包作为可执行 jar。
我放置了一些静态资源,例如index.html在src/main/resources我的项目下的静态文件夹中。我们使用的库期望通过 servlet 上下文加载一些资源servletContext.getRealPath("XXXX")。
当我在 Eclipse 中运行这个项目时,真正的路径servletContext.getRealPath("/")解析为C:\Users\<me>\workspace\springboot-project\src\main\webapp\. 我不知道为什么它在项目中不存在时使用这个文件夹?如果我创建可执行 jar 并运行它,则servletContext.getRealPath("/")给出C:\Users\<me>\AppData\Local\Temp\tomcat-docbase.5693809153072003983.8080\. 这个目录确实存在,但里面什么都没有。
如果通过 HTTP 请求,我显然可以很好地看到我的资源,但我无法通过 servlet 上下文按预期获得它们。
有任何想法吗?
src/main/resources/staticTomcat 不直接提供中的资源。它们由 Spring 通过其 DispatcherServlet 提供服务,并由ResourceHttpRequestHandlerSpring Boot 自动配置。默认情况下,此资源处理程序配置为从以下位置提供资源:
classpath:/META-INF/resources/classpath:/resources/classpath:/static/classpath:/public/3 可以让你的资源变得src/main/resources/static可用。
使用getRealPath()总是会出现问题,因为它要求资源作为文件系统上的文件可用,即它不能位于您正在运行的 war 或 jar 内,并且不能保证会出现这种情况。使用ClassLoader.getResource()orServletContext.getResource()是在 Web 应用程序中查找和加载资源的更可靠的方法,因为它不依赖于直接位于文件系统上的资源。
您还没有说哪个库正在使用getRealPath(). 也许可以更新或配置它以使用不同的资源加载策略?
| 归档时间: |
|
| 查看次数: |
2947 次 |
| 最近记录: |