2015-05-17 4 views
0

Я не могу получить доступ к файлам в каталоге ресурсов. В чем проблема?java spring resource folder: FileNotFoundException

в servlet-context.xml

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

    <!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure --> 

    <!-- Enables the Spring MVC @Controller programming model --> 
    <annotation-driven /> 

    <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory --> 
    <resources mapping="/resources/**" location="/resources/" /> 

    <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory --> 
    <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <beans:property name="prefix" value="/WEB-INF/views/" /> 
     <beans:property name="suffix" value=".jsp" /> 
    </beans:bean> 

    <context:component-scan base-package="com.example.test" /> 

</beans:beans> 

в '' HomeController.java

@RequestMapping(value = "/", method = RequestMethod.GET) 
public String home(Locale locale, Model model) { 

    File file = new File("/resources/sample/text.txt"); 
    if (file.exists()) { 
     logger.info("file found."); 
    } else { 
     logger.info("file not found."); 
    } 

    return "home"; 
} 

в web.xml (по умолчанию)

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 

    <!-- The definition of the Root Spring Container shared by all Servlets and Filters --> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/spring/root-context.xml</param-value> 
    </context-param> 

    <!-- Creates the Spring Container shared by all Servlets and Filters --> 
    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <!-- Processes application requests --> 
    <servlet> 
     <servlet-name>appServlet</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>appServlet</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 
</web-app> 
+0

Если это базовая файловая система Unix/Linux, установка начального «/» заставит его начинать с корневого уровня файловой системы. Вы пытались его удалить? Используйте «resources/sample/text.txt» –

+0

@JorgeGarita да, я пробовал ... – ISSKJ

+0

Каково ваше отображение в web.xml –

ответ

2

Oups, что не правильный путь для доступа к ресурсам в веб-приложении.

Прежде всего, пути к ресурсам относительно пути ServetContext, поэтому вы не должны пытаться использовать их в качестве абсолютных путей файловой системы. Но, кроме того, вы не можете быть уверены, что они существуют как настоящие файлы.

сервлет спецификации позволяют сервлет контейнер не взорвать военный файл, prodided он способен правильно обслуживать ресурсы через ServletContext.getResourceAsStream(java.lang.String path)

Это означает, что вы должны использовать только ресурсы, не только для чтения через ServletContext.getResourceAsStream(java.lang.String path) и никогда не пытаться использовать их как истинные файлы.