java - 文件路径给出 NullPointer

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

在我的 JSP 页面上,我需要显示一个列表,其中包含/public 文件夹中当前存在的所有文件。

这是一个带有 spring 和 hibernate 的 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/");

我收到一个空指针..

默认Url如下:

public class Structure {

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

在资源处理程序中:

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

}

最佳答案

您无法从服务代码中引用 /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;
}

关于java - 文件路径给出 NullPointer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27085917/

相关文章:

java - 从 jar 中读取文件在 eclipse 中不起作用

java - 使用 Maven Central 作为辅助存储库

java - 为什么spring源代码中的 "NestedExceptionUtils"被声明为抽象类?

java - 使用 JDBC 连接位于同一服务器上不同数据库中的 2 个 Oracle 表中的数据

java - JSF 实体转换错误 : rich suggestionbox Conversion Error setting value '*' for 'null Converter'

java - 在 Ant 中使用 Maven 获取 jar 依赖项

java - Spring MVC Java教程问题

java - Spring Jackson 通过接口(interface)序列化

multithreading - Java EE 响应客户端但继续处理

java - Tomcat removeAbandoned 属性导致异常