JSP文件下载:
servlet.java
package com.example.Test;
import org.apache.commons.io.IOUtils;
import sun.misc.BASE64Encoder;
import sun.nio.ch.IOUtil;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
@WebServlet(name = "TwoServlet", value = "/TwoServlet")
public class TwoServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//文件名
String fileName = "123.txt";
//通过servletcontext对象获取下载文件内容
ServletContext servletContext = getServletContext();
//获取下载的文件类型
String mimeType = servletContext.getMimeType("/" + fileName);
//回传前,设置响应头告诉客户端返回的数据类型
response.setContentType(mimeType);
//设置响应头,告诉客户端数据用于下载
//判断是否为Firefox浏览器(base64编码)
if (request.getHeader("User-Agent").contains("Firefox")){
response.setHeader("Content-Disposition","attachment; filename==?UTF-8?B?"+new BASE64Encoder().encode(fileName.getBytes("UTF-8"))+"?=");
}else {
response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName,"UTF-8"));
}
InputStream resourceAsStream = servletContext.getResourceAsStream("/" + fileName);
//获取响应的输出流
ServletOutputStream outputStream = response.getOutputStream();
//读取输入流的数据,复制给输出流,输出给客户端
IOUtils.copy(resourceAsStream,outputStream);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
}