Jsp 查看本地文件系统的文件夹

Jsp 查看本地文件系统的文件夹,jsp,servlets,Jsp,Servlets,我们正在开发一个文件共享站点,其概念是用户和管理员使用Servlet2.5、jsp和jdbc。我们已经通过servlet实现了文件上传/下载部分。用户应在站点中查看其上载的文件和文件夹。但我们仍然停留在通过servlet实现文件夹级视图上。我们在pl/sql中维护了一个add_file db表,并检索了仅由特定用户上传的文件详细信息。但是,我们还必须显示无法显示的文件夹。 我遇到了一个改变ApacheTomcat6.0的web.xml的简单解决方案,但它可以让每个用户看到每个文件夹和文件的内部,

我们正在开发一个文件共享站点,其概念是用户和管理员使用Servlet2.5、jsp和jdbc。我们已经通过servlet实现了文件上传/下载部分。用户应在站点中查看其上载的文件和文件夹。但我们仍然停留在通过servlet实现文件夹级视图上。我们在pl/sql中维护了一个add_file db表,并检索了仅由特定用户上传的文件详细信息。但是,我们还必须显示无法显示的文件夹。 我遇到了一个改变ApacheTomcat6.0的web.xml的简单解决方案,但它可以让每个用户看到每个文件夹和文件的内部,而不依赖于数据库。但我们只能在数据库的基础上显示这些数据。有什么办法可以做到这一点

  • UploadedFileView.jsp

    -----------代码在这里

    <c:forEach items="${files}" var="file">``
            <c:url value="/DownloadServlet" var="url">
                <c:param name="name" value="${file.name }" />
            </c:url>
    
            <a href="<c:out value="${url}"/>"><c:out value="${file.name}" />
            </a>
    
    
            <br>
        </c:forEach>
    
    错误Stacktrace:(测试是foldername)

    D:\Users\projectname\uploads\test(访问被拒绝:Http状态500)

    异常
    严重:Servlet DownloadServlet的Servlet.service()引发异常
    java.io.FileNotFoundException:D:\Users\projectname\uploads\test(访问被拒绝)
    在java.io.FileInputStream.open(本机方法)
    位于java.io.FileInputStream。(未知源)
    位于java.io.FileInputStream。(未知源)
    位于com.servlets.DownloadServlet.doGet(DownloadServlet.java:57)
    位于javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    位于javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
    位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    位于org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    位于org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    位于org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    位于org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    位于org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    位于org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    位于org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
    位于org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
    位于org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    位于java.lang.Thread.run(未知源)
    
    这是一个非常简单的算法,但这里有一个示例可以帮助您开始:

    public void displayFileTree(File rootDirectory) {
        displayFileTree(rootDirectory, "");
    }
    
    private void displayFileTree(File rootDirectory, String indent) {
        for (File file : rootDirectory.listFiles()) {
            System.out.println(indent + file.getName());
            if (file.isDirectory()) {
                displayFileTree(file, indent + "    ");
            } 
        }
    }
    
    从一个简单的控制台程序运行这段代码,然后根据具体的web问题调整它

    如果您想要一个可以从JSP中使用的Java bean,它的结构将与文件相同:

    public class Node
        private boolean directory;
        private String name;
        private List<Node> children;
    
        // getters omitted for brevity
    }
    
    公共类节点
    私有布尔目录;
    私有字符串名称;
    私人名单儿童;
    //为简洁起见省略了getter
    }
    
    您的具体问题是什么?可以通过UploadedFileView.jsp访问“uploadeLocationBO.UPLOAD\u目录”中的文件。但如果上传目录位置中存在任何文件夹,我将无法浏览该文件夹。这是投掷错误。我想访问UPLOAD_目录中的任何文件夹,并访问该文件夹中的文件。但是我不想修改ApacheTomcat的web.xml并覆盖defaultservlet配置来显示目录结构。在第一篇文章中添加了代码和异常堆栈跟踪。您似乎试图像读取常规文件一样读取目录。无法读取目录。它只有一个名称/路径。我真的不知道您想要实现什么,但是在尝试读取之前测试文件是否是一个目录:
    file.isDirectory()
    。我可以在控制台上轻松获得文件夹名称,但我一直坚持以可点击模式在jsp页面中显示文件夹,即,每当我运行jsp页面时,它都会显示文件夹,如果我点击该文件夹,我可以遍历文件夹中的文件。。我必须将数据加载到XML中,XML的结构必须根据上传位置进行定义。接下来,您可以使用XSL将XML呈现到jsp页面上。我是xml的新手。如何将您提供的示例代码转换为合适的xml文件。由于会定期添加和删除文件,所以每次都需要动态创建xml文件。@DeSmOnd:不,您不必这样做。您似乎完全迷路了,不了解HTML、HTTP和JSP是如何工作的。遵循一些介绍性教程,该教程展示了如何通过servlet从存储在请求属性中的bean生成带有链接的页面。你的问题太令人困惑了,无法回答。我的基本问题是这样的。这个问题已经得到了回答。再看看我编辑过的答案。
    public void displayFileTree(File rootDirectory) {
        displayFileTree(rootDirectory, "");
    }
    
    private void displayFileTree(File rootDirectory, String indent) {
        for (File file : rootDirectory.listFiles()) {
            System.out.println(indent + file.getName());
            if (file.isDirectory()) {
                displayFileTree(file, indent + "    ");
            } 
        }
    }
    
    public class Node
        private boolean directory;
        private String name;
        private List<Node> children;
    
        // getters omitted for brevity
    }