在JSP中列出和链接文件夹的内容不起作用

时间:2013-04-04 09:32:58

标签: list jsp hyperlink download

我必须创建一个Web应用程序,用于从文件夹下载文件。我使用Tomcat作为服务器。我写了一个JSP页面,列出了我的数据文件夹的内容,我试图从这个文件夹中为每个文件建立链接

JSP页面是这样的:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1" import="java.io.File,java.io.IOException,java.util.*,java.io.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
Contents <br>
<% File f = new File("C:\\Users\\name\\Desktop\\eclipse\\app\\PTW\\WebContent\\data\\"); // current directory

File[] files = f.listFiles();
 for (File file : files) { 
    if (file.isDirectory()) {  
        //System.out.print("directory:");
    } else {
        %>
        <a href="<%=file.getAbsolutePath()%>" target="_blank"><br> <%=file.getName() %>
         </a>

    <%  
    } 
} 

 %>

</body>
</html>

问题是下载这些文件仅适用于I.E.并且仅当用户选择Right CLick - 将目标另存为。

所以我的方法是错误的!但我不明白为什么?如何强制从这个JSP下载文件?

谢谢!

1 个答案:

答案 0 :(得分:0)

您必须知道文件系统上文件的路径与网址的路径不同。文件系统仅为您的服务器所知,URL是浏览器访问的路径。

假设您的文件位于/opt/tomcat/webapps/myApp/folder/file.jpg,并且您正在www.example.com上运行Tomcat。如果您生成(通过JSP)类似

的链接
<a href="/opt/tomcat/webapps/myApp/folder/file.jpg">Download File</a>

您的浏览器会将此路径视为:

www.example.com/opt/tomcat/webapps/myApp/folder/file.jpg

您的浏览器无法找到该文件。浏览器找到它的URL是:

www.example.com/myApp/folder/file.jpg

其中包含

  • www.example.com
  • servlet context myApp
  • 应用程序内部文件folder/file.jpg
  • 的路径

因此,您需要在JSP中构建路径/myApp/folder/file.jpg。你可以这样做:

<a href="${pageContext.request.contextPath}/folder/file.jpg">Download</a>

我在这里使用Expression Language而不是scriptlet。这被认为是更好的风格,因为它提高了维护性和可读性。

注意:仅当您的文件位于Web应用程序目录(myApp)内时,此操作才有效。如果它在外面,你需要一个servlet来将文件流式传输到客户端,但这是另一个故事。