Heim  >  Artikel  >  Java  >  Einführung in das SrvletContext-Objekt und den Implementierungscode zum Herunterladen von Dateien

Einführung in das SrvletContext-Objekt und den Implementierungscode zum Herunterladen von Dateien

不言
不言Original
2018-09-27 14:30:442523Durchsuche

Dieser Artikel bietet Ihnen eine Einführung in das SrvletContext-Objekt und den Implementierungscode zum Herunterladen von Dateien. Ich hoffe, dass er für Sie hilfreich ist.

ServletContext-Objekt

Lebenszyklus (aus dem Lebenszyklus ist ersichtlich, dass es sich um ein globales Objekt handelt)

Erstellt, wenn das Projekt gestartet wird

Wird zerstört, wenn das Projekt geschlossen wird

Konzept: Stellt die gesamte Webanwendung dar und kann mit dem Container (Server) des Programms kommunizieren.

Abrufen

1. Abruf über Anforderungsobjekt: request.getServletContext();

Abruf über HttpServlet: this.getServletContext();

Funktion

Datei unter Web: getRealPath("/filename");

Unter Web/WEB-INF: getRealPath("/WEB-INF/filename");

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

setAttribute(String name,Object obj)

getAttribute(String name)

removeAttribute (String-Name)

MIME-Typ: Ein im Internet-Kommunikationsprozess definierter Dateidatentyp

String getMimeType(String-Datei): Bestimmen Sie die Datei anhand ihres Suffixnamens. Der Typ

Format ist: großer Typ/kleiner Typ

    1. MIME-Typ (Dateityp) abrufen

    2. Domänenobjekt (gibt Daten frei). aller Benutzer)

    3. Den tatsächlichen (Server-)Pfad der Datei abrufen

    Es gibt eine Möglichkeit, das Herunterladen von Dateien zu implementieren ist ein Problem mit verstümmelten chinesischen Zeichen, also beginnen wir mit einer Tool-Klasse

    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;
        }
    }

    und dann der Implementierung der Servlet-Klasse:

    @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();
        }
    }

    Das obige ist der detaillierte Inhalt vonEinführung in das SrvletContext-Objekt und den Implementierungscode zum Herunterladen von Dateien. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn