2

我必须制作一个用于从文件夹下载文件的 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>

问题是下载这些文件只能在 IE 中工作,并且只有当用户选择 Right CLick - Save target As 时。

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

谢谢你!

4

1 回答 1

0

您必须知道文件系统上文件的路径与URL不同。文件系统只有您的服务器知道,URL 是浏览器访问的路径。

假设您的文件在其中,/opt/tomcat/webapps/myApp/folder/file.jpg并且您正在运行 Tomcat www.example.com。如果您(通过 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 上下文myApp
  • 应用程序内部文件的路径folder/file.jpg

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

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

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

注意:这仅在您的文件位于 webapplication 目录 ( myApp) 中时才有效。如果它在外面,您将需要一个 servlet 将您的文件流式传输到客户端,但那是另一回事了。

于 2013-04-04T09:54:44.240 回答