假如我想要共享在工程目录下的myfile文件夹中的文件,如:D:\apache-tomcat-6.0.16\webapps\day1213\myfile,可以这样用servlet+jsp技术实现。
jsp 名称为:DownloadDemo1.jsp ,源代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.io.File" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<body>
<%
String path= application.getRealPath("/myfile/");
File file = new File(path);
String[] test= file.list();
for(int i=0;i<test.length;i++){
out.println(i+1+" ");
out.println("<a href='http://localhost:8080/day1213/servlet/DownloadDemo1?name="+test[i]+"'>"+test[i]+"</a>"+"<br/>");
%>
<%
}
%>
</body>
</html>
servlet 名称为:DownloadDemo1.java,源代码如下:
package com.itheima.test;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DownloadDemo1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name=request.getParameter("name");
name=new String(name.getBytes("ISO-8859-1"),"UTF-8");
// System.out.println("参数为:"+name);
String path=getServletContext().getRealPath("/myfile/"+name+"");
// System.out.println("路径为:"+path);
response.setHeader("Content-disposition", "attachment;filename="+URLEncoder.encode(name, "UTF-8"));
InputStream is = new FileInputStream(path);
OutputStream out = response.getOutputStream();
int len=0;
byte[] buf=new byte[1024];
while((len=is.read(buf))!=-1){
out.write(buf, 0, len);
}
out.close();
is.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
}
在ie浏览器中敲入地址:http://localhost:8080/day1213/DownloadDemo1.jsp
点击链接下载,就可以实现啦。
后记:
在测试代码的时候,遇到如下一个问题,就是我不通过jsp发送请求,而是直接在ie浏览器中输入带有中文参数的地址,如:http://localhost:8080/day1213/servlet/DownloadDemo1?name=你好.txt ,程序会报错,D:\apache-tomcat-6.0.16\webapps\day1213\myfile\???.txt (系统找不到指定的文件。)估计是直接发送过去,出现了编码问题,服务器识别不了。
后来,我改用jsp发送请求,发送地址为:http://localhost:8080/day1213/servlet/DownloadDemo1?name=你好.txt 程序正常执行。呵呵,这倒是蛮奇怪的!