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