最近在学习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>标签加了一句话

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地址要配置正确
如下为结果截图


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