一、前言
我们这里要说的文件下载是包括word文档、Excel表格、PPT、image图片的下载,因为我们是基于JavaWeb实现的,所以web前端的界面是在JSP中实现的,而后台的响应是通过Servlet来实现的。所以我们先简单了解一下Servlet。
二、Servlet
Servlet 其实是由tomcat服务器来进行创建的,因为我们实现的是文件下载,所以离不开一个关键词ServletConfig,它是Servlet的配置对象 ,实现GenericServlet接口,它主要可用用来获取Servlet的Name及Servlet当中的配置参数。
三、代码实现
话不多说我们来看代码:
先对Servlet的配置文件进行配置(web.xml)
<servlet>
<servlet-name>SecondServlet</servlet-name>
<servlet-class>com.DJX.Servlet.SecondServlet</servlet-class>
<init-param>
<param-name>SecondServlet</param-name>
<param-value>C:\Users\admin\Desktop\《算法分析》计算机类实验报告册.doc</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>SecondServlet</servlet-name>
<url-pattern>/SecondServlet.do</url-pattern>
</servlet-mapping>前端文件的代码(index.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文件下载</title>
</head>
<body>
<a href="SecondServlet.do">下载word</a>
</body>
</html>Servlet文件的代码
package com.DJX.Servlet;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class SecondServlet
*/
public class SecondServlet extends HttpServlet {
String path="";
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
this.path = config.getInitParameter("SecondServlet");
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("application/msword");
InputStream is = new FileInputStream(path);
byte[] b = new byte[is.available()];
is.read(b);
ServletOutputStream sos = response.getOutputStream();
sos.write(b);
sos.flush();
sos.close();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}效果展示:


注意:
Word excel ppt pdf 文件 类似于这种,不需要加入响应头
如果是图片 必须要加入响应头
String filename = request.getParameter("filename");
response.addHeader("Content-Disposition","attachment;filename=/"+filename);
先对Servlet的配置文件进行配置(web.xml)
<servlet>
<servlet-name>SecondServlet</servlet-name>
<servlet-class>com.DJX.Servlet.SecondServlet</servlet-class>
<init-param>
<param-name>SecondServlet</param-name>
<param-value>C:\Users\admin\Desktop\7\1535428712441.jpeg</param-value>
</init-param>
</servlet>前端文件的代码(index.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文件下载</title>
</head>
<body>
<a href="SecondServlet.do">下载图片</a>
</body>
</html>Servlet文件的代码
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class SecondServlet
*/
public class SecondServlet extends HttpServlet {
String path="";
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
this.path = config.getInitParameter("SecondServlet");
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("image/jpeg");
response.addHeader("Content-Disposition","attachment;filename=/"+path);
InputStream is = new FileInputStream(path);
byte[] b = new byte[is.available()];
is.read(b);
ServletOutputStream sos = response.getOutputStream();
sos.write(b);
sos.flush();
sos.close();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
效果展示:


版权声明:本文为qq_48241564原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。