annotate servlet/src/digilib/servlet/ServletOps.java @ 819:a23c4c15a6a8 stream

clean up possible resource leaks. better behaviour with unknown image types.
author robcast
date Mon, 21 Feb 2011 22:36:35 +0100
parents e6d0cdaa7923
children dc8cda290f2f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
181
afe7ff98bb71 Servlet version 1.18b1
robcast
parents: 95
diff changeset
1 /*
afe7ff98bb71 Servlet version 1.18b1
robcast
parents: 95
diff changeset
2 * ServletOps -- Servlet utility class
afe7ff98bb71 Servlet version 1.18b1
robcast
parents: 95
diff changeset
3 *
afe7ff98bb71 Servlet version 1.18b1
robcast
parents: 95
diff changeset
4 * Digital Image Library servlet components
afe7ff98bb71 Servlet version 1.18b1
robcast
parents: 95
diff changeset
5 *
afe7ff98bb71 Servlet version 1.18b1
robcast
parents: 95
diff changeset
6 * Copyright (C) 2001, 2002 Robert Casties (robcast@mail.berlios.de)
afe7ff98bb71 Servlet version 1.18b1
robcast
parents: 95
diff changeset
7 *
246
aaf6eace011d Servlet version 1.19b4
robcast
parents: 196
diff changeset
8 * This program is free software; you can redistribute it and/or modify it under
aaf6eace011d Servlet version 1.19b4
robcast
parents: 196
diff changeset
9 * the terms of the GNU General Public License as published by the Free Software
aaf6eace011d Servlet version 1.19b4
robcast
parents: 196
diff changeset
10 * Foundation; either version 2 of the License, or (at your option) any later
aaf6eace011d Servlet version 1.19b4
robcast
parents: 196
diff changeset
11 * version.
181
afe7ff98bb71 Servlet version 1.18b1
robcast
parents: 95
diff changeset
12 *
afe7ff98bb71 Servlet version 1.18b1
robcast
parents: 95
diff changeset
13 * Please read license.txt for the full details. A copy of the GPL may be found
afe7ff98bb71 Servlet version 1.18b1
robcast
parents: 95
diff changeset
14 * at http://www.gnu.org/copyleft/lgpl.html
afe7ff98bb71 Servlet version 1.18b1
robcast
parents: 95
diff changeset
15 *
afe7ff98bb71 Servlet version 1.18b1
robcast
parents: 95
diff changeset
16 * You should have received a copy of the GNU General Public License along with
afe7ff98bb71 Servlet version 1.18b1
robcast
parents: 95
diff changeset
17 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
afe7ff98bb71 Servlet version 1.18b1
robcast
parents: 95
diff changeset
18 * Place, Suite 330, Boston, MA 02111-1307 USA
afe7ff98bb71 Servlet version 1.18b1
robcast
parents: 95
diff changeset
19 *
afe7ff98bb71 Servlet version 1.18b1
robcast
parents: 95
diff changeset
20 */
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
21
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
22 package digilib.servlet;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
23
181
afe7ff98bb71 Servlet version 1.18b1
robcast
parents: 95
diff changeset
24 import java.io.File;
afe7ff98bb71 Servlet version 1.18b1
robcast
parents: 95
diff changeset
25 import java.io.FileInputStream;
afe7ff98bb71 Servlet version 1.18b1
robcast
parents: 95
diff changeset
26 import java.io.IOException;
afe7ff98bb71 Servlet version 1.18b1
robcast
parents: 95
diff changeset
27 import java.io.OutputStream;
afe7ff98bb71 Servlet version 1.18b1
robcast
parents: 95
diff changeset
28 import java.io.PrintWriter;
afe7ff98bb71 Servlet version 1.18b1
robcast
parents: 95
diff changeset
29 import java.util.StringTokenizer;
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
30
806
d811204ce5a4 Initialiser is now a ServletContextListener (doesn't need web.xml).
robcast
parents: 805
diff changeset
31 import javax.servlet.ServletContext;
570
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
32 import javax.servlet.ServletException;
181
afe7ff98bb71 Servlet version 1.18b1
robcast
parents: 95
diff changeset
33 import javax.servlet.http.HttpServletResponse;
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
34
181
afe7ff98bb71 Servlet version 1.18b1
robcast
parents: 95
diff changeset
35 import org.apache.log4j.Logger;
afe7ff98bb71 Servlet version 1.18b1
robcast
parents: 95
diff changeset
36
543
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
37 import digilib.image.DocuImage;
570
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
38 import digilib.image.ImageOpException;
181
afe7ff98bb71 Servlet version 1.18b1
robcast
parents: 95
diff changeset
39 import digilib.io.FileOps;
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
40
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
41 public class ServletOps {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
42
543
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
43 private static Logger logger = Logger.getLogger("servlet.op");
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
44
543
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
45 /**
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
46 * convert a string with a list of pathnames into an array of strings using
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
47 * the system's path seperator string
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
48 */
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
49 public static String[] getPathArray(String paths) {
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
50 // split list into directories
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
51 StringTokenizer dirs = new StringTokenizer(paths,
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
52 java.io.File.pathSeparator);
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
53 int n = dirs.countTokens();
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
54 if (n < 1) {
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
55 return null;
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
56 }
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
57 // add directories into array
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
58 String[] pathArray = new String[n];
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
59 for (int i = 0; i < n; i++) {
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
60 pathArray[i] = dirs.nextToken();
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
61 }
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
62 return pathArray;
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
63 }
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
64
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
65 /**
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
66 * get a real File for a web app File.
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
67 *
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
68 * If the File is not absolute the path is appended to the base directory of
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
69 * the web-app.
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
70 *
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
71 * @param file
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
72 * @param sc
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
73 * @return
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
74 */
806
d811204ce5a4 Initialiser is now a ServletContextListener (doesn't need web.xml).
robcast
parents: 805
diff changeset
75 public static File getFile(File f, ServletContext sc) {
543
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
76 // is the filename absolute?
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
77 if (!f.isAbsolute()) {
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
78 // relative path -> use getRealPath to resolve in WEB-INF
806
d811204ce5a4 Initialiser is now a ServletContextListener (doesn't need web.xml).
robcast
parents: 805
diff changeset
79 String fn = sc.getRealPath(f.getPath());
543
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
80 f = new File(fn);
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
81 }
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
82 return f;
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
83 }
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
84
543
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
85 /**
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
86 * get a real file name for a web app file pathname.
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
87 *
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
88 * If filename starts with "/" its treated as absolute else the path is
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
89 * appended to the base directory of the web-app.
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
90 *
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
91 * @param filename
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
92 * @param sc
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
93 * @return
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
94 */
806
d811204ce5a4 Initialiser is now a ServletContextListener (doesn't need web.xml).
robcast
parents: 805
diff changeset
95 public static String getFile(String filename, ServletContext sc) {
543
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
96 File f = new File(filename);
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
97 // is the filename absolute?
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
98 if (!f.isAbsolute()) {
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
99 // relative path -> use getRealPath to resolve in WEB-INF
806
d811204ce5a4 Initialiser is now a ServletContextListener (doesn't need web.xml).
robcast
parents: 805
diff changeset
100 filename = sc.getRealPath(filename);
543
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
101 }
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
102 return filename;
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
103 }
393
8a9fd4d64ea7 digilib can now take its error-icons from the web app
robcast
parents: 299
diff changeset
104
543
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
105 /**
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
106 * get a real File for a config File.
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
107 *
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
108 * If the File is not absolute the path is appended to the WEB-INF directory
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
109 * of the web-app.
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
110 *
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
111 * @param file
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
112 * @param sc
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
113 * @return
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
114 */
806
d811204ce5a4 Initialiser is now a ServletContextListener (doesn't need web.xml).
robcast
parents: 805
diff changeset
115 public static File getConfigFile(File f, ServletContext sc) {
543
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
116 String fn = f.getPath();
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
117 // is the filename absolute?
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
118 if (f.isAbsolute()) {
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
119 // does it exist?
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
120 if (f.canRead()) {
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
121 // fine
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
122 return f;
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
123 } else {
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
124 // try just the filename as relative
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
125 fn = f.getName();
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
126 }
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
127 }
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
128 // relative path -> use getRealPath to resolve in WEB-INF
806
d811204ce5a4 Initialiser is now a ServletContextListener (doesn't need web.xml).
robcast
parents: 805
diff changeset
129 String newfn = sc.getRealPath("WEB-INF/" + fn);
543
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
130 f = new File(newfn);
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
131 return f;
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
132 }
393
8a9fd4d64ea7 digilib can now take its error-icons from the web app
robcast
parents: 299
diff changeset
133
543
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
134 /**
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
135 * get a real file name for a config file pathname.
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
136 *
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
137 * If filename starts with "/" its treated as absolute else the path is
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
138 * appended to the WEB-INF directory of the web-app.
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
139 *
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
140 * @param filename
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
141 * @param sc
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
142 * @return
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
143 */
806
d811204ce5a4 Initialiser is now a ServletContextListener (doesn't need web.xml).
robcast
parents: 805
diff changeset
144 public static String getConfigFile(String filename, ServletContext sc) {
543
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
145 File f = new File(filename);
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
146 // is the filename absolute?
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
147 if (!f.isAbsolute()) {
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
148 // relative path -> use getRealPath to resolve in WEB-INF
806
d811204ce5a4 Initialiser is now a ServletContextListener (doesn't need web.xml).
robcast
parents: 805
diff changeset
149 filename = sc.getRealPath("WEB-INF/" + filename);
543
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
150 }
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
151 return filename;
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
152 }
264
4ea05660f3e0 Servlet version 1.21b1
robcast
parents: 246
diff changeset
153
543
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
154 /**
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
155 * print a servlet response and exit
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
156 */
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
157 public static void htmlMessage(String msg, HttpServletResponse response)
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
158 throws IOException {
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
159 htmlMessage("Scaler", msg, response);
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
160 }
246
aaf6eace011d Servlet version 1.19b4
robcast
parents: 196
diff changeset
161
543
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
162 /**
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
163 * print a servlet response and exit
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
164 */
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
165 public static void htmlMessage(String title, String msg,
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
166 HttpServletResponse response) throws IOException {
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
167 response.setContentType("text/html; charset=iso-8859-1");
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
168 PrintWriter out = response.getWriter();
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
169 out.println("<html>");
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
170 out.println("<head><title>" + title + "</title></head>");
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
171 out.println("<body>");
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
172 out.println("<p>" + msg + "</p>");
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
173 out.println("</body></html>");
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
174 }
246
aaf6eace011d Servlet version 1.19b4
robcast
parents: 196
diff changeset
175
543
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
176 /**
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
177 * Transfers an image file as-is with the mime type mt.
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
178 *
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
179 * The local file is copied to the <code>OutputStream</code> of the
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
180 * <code>ServletResponse</code>. If mt is null then the mime-type is
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
181 * auto-detected with mimeForFile.
572
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
182 *
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
183 * @param f
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
184 * Image file to be sent.
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
185 * @param mt
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
186 * mime-type of the file.
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
187 * @param name
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
188 * name of the download file (for application/x)
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
189 * @param res
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
190 * ServletResponse where the image file will be sent.
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
191 * @throws ImageOpException
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
192 * @throws ServletException
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
193 * Exception on sending data.
819
a23c4c15a6a8 clean up possible resource leaks. better behaviour with unknown image types.
robcast
parents: 816
diff changeset
194 * @throws IOException
572
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
195 */
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
196 public static void sendFile(File f, String mt, String name,
819
a23c4c15a6a8 clean up possible resource leaks. better behaviour with unknown image types.
robcast
parents: 816
diff changeset
197 HttpServletResponse response) throws ImageOpException, IOException {
572
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
198 // use default logger
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
199 ServletOps.sendFile(f, mt, name, response, ServletOps.logger);
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
200 }
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
201
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
202 /**
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
203 * Transfers an image file as-is with the mime type mt.
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
204 *
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
205 * The local file is copied to the <code>OutputStream</code> of the
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
206 * <code>ServletResponse</code>. If mt is null then the mime-type is
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
207 * auto-detected with mimeForFile.
557
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 544
diff changeset
208 * @param f
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 544
diff changeset
209 * Image file to be sent.
543
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
210 * @param mt
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
211 * mime-type of the file.
557
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 544
diff changeset
212 * @param name
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 544
diff changeset
213 * name of the download file (for application/x)
543
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
214 * @param res
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
215 * ServletResponse where the image file will be sent.
572
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
216 * @param logger
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
217 * Logger to use
570
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
218 * @throws ImageOpException
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
219 * @throws ServletException Exception on sending data.
819
a23c4c15a6a8 clean up possible resource leaks. better behaviour with unknown image types.
robcast
parents: 816
diff changeset
220 * @throws IOException
543
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
221 */
572
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
222 public static void sendFile(File f, String mt, String name, HttpServletResponse response, Logger logger)
819
a23c4c15a6a8 clean up possible resource leaks. better behaviour with unknown image types.
robcast
parents: 816
diff changeset
223 throws ImageOpException, IOException {
543
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
224 logger.debug("sendRawFile(" + mt + ", " + f + ")");
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
225 if (mt == null) {
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
226 // auto-detect mime-type
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
227 mt = FileOps.mimeForFile(f);
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
228 if (mt == null) {
570
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
229 throw new ImageOpException("Unknown file type.");
543
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
230 }
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
231 }
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
232 response.setContentType(mt);
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
233 // open file
557
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 544
diff changeset
234 if (mt.startsWith("application")) {
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 544
diff changeset
235 if (name == null) {
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 544
diff changeset
236 // no download name -- use filename
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 544
diff changeset
237 name = f.getName();
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 544
diff changeset
238 }
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 544
diff changeset
239 response.addHeader("Content-Disposition", "attachment; filename=\""+name+"\"");
543
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
240 }
803
225054177f67 remove all ServletOutputStream.flush(). (stupid me ;-)
robcast
parents: 572
diff changeset
241 FileInputStream inFile = null;
570
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
242 try {
803
225054177f67 remove all ServletOutputStream.flush(). (stupid me ;-)
robcast
parents: 572
diff changeset
243 inFile = new FileInputStream(f);
570
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
244 OutputStream outStream = response.getOutputStream();
803
225054177f67 remove all ServletOutputStream.flush(). (stupid me ;-)
robcast
parents: 572
diff changeset
245 // TODO: should we set content length?
225054177f67 remove all ServletOutputStream.flush(). (stupid me ;-)
robcast
parents: 572
diff changeset
246 // see http://www.prozesse-und-systeme.de/servletFlush.html
570
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
247 response.setContentLength( (int) f.length());
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
248 byte dataBuffer[] = new byte[4096];
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
249 int len;
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
250 while ((len = inFile.read(dataBuffer)) != -1) {
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
251 // copy out file
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
252 outStream.write(dataBuffer, 0, len);
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
253 }
803
225054177f67 remove all ServletOutputStream.flush(). (stupid me ;-)
robcast
parents: 572
diff changeset
254 } finally {
225054177f67 remove all ServletOutputStream.flush(). (stupid me ;-)
robcast
parents: 572
diff changeset
255 try {
225054177f67 remove all ServletOutputStream.flush(). (stupid me ;-)
robcast
parents: 572
diff changeset
256 if (inFile != null) {
225054177f67 remove all ServletOutputStream.flush(). (stupid me ;-)
robcast
parents: 572
diff changeset
257 inFile.close();
225054177f67 remove all ServletOutputStream.flush(). (stupid me ;-)
robcast
parents: 572
diff changeset
258 }
225054177f67 remove all ServletOutputStream.flush(). (stupid me ;-)
robcast
parents: 572
diff changeset
259 } catch (IOException e) {
225054177f67 remove all ServletOutputStream.flush(). (stupid me ;-)
robcast
parents: 572
diff changeset
260 // nothing to do
225054177f67 remove all ServletOutputStream.flush(). (stupid me ;-)
robcast
parents: 572
diff changeset
261 }
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
262 }
543
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
263 }
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
264
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
265 /**
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
266 * Write image img to ServletResponse response.
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
267 *
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
268 * @param img
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
269 * @param mimeType
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
270 * @param response
570
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
271 * @throws ImageOpException
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
272 * @throws ServletException Exception on sending data.
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
273 */
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
274 public static void sendImage(DocuImage img, String mimeType,
570
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
275 HttpServletResponse response) throws ImageOpException,
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
276 ServletException {
572
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
277 ServletOps.sendImage(img, mimeType, response, ServletOps.logger);
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
278 }
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
279
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
280 /**
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
281 * Write image img to ServletResponse response.
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
282 *
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
283 * @param img
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
284 * @param mimeType
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
285 * @param response
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
286 * @param logger
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
287 * @throws ImageOpException
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
288 * @throws ServletException Exception on sending data.
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
289 */
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
290 public static void sendImage(DocuImage img, String mimeType,
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
291 HttpServletResponse response, Logger logger) throws ImageOpException,
800f2bb57f1f slightly better logging
robcast
parents: 570
diff changeset
292 ServletException {
805
5591163f47ee corrected typo. upped default quality.
robcast
parents: 804
diff changeset
293 logger.debug("sending to response:"+ response + " committed=" + response.isCommitted());
570
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
294 try {
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
295 OutputStream outstream = response.getOutputStream();
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
296 // setup output -- if mime type is set use that otherwise
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
297 // if source is JPG then dest will be JPG else it's PNG
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
298 if (mimeType == null) {
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
299 mimeType = img.getMimetype();
819
a23c4c15a6a8 clean up possible resource leaks. better behaviour with unknown image types.
robcast
parents: 816
diff changeset
300 if (mimeType == null) {
a23c4c15a6a8 clean up possible resource leaks. better behaviour with unknown image types.
robcast
parents: 816
diff changeset
301 // still no mime-type
a23c4c15a6a8 clean up possible resource leaks. better behaviour with unknown image types.
robcast
parents: 816
diff changeset
302 logger.warn("sendImage without mime-type! using image/jpeg.");
a23c4c15a6a8 clean up possible resource leaks. better behaviour with unknown image types.
robcast
parents: 816
diff changeset
303 mimeType = "image/jpeg";
a23c4c15a6a8 clean up possible resource leaks. better behaviour with unknown image types.
robcast
parents: 816
diff changeset
304 }
570
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
305 }
819
a23c4c15a6a8 clean up possible resource leaks. better behaviour with unknown image types.
robcast
parents: 816
diff changeset
306 if ((mimeType.equals("image/jpeg") || mimeType.equals("image/jp2") ||
a23c4c15a6a8 clean up possible resource leaks. better behaviour with unknown image types.
robcast
parents: 816
diff changeset
307 mimeType.equals("image/fpx"))) {
570
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
308 mimeType = "image/jpeg";
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
309 } else {
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
310 mimeType = "image/png";
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
311 }
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
312 // write the image
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
313 response.setContentType(mimeType);
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
314 img.writeImage(mimeType, outstream);
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
315 } catch (IOException e) {
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 557
diff changeset
316 throw new ServletException("Error sending image:", e);
543
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
317 }
803
225054177f67 remove all ServletOutputStream.flush(). (stupid me ;-)
robcast
parents: 572
diff changeset
318 // TODO: should we: finally { img.dispose(); }
543
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 524
diff changeset
319 }
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
320
246
aaf6eace011d Servlet version 1.19b4
robcast
parents: 196
diff changeset
321 }