文件路径给出了NullPointer

时间:2014-11-23 05:27:04

标签: java spring java-ee model-view-controller

在我的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);
}

}

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;
}