2014-11-23 4 views
0

На моей странице JSP мне нужно показать список со всеми файлами, находящимися в настоящее время в папке/public.Путь к файлу дает NullPointer

Это проект j2ee с весной & спящий режим. В моем классе обслуживания для получения списка всех файлов, у меня есть следующие:

public class UploadService { 

private static List<File> list = new ArrayList<File>(); 

public static List<File> getFileList() { 

    File folder = new File("C:\\Users\\Admin\\Documents\\GitHub\\MyApp\\src\\main\\webapp\\resources\\public"); 
    File[] listOfFiles = folder.listFiles(); 
    list.addAll(Arrays.asList(listOfFiles)); 

    return list; 
} 

Это работает, однако, когда я записываю:

File folder = new File(Structure.defaultUrl+"/public/"); 

я получаю NullPointer ..

defaultUrl выглядит следующим образом:

public class Structure { 

/** 
* 
*/ 
public static String defaultUrl = "/MyApp"; 

В ResourceHandler:

public void addResourceHandlers(ResourceHandlerRegistry registry) { 
    registry.addResourceHandler("/public/**").addResourceLocations("/resources/public/"); 
} 

Странная часть, на главной странице, где у меня есть:

<a href ="<%=Structure.defaultUrl%>/public/AlgVW2011.pdf"> 

Это делает работу. Я действительно застрял сейчас, кто-нибудь знает, что я делаю неправильно?

Edit:

Искал проблемы, вероятно, некоторые проблемы в MvcConfiguration.java.

public class Initializer implements WebApplicationInitializer { 

/** 
* 
* @param servletContext 
* @throws ServletException 
*/ 
@Override 
public void onStartup(ServletContext servletContext) throws ServletException { 
    AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext(); 
    ctx.register(MvcConfiguration.class); 
    servletContext.addListener(new ContextLoaderListener(ctx)); 

    ctx.setServletContext(servletContext); 

    Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx)); 
    servlet.addMapping("/"); 
    servlet.setLoadOnStartup(1); 
} 

}

+0

Попробуйте использовать это: 'File (getContextRoot() + "SRC/основные/WebAPP/ресурсы/общественные");' –

+0

Я попробовал ваше предложение, но метод getContextRoot() не может быть найден в Класс UploadService. Когда я искал его в Интернете, я видел, что код используется в классах запросов Servlet - я не могу получить этот метод в классе UploadService. –

+0

жаль, что это была моя ошибка, а не 'getContextRoot()' its 'getContextPath()'. Я прошу прощения за свою ошибку. –

ответ

1

Вы не можете ссылаться на /public/ из кода службы. Отображение доступно только из контекста Servlet после того, как обработчики Spring разрешат его до /resources/public/.

Используйте javax.servlet.ServletContext и Spring ServletContextResource, чтобы получить ресурс в папке webapp.

@Autowired 
private ServletContext servletContext; 

public static List<File> getFileList() { 
    Resource resource = new ServletContextResource(servletContext, "/resources/public"); 
    File folder = resource.getFile(); 
    File[] listOfFiles = folder.listFiles(); 
    list.addAll(Arrays.asList(listOfFiles)); 

    return list; 
} 
+0

Звучит неплохо, я пробовал это, но когда я иду в JSP, я получаю следующее сообщение: Ошибка обработки запроса; Вложенное исключение - это java.lang.IllegalArgumentException: невозможно разрешить ServletContextResource без ServletContext Я новичок во всей Spring, я должен отметить, что мы используем классы java вместо .xml, может быть, это что-то с этим связано? –

+0

Возможно, ваш класс обслуживания зарегистрирован в не-веб-контексте, который не имеет доступа к 'ServletContext'. Обновите свой вопрос с помощью своих конфигураций. – Khalid

+0

Спасибо за вашу помощь, я обновил вопрос, я думаю, что это близко к работе. –