简单实现下载功能--jsp,servlet

刚到公司,前天给个人第一个小任务,虽然只是作个简单的下载功能。java

但一开始仍是花了很多时间去理解导师的意思,并且还要用到一些公司的库类,花了一个下午才作好。web

 

大概有三种方法多线程

1.直接用a标签跳转到指定位置的目标文件。  <a href="doc/help.txt" /></a>(文件是位于doc文件夹下help.txt)(不推荐这种方法,并且这跳转会直接打开文件)app

2.jsp跳转而后直接在jsp里面写下载功能jsp

<a href="download.jsp" /></a>网站

在download.jsp中使用字节流的方法提供下载编码

 <%@page language="java" contentType="application/x-msdownload"  pageEncoding="gb2312"%><%
    //关于文件下载时采用文件流输出的方式处理:
    //加上response.reset(),而且全部的%>后面不要换行,包括最后一个

    response.reset();//能够加也能够不加
    response.setContentType("application/x-download");
    String filedownload = "想办法找到要提供下载的文件的物理路径+文件名";
    String filedisplay = "给用户提供的下载文件名";
    filedisplay = URLEncoder.encode(filedisplay,"UTF-8");
    response.addHeader("Content-Disposition","attachment;filename=" + filedisplay);

    OutputStream outp = null;
    FileInputStream in = null;
    try
    {
        outp = response.getOutputStream();
        in = new FileInputStream(filenamedownload);

        byte[] b = new byte[1024];
        int i = 0;

        while((i = in.read(b)) > 0)
        {
            outp.write(b, 0, i);
        }
        outp.flush();
    }
    catch(Exception e)
    {
        System.out.println("Error!");
        e.printStackTrace();
    }
    finally
    {
        if(in != null)
        {
            in.close();
            in = null;
        }
        if(outp != null)
        {
            outp.close();
            outp = null;
        }
    }
%>url

我以为这种方法对于网站只有少许下载要求时能够使用线程

3使用servlet来控制下载code

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<servlet>
<servlet-name>DownloadFile</servlet-name>
<servlet-class>com.suntek.web.servlet.DownloadServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>DownloadFile</servlet-name>
<url-pattern>/downloadfile</url-pattern>
</servlet-mapping>


</web-app>

 

servlet

package com.suntek.web.servlet;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DownloadServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
OutputStream o = response.getOutputStream();
byte b[] = new byte[1024];
// the file to download.
File fileLoad = new File("F:/", "Eula.txt");
// the dialogbox of download file.
response.setHeader("Content-disposition", "attachment;filename="
+ "help.txt");
// set the MIME type.
response.setContentType("text/plain");
// get the file length.
long fileLength = fileLoad.length();
String length = String.valueOf(fileLength);
response.setHeader("Content_Length", length);
// download the file.
FileInputStream in = new FileInputStream(fileLoad);
int n = 0;
while ((n = in.read(b)) != -1) {
o.write(b, 0, n);
}
}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
doGet(request, response);
}
}

 在此servlet里面使用了硬编码的方式把文件的路径匹配上去,在实际中要实现动态下载,就从路径方面下手,并且注意,文件的后缀名必定要设置成功,也就是

response.setContentType("text/plain");

来设置下载的文件默认用什么软件打开,contenttype网上有列表,能够本身搜索

 

 

下一篇应该会写多线程下载跟实现断点下载(恰好作到这个下载功能,就把这块的知识都顺便学学吧)

相关文章
相关标签/搜索