Mercurial Hosting > luan
comparison web/src/luan/modules/web/HttpServicer.java @ 362:9dbf3433f70f
remove Http.request.get_parameter_values and Http.request.parts;
multiple parameter values are now directly returned from indexing Http.request.parameters;
multipart values are now in parameters;
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Wed, 15 Apr 2015 20:33:47 -0600 |
parents | 0581238084ad |
children | a8d03e6882c6 |
comparison
equal
deleted
inserted
replaced
361:0581238084ad | 362:9dbf3433f70f |
---|---|
121 LuanTable tbl = Luan.newPropertyTable(); | 121 LuanTable tbl = Luan.newPropertyTable(); |
122 tbl.put("java",request); | 122 tbl.put("java",request); |
123 LuanTable parameters = new NameTable() { | 123 LuanTable parameters = new NameTable() { |
124 | 124 |
125 @Override Object get(String name) { | 125 @Override Object get(String name) { |
126 return request.getParameter(name); | 126 String[] a = request.getParameterValues(name); |
127 return a==null ? null : a.length==1 ? a[0] : a; | |
127 } | 128 } |
128 | 129 |
129 @Override Iterator<String> names() { | 130 @Override Iterator<String> names() { |
130 return new EnumerationIterator<String>(request.getParameterNames()); | 131 return new EnumerationIterator<String>(request.getParameterNames()); |
131 } | 132 } |
133 @Override protected String type() { | 134 @Override protected String type() { |
134 return "request.parameters-table"; | 135 return "request.parameters-table"; |
135 } | 136 } |
136 }; | 137 }; |
137 tbl.put( "parameters", parameters ); | 138 tbl.put( "parameters", parameters ); |
138 add( tbl, "get_parameter_values", String.class ); | |
139 LuanTable headers = new NameTable() { | 139 LuanTable headers = new NameTable() { |
140 | 140 |
141 @Override Object get(String name) { | 141 @Override Object get(String name) { |
142 return request.getHeader(name); | 142 return request.getHeader(name); |
143 } | 143 } |
214 try { | 214 try { |
215 InputStream in = new BufferedInputStream(request.getInputStream()); | 215 InputStream in = new BufferedInputStream(request.getInputStream()); |
216 final MultiPartInputStream mpis = new MultiPartInputStream(in,contentType,null,null); | 216 final MultiPartInputStream mpis = new MultiPartInputStream(in,contentType,null,null); |
217 mpis.setDeleteOnExit(true); | 217 mpis.setDeleteOnExit(true); |
218 parameters = Luan.newTable(); | 218 parameters = Luan.newTable(); |
219 LuanTable parts = Luan.newTable(); | |
220 for( Part p : mpis.getParts() ) { | 219 for( Part p : mpis.getParts() ) { |
221 final MultiPartInputStream.MultiPart part = (MultiPartInputStream.MultiPart)p; | 220 final MultiPartInputStream.MultiPart part = (MultiPartInputStream.MultiPart)p; |
222 String name = part.getName(); | 221 String name = part.getName(); |
222 Object value; | |
223 String filename = part.getContentDispositionFilename(); | 223 String filename = part.getContentDispositionFilename(); |
224 if( filename == null ) { | 224 if( filename == null ) { |
225 String value = new String(part.getBytes()); | 225 value = new String(part.getBytes()); |
226 parameters.put(name,value); | |
227 } else { | 226 } else { |
228 LuanTable partTbl = Luan.newPropertyTable(); | 227 LuanTable partTbl = Luan.newPropertyTable(); |
229 partTbl.put("filename",filename); | 228 partTbl.put("filename",filename); |
230 partTbl.put("content_type",part.getContentType()); | 229 partTbl.put("content_type",part.getContentType()); |
231 partTbl.put( "content", new LuanProperty() { public Object get() { | 230 partTbl.put( "content", new LuanProperty() { public Object get() { |
236 return content; | 235 return content; |
237 } catch(IOException e) { | 236 } catch(IOException e) { |
238 throw new RuntimeException(e); | 237 throw new RuntimeException(e); |
239 } | 238 } |
240 } } ); | 239 } } ); |
241 parts.put(name,partTbl); | 240 value = partTbl; |
242 } | 241 } |
242 Object old = parameters.get(name); | |
243 if( old == null ) { | |
244 parameters.put(name,value); | |
245 } else if( old instanceof Object[] ) { | |
246 Object[] aOld = (Object[])old; | |
247 Object[] aNew = new Object[aOld.length+1]; | |
248 System.arraycopy(aOld,0,aNew,0,aOld.length); | |
249 aNew[aOld.length] = value; | |
250 parameters.put(name,aNew); | |
251 } else { | |
252 parameters.put(name,new Object[]{old,value}); | |
253 } | |
243 } | 254 } |
244 tbl.put( "parameters", parameters ); | 255 tbl.put( "parameters", parameters ); |
245 tbl.put( "parts", parts ); | |
246 } catch(IOException e) { | 256 } catch(IOException e) { |
247 throw new RuntimeException(e); | 257 throw new RuntimeException(e); |
248 } catch(ServletException e) { | 258 } catch(ServletException e) { |
249 throw new RuntimeException(e); | 259 throw new RuntimeException(e); |
250 } | 260 } |
350 } | 360 } |
351 } | 361 } |
352 */ | 362 */ |
353 public LuanTable text_writer() throws IOException { | 363 public LuanTable text_writer() throws IOException { |
354 return IoLuan.textWriter(response.getWriter()); | 364 return IoLuan.textWriter(response.getWriter()); |
355 } | |
356 | |
357 public LuanTable get_parameter_values(String name) { | |
358 Object[] a = request.getParameterValues(name); | |
359 return a==null ? null : TableLuan.pack(a); | |
360 } | 365 } |
361 | 366 |
362 public void send_redirect(String redirectUrl) | 367 public void send_redirect(String redirectUrl) |
363 throws IOException | 368 throws IOException |
364 { | 369 { |