[JAVA] Un exemple de servlet pour télécharger Excel.

J'ai eu l'occasion de créer un servlet que Excel peut télécharger, et j'y suis assez intéressé, alors j'aimerais en garder un échantillon. Apache POI est utilisé pour faire fonctionner Excel à partir de Java, mais la méthode d'installation et la méthode d'utilisation sont omises.

Commencez par créer la classe Servlet comme suit.

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;

/**
 *Un servlet qui télécharge Excel.
 * @author nekoTheShadow
 *
 */
@WebServlet("/download")
public class ExcelDownloadServlet extends HttpServlet {

	/**
	 *Affichez la page de téléchargement.
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.getRequestDispatcher("/WEB-INF/jsp/download.jsp").forward(request, response);
	}

	/**
	 *Générez Excel en fonction des données du formulaire POSTÉ et téléchargez-le.
	 * @throws UnsupportedEncodingException
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {

		//UTF le code de caractère de la requête-Convertissez en 8.
		request.setCharacterEncoding("UTF-8");

		//Obtenez une requête de requête.
		String param1 = (String) request.getParameter("param1");
		String param2 = (String) request.getParameter("param2");
		String param3 = (String) request.getParameter("param3");

		//Générer le nom du fichier:Le nom du fichier est la date de téléchargement.
		SimpleDateFormat simpleDataFormat = new SimpleDateFormat("yyyy-MM-dd");
		String filename = simpleDataFormat.format(new Date()) + ".xlsx";

		//Définissez l'en-tête de la réponse.
		response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
		response.setHeader("content-disposition", String.format("attachment; filename=\"%s\"", filename));
		response.setCharacterEncoding("UTF-8");

		//Classeurs et flux d'octets(réponse)Générer.
		//Ces deux doivent être fermés=> try-with-Utiliser la déclaration de ressources,
		try (Workbook workbook = new XSSFWorkbook();
			 OutputStream outputStream = response.getOutputStream()) {

			//Générer une feuille:En fait, une logique compliquée est utilisée, mais cette fois c'est un exemple, je vais donc rester simple.
			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);

			//Sortez le classeur dans la réponse.
			workbook.write(outputStream);
		} catch (IOException e) {
			e.printStackTrace();
		}

	}


}

Le download.jsp qui sera affiché la prochaine fois que vous accéderez à download est le suivant. Placez-le directement sous le répertoire / 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>Paramètre 1:</label><input type="text" name="param1" /></p>
		<p><label>Paramètre 2:</label><input type="text" name="param2" /></p>
		<p><label>Paramètre 3:</label><input type="text" name="param3" /></p>

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

Après avoir préparé les fichiers nécessaires, déployez et accédez à / download, vous devriez voir une page comme celle-ci.

init.PNG

Après cela, entrez les paramètres et appuyez sur Télécharger Excel pour télécharger le fichier Excel dont le titre est la date.

image

Et lorsque vous ouvrez réellement le fichier Excel téléchargé, vous pouvez voir que le fichier Excel est créé correctement sans aucun dommage.

excel.PNG

Le paramètre d'en-tête de réponse est-il particulièrement important cette fois? Honnêtement, le ʻapplication / vnd.openxmlformats-officedocument.spreadsheetml.sheetspécifié dans le type de contenu est rarement vu, et l'attribut lui-même,content-disposition`, ne m'est pas familier personnellement, et je me suis coincé dedans. C'était un point.

//Définissez l'en-tête de la réponse.
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("content-disposition", String.format("attachment; filename=\"%s\"", filename));
response.setCharacterEncoding("UTF-8");

Recommended Posts

Un exemple de servlet pour télécharger Excel.
Un exemple simple de servlet qui affiche le japonais
Qu'est-ce qu'un servlet?
Un exemple CRUD simple utilisant Java Servlet / JSP et MySQL