Home  >  Article  >  Java  >  Introduction to SrvletContext object and implementation code for file download

Introduction to SrvletContext object and implementation code for file download

不言
不言Original
2018-09-27 14:30:442541browse

This article brings you an introduction to the SrvletContext object and the implementation code for file download. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.

ServletContext object

Life cycle (it can be seen from the life cycle that this is a global object)

Created when the project is started

Destroyed when the project is closed

Concept: Represents the entire web application and can communicate with the program's container (server).

Get

1. Obtain through request object: request.getServletContext();

2. Obtain through HttpServlet: this.getServletContext();

Function

File under web: getRealPath("/file name");

Under web/WEB-INF: getRealPath("/WEB-INF/file name");

Under src: getRealPath("/WEB-INF/classes/file name");

setAttribute(String name,Object obj)

getAttribute(String name)

removeAttribute(String name)

MIME type: A file data type defined during Internet communication

String getMimeType(String file): Judge the file based on its suffix name The type

format is: large type/small type

    1. Get the MIME type (type of file)

    2. Domain object (shares data for all users)

    3. Get the real (server) path of the file

    There is a way to implement file downloading There is a problem with Chinese garbled characters, so let’s start with a tool class

    package cn.itcast.utils;
    import sun.misc.BASE64Encoder;
    import java.io.UnsupportedEncodingException;
    import java.net.URLEncoder;
    public class DownLoadUtils {
        public static String getFileName(String agent, String filename) throws UnsupportedEncodingException {
            if (agent.contains("MSIE")) {
                // IE浏览器
                filename = URLEncoder.encode(filename, "utf-8");
                filename = filename.replace("+", " ");
            } else if (agent.contains("Firefox")) {
                // 火狐浏览器
                BASE64Encoder base64Encoder = new BASE64Encoder();
                filename = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
            } else {
                // 其它浏览器
                filename = URLEncoder.encode(filename, "utf-8");
            }
            return filename;
        }
    }

    The next step is the implementation of the servlet class:

    @WebServlet(name = "DownloadServlet",urlPatterns = "/download3")
    public class DownloadServlet extends HttpServlet {
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request,response);
        }
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // 1.获取文件名
            String filename = request.getParameter("filename");
            // 2.获取真实路径
            // 2.1 获取ServletContext
            ServletContext servletContext = this.getServletContext();
            // 2.2 根据文件存储的位置,选择路径,本人的路径是web下的upload下的文件
            String realPath = servletContext.getRealPath("/upload/" + filename);
            // 3.设置响应头
            // 3.1 设置content-type
            response.setHeader("content-type",servletContext.getMimeType(filename));
            // 3.2 解决中文乱码
            String agent = request.getHeader("user-agent");
            filename = DownLoadUtils.getFileName(agent,filename);
            // 3.3 设置content-disposition
            response.setHeader("content-disposition","attachment;filename=" + filename);
            // 4.标准的IO流
            FileInputStream fis = new FileInputStream(realPath);
            ServletOutputStream sos = response.getOutputStream();
            byte[] b = new byte[1024 * 8];
            int len = 0;
            while((len = fis.read(b)) != -1){
                sos.write(b,0,len);
            }
            fis.close();
            sos.close();
        }
    }

    The above is the detailed content of Introduction to SrvletContext object and implementation code for file download. For more information, please follow other related articles on the PHP Chinese website!

    Statement:
    The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn