Hello,

je bosse sur une servlet relativement basique et old-school.

Principe :

ma servlet est décomposée en deux parties :
  • au début du doGet, si mon paramètre "action" est null, on va dans un bloc if qui construit une page html via un response.getWriter()
  • sinon, si mon action!=null, c'est qu'on a soumis le formulaire précédemment généré, alors on execute un calcul qui génère un fichier, mon but étant d'afficher la popup de téléchargement de ce dit fichier


A l'heure actuelle, tout fonctionne jusqu'au moment ou je tente d'afficher le fichier pour téléchargement.


Voici ma classe :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
package fr.servlet;
 
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.InputStream;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
 
import org.apache.log4j.Logger;
import org.joda.time.DateTime;
 
import fr.bean.TypeRecherche;
import fr.servlet.CartographieHdd;
import fr.servlet.SimeServlet;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class CartoDonnees extends ServletGlobale {
 
	public Logger LOGGER = Logger.getLogger(CartoDonnees.class);
	public String util = new String("");
 
	private static String 	SQL_LISTE_FLUX = "select distinct NO_FLUX from T_PARAM_CARTO order by NO_FLUX";
	private static String 	SQL_LISTE_SOURCE = "select distinct NOM_SOURCE from T_PARAM_CARTO order by NOM_SOURCE";
	private static String 	SQL_LISTE_ECHANGE = "select distinct NO_ECHANGE from T_PARAM_CARTO order by NO_ECHANGE";
 
 
 
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws IOException, ServletException {
 
 
		try {
			String action = request.getParameter("action");
			LOGGER.info("action => " + action);
 
			// generation du tableau de resultats
			if (action != null && action.equals("download")) {
 
				LOGGER.info(request.getParameter("dateDebut"));
				LOGGER.info(request.getParameter("dateFin"));
				LOGGER.info(request.getParameter("typeRecherche"));
				LOGGER.info(request.getParameterValues("listeFlux"));
				LOGGER.info(request.getParameterValues("listeSource"));
				LOGGER.info(request.getParameterValues("listeEchange"));
 
				String strDateFin = request.getParameter("dateFin");
				String strDateDebut = request.getParameter("dateDebut");
 
				String[] listeValeurs = {};
				if(request.getParameterValues("listeFlux").length >0)
					listeValeurs = request.getParameterValues("listeFlux");
				else if(request.getParameterValues("listeSource").length >0)
					listeValeurs = request.getParameterValues("listeSource");
				else if(request.getParameterValues("listeEchange").length >0)
					listeValeurs = request.getParameterValues("listeEchange");
 
				Cartographie carto = new Cartographie();
				String nomZipSortie = carto.executer(strDateDebut, strDateFin, listeValeurs, request.getParameter("typeRecherche"));
 
					File file = new File(nomZipSortie);
					byte[] buf = new byte[1024];
					response.setContentType("application/zip");
					response.setHeader("Cache-Control", "cache");
					response.setHeader("Pragma", "cache");
					response.setHeader("Content-disposition",
							"attachment;filename=\"" + nomZipSortie + "\"");
					response.setContentLength((int) file.length());
					FileInputStream in = new FileInputStream(file);
					OutputStream out = response.getOutputStream();
					int count = 0;
					while ((count = in.read(buf)) >= 0) {
						out.write(buf, 0, count);
					}
					in.close();
					out.close();
 
					LOGGER.info("zip fini");
					return;
 
			// ihm de recherche ( accueil )	
			} else {
				PrintWriter out = response.getWriter();
				LOGGER.debug("creation connection ");
				Connection conn = getConnection();
 
				LOGGER.debug("creation statement ");
				Statement stmtDon = conn.createStatement();
 
 
				LOGGER.debug("debut exec requetes [SQL_LISTE_FLUX]");
				ResultSet rsetFlux = stmtDon.executeQuery(SQL_LISTE_FLUX);
				ArrayList<String> listeFlux = new ArrayList<String>();
				StringBuilder strListeFlux = new StringBuilder();
				while(rsetFlux.next()){
					listeFlux.add(rsetFlux.getString(1));
 
					strListeFlux.append("<option value=\"" + rsetFlux.getString(1)
					+ "\">" + rsetFlux.getString(1)
					+ "</option>");
				}
				LOGGER.debug("debut exec requetes [SQL_LISTE_SOURCE]");
				ResultSet rsetSource = stmtDon.executeQuery(SQL_LISTE_SOURCE);
				ArrayList<String> listeSource = new ArrayList<String>();
				StringBuilder strListeSource = new StringBuilder();
				while(rsetSource.next()){
					listeSource.add(rsetSource.getString(1));
 
					strListeSource.append("<option value=\"" + rsetSource.getString(1)
					+ "\">" + rsetSource.getString(1)
					+ "</option>");
				}
				LOGGER.debug("debut exec requetes [SQL_LISTE_ECHANGE]");
				ResultSet rsetEchange = stmtDon.executeQuery(SQL_LISTE_ECHANGE);
				ArrayList<String> listeEchange = new ArrayList<String>();
				StringBuilder strListeEchange = new StringBuilder();
				while(rsetEchange.next()){
					listeEchange.add(rsetEchange.getString(1));
 
					strListeEchange.append("<option value=\"" + rsetEchange.getString(1)
					+ "\">" + rsetEchange.getString(1)
					+ "</option>");
				}
 
				StringBuilder typesRecherche = new StringBuilder();
				int i=0;
				for (TypeRecherche type : TypeRecherche.values()) {
 
					if(i==0)
						typesRecherche.append("<input type=radio checked name=typeRecherche value=\"" + type.name()
								+ "\">" + type.getValeur().toLowerCase());
					else
						typesRecherche.append("<input type=radio name=typeRecherche value=\"" + type.name()
								+ "\">" + type.getValeur().toLowerCase());
 
					i++;
				}
 
				out.println("<html><head>");
				out.println("");
				out.println("<meta http-equiv =\"Content-Type\" content =\"text/html; charset =UTF-8\">");
				out.println("<!--[if IE ]>");
				out.println("<LINK rel=\"stylesheet\" type=\"text/css\" href=\"css/cartoDonneesIE.css\">");
				out.println("<![endif]-->");
				out.println("<!--[if !IE]> --><LINK rel=\"stylesheet\" type=\"text/css\" href=\"css/cartoDonnees.css\"><!-- <![endif]-->");
				out.println("<LINK rel=\"stylesheet\" type=\"text/css\" href=\"css/jquery-ui-smooth.css\">");
				out.println("<script type=\"text/javascript\" src=\"js/jquery-1.9.1.js\"></script>");
				out.println("<script src=\"js/jquery-ui-1.10.3.custom.min.js\"></script>");
				out.println("<script src=\"js/jquery.mask.min.js\"></script>");
				out.println("<script type=\"text/javascript\" src=\"js/jquery.ui.datepicker-fr.js\"></script>");
				out.println("<script type=\"text/javascript\" src=\"js/cartoDonnees.js\"></script>");
				out.print("</head><body>");
				out.print("<form name=\"formCartoDonnees\" method=POST action=\"CartoDonnees\" >");
				out.print("<input type=hidden name=action value=search />");
				out.print(""
						+ "<div id=\"legende\">"
						+ "<p>(*) Saisie Obligatoire</p>"
						+ "</div>"
						+
 
						"<div class=retraitGauche >"
						+ "<p>Date d&eacute;but :</p> "
						+ "<div class=champsRequis>*</div>"
						+ "<div><input type=text name=dateDebut /></div>"
						+ "</div>"
						+ "<div class=retraitGauche>"
						+ "<p>Date fin :</p> "
						+ "<div class=champsRequis >*</div>"
						+ "<div><input type=text name=dateFin /></div>"
						+ "</div>"
						+ "<div class=retraitGauche><p>Type de recherche :</p><div>"
						+ typesRecherche.toString()
						+"</div></div>"
						+"");
 
				out.println("<div id=listes>");
				out.println("<div class=retraitGauche><p>Liste des flux :</p><div><select name=listeFlux multiple=multiple size="+listeFlux.size()+">");
				out.println(strListeFlux.toString());
				out.println("</select></div></div>");
				out.println("<div class=retraitGauche><p>Liste des sources :</p><div><select name=listeSource multiple=multiple size="+listeSource.size()+">");
				out.println(strListeSource.toString());
				out.println("</select></div></div>");
				out.println("<div class=retraitGauche><p>Liste des &eacute;changes :</p><div><select name=listeEchange multiple=multiple size="+listeEchange.size()+">");
				out.println(strListeEchange.toString());
				out.println("</select></div></div>");
				out.println("</div>");
				//out.println("<br/>");
 
				out.println("<div id=boutons ><input type=button name=Executer value=\"Ex&eacute;cuter\" /></div>");
				out.println("</form>");
				out.println("</body></html>");
				out.flush();
				out.close();
				return;
			}
 
		} catch (Exception e) {
			PrintWriter out = response.getWriter();
			afficheException(out, e);
			out.flush();
			out.close();
			LOGGER.fatal("exception ", e);
			return;
		}
 
	}
 
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
 
 
	/**
	 * @return
	 * @throws SQLException
	 */
	public String getDriverManager() throws SQLException {
		DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
		String url = "jdbc:oracle:thin:@" + getProperty("rack");
		return url;
	}
 
	/**
	 * @return
	 * @throws SQLException
	 */
	public Connection getConnection() throws SQLException {
		String url = getDriverManager();
 
		Connection connDon = DriverManager.getConnection(url,
				getProperty("user"), getProperty("mdp"));
		return connDon;
	}
}

J'ai eut beau essayer de faire des
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
				out.flush();
				out.close();
				return;
Rien n'y fait, j'ai toujours la même erreur.



Vous avez une piste?