当前位置: 首页 > 知识库问答 >
问题:

嵌入式Tomcat、可执行jar、ServletContext.getRealPath()

龙俊英
2023-03-14

我在项目的src/main/resources下的静态文件夹中放置了一些静态资源,例如index.html。我们使用的库希望通过执行servletContext.getRealPath(“xxxx”)使用servlet上下文加载一些资源。

当我在Eclipse中运行这个项目时,ServletContext.getRealPath(“/”)的真实路径解析为C:\users\ \workspace\springboot-project\src\main\webapp\ 。我不知道为什么它使用这个文件夹,而它不存在于项目中?如果我创建了可执行jar并运行它,那么ServletContext.getRealPath(“/”)给出C:\users\ \appdata\local\temp\tomcat-docbase.5693809153072003983.8080\ 。这个目录确实存在,但里面什么也没有。

很明显,如果通过HTTP请求,我可以很好地看到我的资源,但通过servlet上下文,我不能像预期的那样获得它们。

有什么想法吗?

共有1个答案

云和同
2023-03-14

src/main/Resources/static中的资源不直接由Tomcat提供。它们由Spring通过其DispatcherServlet和一个由Spring Boot自动配置ResourceHttpRequesThandler提供。默认情况下,此资源处理程序配置为服务来自以下位置的资源:

  1. 类路径:/meta-inf/resources/
  2. 类路径:/resources/
  3. 类路径:/static/
  4. 类路径:/public/

3使src/main/resources/static中的资源可用。

 类似资料:
  • 我有时会在pom中看到以下声明。xml。。。 如您所见,sping-boo-starter-web被声明为tomcat-embed-jasper。 是不是sping-boo-starter-web已经有一个嵌入式tomcat了?为什么一些开发人员仍然声明tomcat-embed-jasper以及boot-starter-web?还是有什么原因?

  • 是否可以在Spring Boot可执行jar中启动与声明的mainClass不同的Java类(使用main方法)? 特性:应该启动的类位于嵌入可执行jar(在lib文件夹中)的库中。 背景资料: 可执行jar包含一个库,其中包含一个类,我想调用该类以正常关闭应用程序。该库嵌入在可执行文件jars lib文件夹中,默认Java类路径参数无法访问该库。

  • 我想得到一个关于如何在Java应用程序中沙箱执行Nashorn的明确答案。 我见过“类似的问题”(我将提及),但最终没有一个答案能够解决我的担忧。 让我从定义开始。 假设我们从这里开始: 我所说的“沙盒”是指确保JavaScript不得访问任何java对象,除了在范围中添加的对象。 所以下面的评估应该没问题。 但以下评估不会: 最后,我不担心这一点: 因此,通过沙盒,我打算阻止jsCode访问我没

  • 我在Eclipse中有一个maven项目。在src/main/resources下,我有一个名为“directoryToCopy”的目录,其中包含文件。一旦我运行了我的项目,我想将“directoryToCopy”复制到桌面上的本地目录“localDirec”下。 我用了这个: 这在本地工作正常,但是当我想将其作为可执行jar文件运行时,我会得到NullPointerException。 请问有什

  • 我在Netbeans IDE 8.0.1中编写了一个名为SampleChat的Java GUI程序,并使用“Clean and Build”函数创建了一个jar文件。 我转到Netbeans创建的'dist'目录,双击它生成的jar文件。打开一个cmd窗口,其行如下: 我打算从一个U盘共享程序,所以它是至关重要的,唯一的要求是一个JVM,鼠标,也许一些手指来双击它。 我想出的一个尴尬的解决方案是编

  • java领域目前似乎有一种趋势,即不再以war文件(或ear文件)的形式将java web应用程序部署到java servlet容器(或应用程序服务器),而是将应用程序打包为具有嵌入式servlet/HTTP服务器(如Jetty)的可执行jar。我的意思更多的是因为较新的框架正在影响新应用程序的开发和部署方式,而不是应用程序如何交付给最终用户(因为,例如,我理解了为什么Jenkins使用嵌入式容器