通过servlet实现网页的文件下载demo

最近在学习java的servlet,网页下载图片、视频、文档都是经常使用的操作,现在通过一个例子来实现下载视频。

软件:eclipse

语言:java web

知识点:Servlet,响应头,ServletContext


步骤

1、建立dynamic web工程,新建立的时候需要选择2.5的版本(因为2.5的版本可以在新建的时候就自带web.xml,3.0就没有),我命名工程为“DownloadMovie”,并且在java Resource里面新建立了一个servlet,命名为“DownServlet”,并且在WebContent的下面新建index.html文件,并且新建download文件夹,里面放置需要的下载文件”travel.mp4“,文件的结构如下图



2、在平常的下载中,经常是点击关键字,然后就进行下载了,所以要用<a>标签,在html中,我就在<body>标签加了一句话

index.htm中写的代码

href中的网址就是点击访问的网址,“DownloadMovie”是工程的名字,/downServelt是对应DownServlet对应url,可以在web.xml设置,后面的“?filename=travel.mp4”就是传递了travel.mp4这个文件名到创建的DownServlet中的作用。

3、在DownServlet的代码如下:

package com.fffff.download;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import javax.servlet.ServletException;

import javax.servlet.ServletOutputStream;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


/**

网页下载demo

***/

public class DownServlet extends HttpServlet {

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

//拿到从html传递来的参数

String filename = request.getParameter("filename");

//从ServletContext的getMimeType方法得到里面命名为”travel.mp4“的文件类型

response.setContentType(this.getServletContext().getMimeType(filename));

//这句话的意思是,在点击关键字的时候下载而不是预览

response.setHeader("Content-Disposition", "attachment;filename="+filename);

//设置input输入,得需要下载文件的输入

String realPath = this.getServletContext().getRealPath("/download/"+filename);

InputStream in = new FileInputStream(realPath);

//获得输出流

ServletOutputStream  out = response.getOutputStream();

//让文件传出

int len=0;

  byte[] buffer =new byte[1024];

  while((len=in.read(buffer))>0) {

  out.write(buffer,0,len);

  }

  in.close();

}

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

doGet(request, response);

}

}

4、整个实验可能会出现404,那么就是web.xml没有配置好,还可能会出现直接预览了MP4文件而不是下载提示那么就是这句”response.setHeader("Content-Disposition", "attachment;filename="+filename);“有错误,在servlet学习中,觉得关键在于一些url地址要配置正确



如下为结果截图


网页界面



点击以后出现的下载


若有问题可以留言,互相勉励,共同学习

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容