要求功能:点击下载链接,下载点击的文件
1.创建一个javaweb项目
2.创建一个简洁的jsp页面
<%-- Created by IntelliJ IDEA. User: Administrator Date: 2017/12/5 Time: 11:36 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <form id="form" name="form" method="post" enctype="multipart/form-data" action="uploadServlet.do" > 上传的文件:<input id="file" name="file" type="file"/> <button type="submit" name="btn" id="btn">提交</button></br>${result} </br> 下载:<a href="downloadServlet.do?filename=${filename}" >${filename}</a>${errorresult} </form> </body> </html>
3.创建servlet
package com.zj.servlet; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.net.URLEncoder; @WebServlet(name = "downloadServlet") public class downloadServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取下载文件的名称 String filename=request.getParameter("filename"); //获取文件下载的路径 String path="E:/tempfiles/"; //创建下载文件 File downloadfile=new File(path+filename); //判断文件是否存在 if (downloadfile.exists()){ //设置文件的相应类型(另一种文件相应类型:application/octet-stream) response.setContentType("application/x-msdownload"); response.setContentType("application/vnd.ms-excel;charset=uft-8"); //设置头信息,URLEncoder.encode(filename,"utf-8")可以解决文件名乱码 response.setHeader("Content-Disposition","attachment;filename=\""+URLEncoder.encode(filename,"utf-8")+"\""); //获取文件的输入流 InputStream inputStream=new FileInputStream(downloadfile); //获取文件的输出流 OutputStream outputStream=response.getOutputStream(); //按字节循环读写内容 byte[] bytes=new byte[1024]; int n; while ((n=inputStream.read(bytes))!=-1){ outputStream.write(bytes,0,n); } //关闭输入输出流 outputStream.close(); inputStream.close(); //返回给页面的信息 request.setAttribute("errorresult","下载完成!!"); RequestDispatcher requestDispatcher=request.getRequestDispatcher("/01.jsp"); requestDispatcher.forward(request,response); }else { request.setAttribute("errorresult","文件下载路径错误!!"); RequestDispatcher requestDispatcher=request.getRequestDispatcher("/01.jsp"); requestDispatcher.forward(request,response); } } }
4.配置web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <servlet> <servlet-name>uploadServlet</servlet-name> <servlet-class>com.zj.servlet.uploadServlet</servlet-class> </servlet> <servlet> <servlet-name>downloadServlet</servlet-name> <servlet-class>com.zj.servlet.downloadServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>uploadServlet</servlet-name> <url-pattern>/uploadServlet.do</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>downloadServlet</servlet-name> <url-pattern>/downloadServlet.do</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>01.jsp</welcome-file> </welcome-file-list> </web-app>