Java 文件路径提供空指针

Java 文件路径提供空指针,java,spring,jakarta-ee,model-view-controller,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() {

在我的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;
}
public class Structure {

/**
 *
 */
public static String defaultUrl = "/MyApp";
我收到一个空指针

默认URL如下所示:

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

}

您不能从服务代码中引用
/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;
}
@Autowired
私有ServletContext ServletContext;
公共静态列表getFileList(){
Resource Resource=newservletcontextresource(servletContext,“/resources/public”);
File folder=resource.getFile();
File[]listOfFiles=folder.listFiles();
addAll(Arrays.asList(listOfFiles));
退货清单;
}

尝试使用这个:
文件(getContextRoot()+“src/main/webapp/resources/public”)我尝试了您的建议,但是在UploadService类中找不到getContextRoot()方法。当我在线搜索它时,我看到了Servlet请求类中使用的代码-我无法在UploadService类中获得该方法。很抱歉,这是我的错误,它不是
getContextRoot()
its
getContextPath()
。我为我的错误道歉听起来不错,我尝试了这个,但是当我转到JSP时,我得到以下消息:请求处理失败;嵌套异常是java.lang.IllegalArgumentException:没有ServletContext就无法解析ServletContextResource我对整个春季都很陌生,我应该注意我们使用java类而不是.xml,可能与此有关?您的服务类可能是在无法访问
ServletContext
的非web上下文中注册的。使用您的配置更新您的问题。感谢您的帮助,我更新了问题,我认为它即将开始工作。如何注册您的
上载服务
?它是在MVC配置中定义的吗?它不是在MVC配置中定义的。服务UploadService只在UploadController中调用,没有注册。