2014-09-25 2 views
0

Хорошо, я работаю с Spring MVC 4.0, и у меня возникла проблема с чтением файла txt с контроллера.Spring MVC как получить доступ к статическому ресурсу от контроллера

я поставил в моем диспетчерскую-сервлет

<mvc:resources mapping="/docs/**" location="/docs/"/> 

так в документации я поставил file.txt, я хочу, чтобы прочитать этот файл с контроллера.

@RequestMapping("/file") 
public class FileController { 

    @RequestMapping(method=RequestMethod.GET) 
    public String getFile() throws IOException{ 
     BufferedReader br = new BufferedReader(new FileReader("docs/file.txt")); 
     StringBuilder sb = new StringBuilder(); 
     try { 

     String line = br.readLine(); 
     while (line != null) { 
      sb.append(line); 
      line = br.readLine(); 
     } 
     } finally { 
      br.close(); 
     } 
     return sb.toString(); 
    } 

} 

Я перепробовал все пути для FileReader (пути), и я не могу получить, что файл ... Как я могу это сделать?

Моя структура каталогов:

Application 
---WepPages 
-------META-INF 
-------WEB-INF 
-------docs 

---SourcePackages 
---Libraries 
. 
. 
. 
. 
. 
+1

Вы смешивание определений «ресурса». Статические ресурсы обрабатываются автоматически Spring MVC и не нуждаются в выделенных контроллерах. – chrylis

ответ

0

ресурсы, как правило, упаковываются в войну. Вот почему вы не можете найти их в файловой системе. Хотя вы все еще можете получить доступ к ним с помощью загрузчика классов:

getClass().getResourceAsStream("/docs/file.txt") 
0

Spring может получить доступ основных ресурсов с помощью Resource интерфейса:

@Value("file:/docs/file.txt") 
private Resource myFile; 

@RequestMapping(method = RequestMethod.GET) 
public String getFile() throws IOException { 

BufferedReader br = new BufferedReader(new FileReader(myFile.getFile())); 
    // do something 
} 
0

Вы можете прочитать файл с помощью ServletContext. например

ServletContext context = //... 
InputStream is = context.getResourceAsStream("/docs/file.txt"); 

Также проверьте это - ServletContext and Spring MVC.

0

Мне нужно было сделать это, чтобы заполнить список файлов js и css для моего представления.
Пути файлов могут быть переданы в представление, поэтому их не нужно регистрировать вручную.
Это, как я это делаю -

@Controller 
public class HomeController { 

WebApplicationContext webappContext; 

List<String> jsFiles = new ArrayList<>(); 
List<String> cssFiles = new ArrayList<>(); 

@Autowired 
public HomeController(ServletContext servletContext) throws IOException{ 

    webappContext = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext); 


    Resource[] jsResources = webappContext.getResources("content/modules/**/*.js"); 
    Resource[] cssResources = webappContext.getResources("content/modules/**/*.css"); 

    for (Resource resource : jsResources) { 
     jsFiles.add(resource.getURL().getPath()); 
    } 
    for (Resource resource : cssResources) { 
     cssFiles.add(resource.getURL().getPath()); 
    } 
} 
@RequestMapping({ "/", "/home**" }) 
public ModelAndView getHomePage() { 

    ModelAndView modelAndView = new ModelAndView(); 

    modelAndView.setViewName("home"); 
    modelAndView.addObject("jsFiles", jsFiles); 
    modelAndView.addObject("cssFiles", cssFiles); 

    return modelAndView; 
} 
} 
Смежные вопросы