Mercurial > hg > digilib-old
annotate servlet3/src/main/java/digilib/servlet/ServletOps.java @ 1070:27ee06879f14
finished slider preview
| author | hertzhaft |
|---|---|
| date | Mon, 23 Apr 2012 09:31:57 +0200 |
| 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 } |
