annotate servlet/src/digilib/servlet/ServletOps.java @ 95:a82150544f4a

New version 1.8b4. Uses new Collection classes.
author robcast
date Mon, 17 Mar 2003 16:07:05 +0100
parents 3b8797fc3e90
children afe7ff98bb71
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
1 /* ServletOps -- Servlet utility class
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
2
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
3 Digital Image Library servlet components
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
4
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
5 Copyright (C) 2001, 2002 Robert Casties (robcast@mail.berlios.de)
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
6
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
7 This program is free software; you can redistribute it and/or modify it
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
9 Free Software Foundation; either version 2 of the License, or (at your
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
10 option) any later version.
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
11
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
12 Please read license.txt for the full details. A copy of the GPL
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
13 may be found at http://www.gnu.org/copyleft/lgpl.html
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
14
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
15 You should have received a copy of the GNU General Public License
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
16 along with this program; if not, write to the Free Software
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
18
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
19 */
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
20
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
21 package digilib.servlet;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
22
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
23 import javax.servlet.*;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
24 import javax.servlet.http.*;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
25 import java.io.*;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
26 import java.util.*;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
27
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
28 import digilib.*;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
29 import digilib.io.*;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
30
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
31
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
32 public class ServletOps {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
33
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
34 private Utils util = null;
95
a82150544f4a New version 1.8b4.
robcast
parents: 73
diff changeset
35 private HashMap confTable = null;
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
36
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
37 public ServletOps() {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
38 util = new Utils();
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
39 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
40
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
41 public ServletOps(Utils u) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
42 util = u;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
43 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
44
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
45 public ServletOps(Utils u, ServletConfig sc) throws ServletException {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
46 util = u;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
47 setConfig(sc);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
48 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
49
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
50 public void setUtils(Utils u) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
51 util = u;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
52 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
53
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
54 /**
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
55 * read parameter list from the XML file in init parameter "config-file"
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
56 */
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
57 public void setConfig(ServletConfig c) throws ServletException {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
58 // reset parameter table
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
59 confTable = null;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
60 if (c == null) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
61 return;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
62 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
63 // get config file name
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
64 String fn = c.getInitParameter("config-file");
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
65 if (fn == null) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
66 util.dprintln(4, "setConfig: no param config-file");
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
67 return;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
68 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
69 File f = new File(fn);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
70 // setup config file list reader
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
71 XMLListLoader lilo = new XMLListLoader("digilib-config", "parameter", "name", "value");
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
72 try {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
73 confTable = lilo.loadURL(f.toURL().toString());
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
74 } catch (Exception e) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
75 util.dprintln(4, "setConfig: unable to read file "+fn);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
76 throw new ServletException(e);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
77 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
78 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
79
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
80 /**
56
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
81 * convert a string with a list of pathnames into an array of strings
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
82 * using the system's path seperator string
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
83 */
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
84 public String[] getPathArray(String paths) {
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
85 // split list into directories
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
86 StringTokenizer dirs = new StringTokenizer(paths, java.io.File.pathSeparator);
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
87 int n = dirs.countTokens();
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
88 if (n < 1) {
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
89 return null;
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
90 }
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
91 // add directories into array
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
92 String[] pathArray = new String[n];
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
93 for (int i = 0; i < n; i++) {
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
94 pathArray[i] = dirs.nextToken();
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
95 }
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
96 return pathArray;
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
97 }
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
98
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
99 /**
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
100 * getPathArray with default fall back
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
101 */
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
102 public String[] tryToGetPathArray(String paths, String[] defaultPath) {
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
103 String[] pa = getPathArray(paths);
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
104 return (pa != null) ? pa : defaultPath;
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
105 }
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
106
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
107 /**
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
108 * print a servlet response and exit
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
109 */
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
110 public static void htmlMessage(String s, HttpServletResponse response) throws IOException {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
111 response.setContentType("text/html; charset=iso-8859-1");
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
112 PrintWriter out = response.getWriter();
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
113 out.println("<html>");
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
114 out.println("<head><title>Scaler</title></head>");
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
115 out.println("<body>");
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
116 out.println("<p>"+s+"</p>");
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
117 out.println("</body></html>");
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
118 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
119
73
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
120 /** Transfers an image file as-is.
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
121 *
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
122 * The local file is copied to the <code>OutputStream</code> of the
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
123 * <code>ServletResponse</code>. The mime-type for the response is detected
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
124 * from the file.
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
125 *
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
126 * @param f Image file to be sent.
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
127 * @param res ServletResponse where the image file will be sent.
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
128 * @throws FileOpException Exception is thrown for a IOException.
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
129 */
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
130 public void sendFile(File f, ServletResponse response) throws FileOpException {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
131 util.dprintln(4, "sendFile("+f+")");
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
132 String mimeType = FileOps.mimeForFile(f);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
133 if (mimeType == null) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
134 util.dprintln(2, "ERROR(sendFile): unknown file Type");
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
135 throw new FileOpException("Unknown file type.");
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
136 }
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
137 response.setContentType(mimeType);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
138 // open file
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
139 try {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
140 FileInputStream inFile = new FileInputStream(f);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
141 OutputStream outStream = response.getOutputStream();
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
142 byte dataBuffer[] = new byte[4096];
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
143 int len;
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
144 while ((len = inFile.read(dataBuffer)) != -1) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
145 // copy out file
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
146 outStream.write(dataBuffer, 0, len);
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
147 }
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
148 inFile.close();
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
149 } catch (IOException e) {
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
150 util.dprintln(2, "ERROR(sendFile): unable to send file");
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
151 throw new FileOpException("Unable to send file.");
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
152 }
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
153 }
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
154
3b8797fc3e90 New servlet version 1.5b.
robcast
parents: 56
diff changeset
155
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
156 /**
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
157 * get a parameter from request and return it if set, otherwise return default
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
158 */
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
159 public int tryToGetParam(String s, int i, HttpServletRequest r) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
160 try {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
161 i = Integer.parseInt(r.getParameter(s));
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
162 } catch(Exception e) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
163 util.dprintln(4, "trytoGetParam(int) failed on param "+s);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
164 //e.printStackTrace();
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
165 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
166 return i;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
167 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
168 public float tryToGetParam(String s, float f, HttpServletRequest r) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
169 try {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
170 f = Float.parseFloat(r.getParameter(s));
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
171 } catch(Exception e) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
172 util.dprintln(4, "trytoGetParam(float) failed on param "+s);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
173 //e.printStackTrace();
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
174 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
175 return f;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
176 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
177 public String tryToGetParam(String s, String x, HttpServletRequest r) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
178 if (r.getParameter(s) != null) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
179 x = r.getParameter(s);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
180 } else {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
181 util.dprintln(4, "trytoGetParam(string) failed on param "+s);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
182 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
183 return x;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
184 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
185
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
186
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
187 /**
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
188 * get an init parameter from config and return it if set, otherwise return default
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
189 */
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
190 public int tryToGetInitParam(String s, int i) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
191 //System.out.println("trytogetInitParam("+s+", "+i+")");
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
192 try {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
193 //System.out.println("trytogetInitParam: "+(String)confTable.get(s));
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
194 i = Integer.parseInt((String)confTable.get(s));
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
195 } catch(Exception e) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
196 util.dprintln(4, "trytogetInitParam(int) failed on param "+s);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
197 //e.printStackTrace();
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
198 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
199 return i;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
200 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
201 public float tryToGetInitParam(String s, float f) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
202 try {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
203 f = Float.parseFloat((String)confTable.get(s));
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
204 } catch(Exception e) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
205 util.dprintln(4, "trytoGetInitParam(float) failed on param "+s);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
206 //e.printStackTrace();
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
207 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
208 return f;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
209 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
210 public String tryToGetInitParam(String s, String x) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
211 if ((confTable != null)&&((String)confTable.get(s) != null)) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
212 x = (String)confTable.get(s);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
213 } else {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
214 util.dprintln(4, "trytoGetInitParam(string) failed on param "+s);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
215 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
216 return x;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
217 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
218
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
219 }