0

サーブレット 2.5、jsp、jdbc を使用して、ユーザーと管理者の概念を持つファイル共有サイトを開発しています。サーブレットを介してファイルのアップロード/ダウンロード部分を実装しました。ユーザーは、アップロードしたファイルとフォルダーをサイトに表示する必要があります。しかし、サーブレットを介してフォルダー レベル ビューを実装することに行き詰まっています。pl/sql で add_file db テーブルを維持し、特定のユーザーのみがアップロードしたファイルの詳細を取得しました。しかし、表示できないフォルダーも表示する必要があります。apache tomcat 6.0 の web.xml を変更する簡単な解決策に出会いましたが、すべてのユーザーがすべてのフォルダーとファイル内を表示できるようになり、データベースに依存しなくなります。ただし、データベースのみに基づいてそれらを表示する必要があります。これを達成する方法はありますか?

  1. 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>
    

ダウンロードServlet.java

protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        HttpSession session = request.getSession();
        String filename = null;
        filename = request.getParameter("name");
        PrintWriter out = response.getWriter();
        String filepath = null;
        if (session.getAttribute("deletedfiles") != null)
        {
            filepath = DeleteLocationBO.DELETE_DIRECTORY;


        }
        else
        {
            filepath = UploadLocationBO.UPLOAD_DIRECTORY;
            }
        response.setContentType("APPLICATION/OCTET-STREAM");
        response.setHeader("Content-Disposition", "attachment; filename=\""
                + filename + "\"");

        FileInputStream fileInputStream = new FileInputStream(filepath
                + filename);

        int i;
        while ((i = fileInputStream.read()) != -1) {
            out.write(i);
        }
        fileInputStream.close();
        out.close();
    }

Error Stacktrace:(test はフォルダー名です)

D:\Users\projectname\uploads\test (アクセスが拒否されました:Http Status 500)

    exception 
        SEVERE: Servlet.service() for servlet DownloadServlet threw exception
    java.io.FileNotFoundException:D:\Users\projectname\uploads\test (Access is denied)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at com.servlets.DownloadServlet.doGet(DownloadServlet.java:57)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
4

1 に答える 1