xmhyyds 2024-11-30 13:17 采纳率: 0%
浏览 41
问题最晚将于12月08日00:00点结题

springboot中的路径问题

img

img

img

img

求解,为什么session.getServletContext().getRealPath("/")找到的是一个临时路径,而不是当前项目的路径?网上查了很多博客说是没有部署工作目录,我在resource下建了一个public目录,也还是没有用。
我看博客中的Run/Debug Configurations和我的页面不一样,是因为软件版本更新的原因吗?我看的好几个这方面的比克都是2021年的,我的idea是2024.1.2版本的。
这个工作目录到底在哪里可以配置啊,找了好久都没有找到。或者说还有什么别的方法可以解决这个问题?或者是换个写法?求解各位,感谢

  • 写回答

26条回答 默认 最新

  • M_try的小尾巴 2024-11-30 13:20
    关注

    该回答引用自Deepseek,由本人整理审核 若有帮助,望采纳。

    在Spring Boot应用中,session.getServletContext().getRealPath("/") 返回的是一个临时路径,而不是当前项目的路径,这通常是因为Spring Boot应用在运行时使用了嵌入式的Servlet容器(如Tomcat),并且应用被打包成一个可执行的JAR文件。在这种情况下,Servlet容器会将资源文件放在一个临时的文件系统路径中,而不是项目的实际路径。

    解决方法

    1. 使用 ResourceLoader 获取资源路径

      你可以使用Spring的 ResourceLoader 来获取资源文件的路径,而不是依赖于ServletContext的 getRealPath 方法。

      import org.springframework.core.io.ResourceLoader;
      import org.springframework.stereotype.Component;
      
      @Component
      public class ResourcePathUtil {
      
          private final ResourceLoader resourceLoader;
      
          public ResourcePathUtil(ResourceLoader resourceLoader) {
              this.resourceLoader = resourceLoader;
          }
      
          public String getResourcePath(String resourceLocation) {
              try {
                  return resourceLoader.getResource(resourceLocation).getFile().getAbsolutePath();
              } catch (IOException e) {
                  throw new RuntimeException("Failed to get resource path", e);
              }
          }
      }
      

      使用时:

      String path = resourcePathUtil.getResourcePath("classpath:public/");
      
    2. 使用 application.properties 配置工作目录

      你可以在 application.properties 中配置工作目录:

      spring.resources.static-locations=classpath:/public/
      

      这样,Spring Boot会自动将 public 目录作为静态资源目录。

    3. 检查IDEA的Run/Debug Configurations

      由于你的IDEA版本是2024.1.2,可能与2021年的版本有所不同。你可以检查IDEA的Run/Debug Configurations,确保工作目录(Working Directory)设置正确。

      • 打开Run/Debug Configurations。
      • 选择你的Spring Boot应用配置。
      • 在“Configuration”选项卡中,检查“Working directory”是否设置为你的项目根目录。
    4. 使用 Path 类获取项目路径

      你也可以使用Java的 Path 类来获取项目路径:

      import java.nio.file.Paths;
      
      public class ProjectPathUtil {
      
          public static String getProjectPath() {
              return Paths.get("").toAbsolutePath().toString();
          }
      }
      

      使用时:

      String projectPath = ProjectPathUtil.getProjectPath();
      

    总结

    • 使用 ResourceLoader 获取资源路径是一个更现代和推荐的方法。
    • 配置 application.properties 可以确保静态资源路径正确。
    • 检查IDEA的Run/Debug Configurations,确保工作目录设置正确。
    • 使用 Path 类获取项目路径也是一个可行的方法。

    通过这些方法,你应该能够解决 session.getServletContext().getRealPath("/") 返回临时路径的问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 11月30日

悬赏问题

  • ¥50 husky+jaco2实现在gazebo与rviz中联合仿真
  • ¥15 dpabi预处理报错:Error using y_ExtractROISignal (line 251)
  • ¥15 在虚拟机中配置flume,无法将slave1节点的文件采集到master节点中
  • ¥15 husky+kinova jaco2 仿真
  • ¥15 MATLAB数据处理
  • ¥15 zigbee终端设备入网失败
  • ¥15 金融监管系统怎么对7+4机构进行监管的
  • ¥15 硬件IIC从模式的数据发送,中断数据的接收,不能用HAL库(按照时序图)
  • ¥20 QAxWidget上显示一个word文档后,如何直接在该QAxWidget上修改和保存word文档
  • ¥15 Simulink仿真报错,请问如何解决