servlet实现文件下载功能

第一步:首先在你的项目新建一个文件夹存放一些可以下载的文件(本教程一一张图片为例子)

第二步:写servlet(DownloadServlet.java)

packagecom.example.servlet;

importjava.io.File;

importjava.io.IOException;

importjava.io.InputStream;

importjava.io.OutputStream;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

/**

* Servlet implementation classDownloadServlet

*/

publicclass DownloadServlet extends HttpServlet {

privatestaticfinallongserialVersionUID = 1L;

/**

* @see HttpServlet#doGet(HttpServletRequestrequest, HttpServletResponse response)

*/

protectedvoiddoGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODOAuto-generated method stub

response.setContentType("text/html;charset=utf-8");

//通知浏览器下载的方式打开

response.addHeader("Content-Type", "application/octet-stream"); // 限制类型

String s1="我爱java.png";

String s2 = new String(s1.getBytes("GBK"),"ISO-8859-1");//解决乱码

response.addHeader("Content-Disposition", "attachment;filename="+s2);// 下载后的文件名

//通过文件流读取文件

File file= new File("/File/11.jpg");

InputStreamin=getServletContext().getResourceAsStream(file.toString());

//获取response对象的输出流

OutputStreamout=response.getOutputStream();

byte[] buffer =newbyte[1024];

int len;

while((len =in.read(buffer)) !=-1){

out.write(buffer,0,len);

}

in.close();

out.close();

}

/**

* @see HttpServlet#doPost(HttpServletRequestrequest, HttpServletResponse response)

*/

protectedvoiddoPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODOAuto-generated method stub

doGet(request, response);

}

}


第三步:配置web.xml

<?xml version="1.0"encoding="UTF-8"?>

<web-app version="2.5"

xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<display-name></display-name>

<servlet>

<servlet-name>DownloadServlet</servlet-name>

<servlet-class>com.example.servlet.DownloadServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>DownloadServlet</servlet-name>

<url-pattern>/DownloadServlet</url-pattern>

</servlet-mapping>

<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

</web-app>


第四步:编写jsp页面(index.jsp)

<%@ page language="java" import="java.util.*"pageEncoding="UTF-8"%>

<%

Stringpath = request.getContextPath();

StringbasePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN">

<html>

<head>

<base href="<%=basePath%>">

<title>My JSP 'download.jsp' starting page</title>

<meta http-equiv="pragma"content="no-cache">

<meta http-equiv="cache-control"content="no-cache">

<meta http-equiv="expires"content="0">

<meta http-equiv="keywords"content="keyword1,keyword2,keyword3">

<meta http-equiv="description"content="This is my page">

<!--

<link rel="stylesheet"type="text/css" href="styles.css">

-->

</head>

<body>

<a href="DownloadServlet">

文件下载

</a>

</body>

</html>


第五步:Tomcat部署项目!运行下载!

原文发布于微信公众号 - java学习(javaxxf)

原文发表时间:2017-08-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏LIN_ZONE

thinkphp5中使用PHPExcel(转载)

你会发现项目的目录中在vendor的目录下多了一个文件夹(phpexcel),这个文件夹中的东西就是要使用的php中的Excel表格操作

1352
来自专栏尚国

S2-057远程代码执行漏洞复现过程

https://github.com/vulhub/vulhub/tree/master/struts2/s2-048

3723
来自专栏Golang语言社区

Go 标准库 http.FileServer 实现静态文件服务

访问 http://127.0.0.1:8080,即可看到类似 Nginx 中 autoindex 目录浏览功能。

1421
来自专栏安恒网络空间安全讲武堂

[HCTF] share write up

从http://share.2018.hctf.io/robots.txt中获取到题目部分源码

1012
来自专栏Hongten

Java Web servlet与cookie

在C:\Documents and Settings\Administrator\Cookies目录下面会有一个   hongten@webproject_co...

1133
来自专栏web编程技术分享

JavaScript : 浅讲ajax1.ajax入门案例

2235
来自专栏Android知识点总结

SpringBoot-12-之Ajax跨域访问全解析

3532
来自专栏微信公众号:Java团长

Java Web文件下载功能实现

但是这里会出现一个问题,就是单击下载压缩包的时候会弹出下载页面,但是下载图片的时候浏览器就直接打开了图片,没有下载。

4552
来自专栏10km的专栏

Windows下MSYS2中编译OpenBLAS过程记录

OpenBLAS(https://github.com/xianyi/OpenBLAS)目前已经提供了CMakeLists.txt,在Windows下可以通过c...

1.5K11
来自专栏pydata

hadoop 2.4.1 上安装spark 1.1.0

进入到http://localhost:port访问Ipython Notebook

1192

扫码关注云+社区

领取腾讯云代金券