Что такое ClassPath в WebApp, развернутом Tomcat, и как разрешается аргумент SpringPathXmlApplicationContext ("beans. xml")? - PullRequest
0 голосов
/ 06 марта 2020

У меня есть веб-проект Eclipse Dynami c.

Мой файл определения Spring-контекста "spring-context. xml" имеет значение WebContent/WEB-INF/spring-context.xml.

1) Почему код ниже работает нормально?

2) А что такое ClassPath в моем случае?

ApplicationContext context = new ClassPathXmlApplicationContext("mybeans-definition.xml");

Я понимаю, что такое classpath для JVM (где искать файлы .class + .jar) или javac (где искать файлы .jar).

Но Что такое ClassPath моего проекта веб-приложения (и создаваемый в результате WAR), который он генерирует?

Кроме того, насколько я понимаю, - только /WEB-INF/classes + /WEB-INF/lib находятся "на пути к классам" (??? - потому что папка sr c находится в Eclipse Build Path, а папка sr c сопоставлена ​​с {war_jarRoot}/WEB-INF/classes в меню Deployment Assembly) - в этом случае я нужно привести мой аргумент относительно /WEB-INF/classes - то есть new ClassPathXmlApplicationContext("../mybeans-definition.xml"); - это тоже работает, но это не нужно. Это выглядит так, как будто WEB-INF сама папка находится в пути к классам!

  • "/mybeans-definition.xml" - также ОК
  • "../mybeans-definition.xml" - OK
  • "mybeans-definition.xml" - OK
  • "WEB-INF/mybeans-definition.xml" - FileNotFoundException
  • "/WEB-INF/mybeans-definition.xml" - FileNotFoundException: ресурс пути к классу [WEB-INF/mybeans-definition.xml] не может быть открыт, поскольку он не существует

точно такие же результаты с префиксом classpath: (как и ожидалось - должны быть такими же):

  • "classpath:/mybeans-definition.xml" - также ОК
  • "classpath:../mybeans-definition.xml" - ОК
  • "classpath:mybeans-definition.xml" - ОК
  • "classpath:WEB-INF/mybeans-definition.xml" - FileNotFoundException
  • "classpath:/WEB-INF/mybeans-definition.xml" - FileNotFoundException

Неожиданные (для меня) результаты с префиксом file::

  • "file:/WebContent/WEB-INF/mybeans-definition.xml" - FileNotFoundException (в то время как WebContent находится в root папки моего проекта Eclipse, на одном уровне с папкой sr c. В отличие от sr c, WebContent не добавляется в Путь сборки, как видно в меню «Настроить путь сборки» - но это не имеет значения - я могу использовать любое местоположение, используя абсолютный путь из (проекта) root или относительный путь из текущего местоположения файла, не так ли?)
  • "file:../../../../WebContent/WEB-INF/mybeans-definition.xml" - FileNotFoundException
  • "file:/../../../../WebContent/WEB-INF/mybeans-definition.xml" - FileNotFoundException (я пытался go с {projectRoot}/src/org.my.packagename/FileWithNewClassPathXmlApplicationContext до WebContent/WEB-INF/)

У меня нет дополнительной конфигурации.

mybeans-definition.xml :

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<bean id="my" class="com.my.MyBean1" ></bean>

</beans>

Этот ничего не прояснил.

...