サーブレット 2.5、jsp、jdbc を使用して、ユーザーと管理者の概念を持つファイル共有サイトを開発しています。サーブレットを介してファイルのアップロード/ダウンロード部分を実装しました。ユーザーは、アップロードしたファイルとフォルダーをサイトに表示する必要があります。しかし、サーブレットを介してフォルダー レベル ビューを実装することに行き詰まっています。pl/sql で add_file db テーブルを維持し、特定のユーザーのみがアップロードしたファイルの詳細を取得しました。しかし、表示できないフォルダーも表示する必要があります。apache tomcat 6.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>
ダウンロード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)