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.
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
MIME-Typ (Dateityp) abrufen
Domänenobjekt (gibt Daten frei). aller Benutzer)
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!