FileSytemResources в Spring Framework

Я пытаюсь получить XML-файл (содержащий определение bean-компонента) в моем проекте Spring MVC. Если у меня есть файл xml в каталоге WEB-INF, то какой путь я должен указать в FileSystemResource в моем сервлете, чтобы получить xml?

i.e. BeanFactory factory = new XmlBeanFactory(new FileSystemResource("xml"));

Спасибо


person Lydon Ch    schedule 04.03.2010    source источник


Ответы (1)


Вы не должны использовать FileSystemResource, вы должны использовать ServletContextResource:

new ServletContextResource(servletContext, "/myfile.xml");

Предполагая, конечно, что servletContext доступен вам.

Если вы действительно хотите использовать FileSystemResource, вам нужно спросить у контейнера, где находится каталог, и использовать его как относительный путь, например

String filePath = servletContext.getRealPath("/myfile.xml");
new FileSystemResource(filePath);

Однако проще позволить Spring сделать всю работу за вас. Скажем, у вас есть компонент, которому нужен этот Resource. Вы можете ввести путь к ресурсу в виде строки и позволить Spring преобразовать его в ресурс, например.

public class MyBean {

   private Resource myResource;

   public void setMyResource(Resource myResource) {
      this.myResource = myResource;
   }
}

и в вашем файле beans:

<bean id="myBean" class="MyBean">
   <property name="myResource" value="/path/under/webapp/root/of/my/file.xml">
</bean>

Spring преобразует путь к ресурсу в ServletContextResource и передаст его вашему bean-компоненту.

person skaffman    schedule 04.03.2010
comment
Спасибо!. В моем сервлете есть HttpServletRequest и HttpServletResponse, поэтому я делаю request.getRealPath() вместо servletContext.getRealPath(). - person Lydon Ch; 04.03.2010