[JAVA] Ein Beispielservlet zum Herunterladen von Excel.

Ich hatte die Möglichkeit, ein Servlet zu erstellen, das Excel herunterladen kann, und ich bin ziemlich begeistert, daher möchte ich ein Beispiel davon behalten. Apache POI wird verwendet, um Excel von Java aus zu betreiben, aber die Installationsmethode und die Verwendungsmethode werden weggelassen.

Erstellen Sie zunächst die Servlet-Klasse wie folgt.

package servlet;

import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Date;

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 org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
 *Ein Servlet, das Excel herunterlädt.
 * @author nekoTheShadow
 *
 */
@WebServlet("/download")
public class ExcelDownloadServlet extends HttpServlet {

	/**
	 *Zeigen Sie die Download-Seite an.
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.getRequestDispatcher("/WEB-INF/jsp/download.jsp").forward(request, response);
	}

	/**
	 *Generieren Sie Excel basierend auf den POST-Formulardaten und laden Sie es herunter.
	 * @throws UnsupportedEncodingException
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {

		//UTF den Zeichencode der Anfrage-In 8 konvertieren.
		request.setCharacterEncoding("UTF-8");

		//Holen Sie sich eine Anforderungsabfrage.
		String param1 = (String) request.getParameter("param1");
		String param2 = (String) request.getParameter("param2");
		String param3 = (String) request.getParameter("param3");

		//Dateinamen generieren:Der Dateiname ist das Download-Datum.
		SimpleDateFormat simpleDataFormat = new SimpleDateFormat("yyyy-MM-dd");
		String filename = simpleDataFormat.format(new Date()) + ".xlsx";

		//Legen Sie den Antwortheader fest.
		response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
		response.setHeader("content-disposition", String.format("attachment; filename=\"%s\"", filename));
		response.setCharacterEncoding("UTF-8");

		//Arbeitsmappen und Byte-Streams(Antwort)Generieren.
		//Diese beiden müssen geschlossen sein=> try-with-Verwenden Sie die Ressourcenanweisung.
		try (Workbook workbook = new XSSFWorkbook();
			 OutputStream outputStream = response.getOutputStream()) {

			//Generieren Sie ein Blatt:Eigentlich wird komplizierte Logik verwendet, aber diesmal ist es ein Beispiel, also werde ich es einfach halten.
			Sheet sheet = workbook.createSheet();
			sheet.createRow(1).createCell(1).setCellValue(param1);
			sheet.createRow(2).createCell(1).setCellValue(param2);
			sheet.createRow(3).createCell(1).setCellValue(param3);

			//Geben Sie die Arbeitsmappe als Antwort aus.
			workbook.write(outputStream);
		} catch (IOException e) {
			e.printStackTrace();
		}

	}


}

Die download.jsp, die beim nächsten Zugriff auf download angezeigt wird, lautet wie folgt. Platzieren Sie es direkt im Verzeichnis / WEB-INF / jsp.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
	<h1>Excel Download</h1>
	<form method="post" action="/excel/download">
		<p><label>Parameter 1:</label><input type="text" name="param1" /></p>
		<p><label>Parameter 2:</label><input type="text" name="param2" /></p>
		<p><label>Parameter 3:</label><input type="text" name="param3" /></p>

		<p><input type="submit" value="Download Excel" /></p>
	</form>
</body>
</html>

Nachdem Sie die erforderlichen Dateien vorbereitet, bereitgestellt und auf / download zugegriffen haben, sollte eine Seite wie die folgende angezeigt werden.

init.PNG

Geben Sie danach die Parameter ein und klicken Sie auf "Excel herunterladen", um die Excel-Datei herunterzuladen, deren Titel das Datum ist.

image

Wenn Sie die heruntergeladene Excel-Datei tatsächlich öffnen, können Sie feststellen, dass die Excel-Datei ordnungsgemäß und ohne Beschädigung erstellt wurde.

excel.PNG

Ist die Einstellung des Antwortheaders diesmal besonders wichtig? Um ehrlich zu sein, wird die im Inhaltstyp angegebene application / vnd.openxmlformats-officedocument.spreadsheetml.sheet selten gesehen, und das Attribut selbst, 'content-disposition', ist mir persönlich unbekannt. Es war ein Punkt.

//Legen Sie den Antwortheader fest.
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("content-disposition", String.format("attachment; filename=\"%s\"", filename));
response.setCharacterEncoding("UTF-8");

Recommended Posts

Ein Beispielservlet zum Herunterladen von Excel.
Ein einfaches Beispiel für ein Servlet, das Japanisch anzeigt
Was ist ein Servlet?
Ein einfaches CRUD-Beispiel mit Java Servlet / JSP und MySQL