JavaWeb实现文件下载

一、前言

我们这里要说的文件下载是包括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版权协议,转载请附上原文出处链接和本声明。