在我的JSP页面上,我需要显示一个列表,其中包含/ public文件夹中当前存在的所有文件。
这是一个带有弹簧和弹簧的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">
确实有效。我现在真的陷入困境,任何人都知道我做错了什么?
编辑:
搜索了问题,可能是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 :(得分:1)
您无法从服务代码中引用/public/
。只有在Spring的处理程序将其解析为/resources/public/
后,才能从Servlet上下文访问映射。
使用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;
}