Archives par mot-clé : HttpServletResponse

Produire un fichier CSV à partir d’une JSP

Les différences entre les navigateurs, mais aussi entre les numéros de version des navigateurs, sont la source de nombreux problèmes quand il s’agit de développer une fonction a priori simple. Produire un vulgaire fichier CSV à la volée via une JSP en est le parfait exemple : si l’on se contente d’écrire le contenu directement dans le flux de sortie out (e.g. « <%= maVariable %> » ), aucune version d’Internet Explorer antérieure à la 9 n’est en mesure de télécharger correctement le fichier produit. Pour ce faire, et ce n’est pas moi qui ai trouvé la solution mais mon chef *, il est nécessaire de passer par un StringBuffer et d’écrire l’ensemble du flux via le Writer de l’instance response.

<%@ page contentType="application/octet-stream" import="java.util.*, java.io.*" %><%
	response.setContentType("application/vnd.ms-excel");
	response.setHeader("Content-Disposition", "attachment; filename=\"donnees.csv\"");
	
	final String sep = ";"; // separateur de colonnes a la Excel
	final String crlf = "\r\n"; // fin de ligne a la ouin-ouin

	StringBuffer stringBuffer = new StringBuffer();
	
	stringBuffer.append("Chaine" + sep + "Nombre" + crlf);
	stringBuffer.append("\"Hello world\"" + sep + "123,45" + crlf);
	
	PrintWriter pw = response.getWriter();
	pw.println( stringBuffer.toString() );
%>

* Les chefs, c’est aussi fait pour ça !