JETTY-1121 Merge Multipart query parameters
git-svn-id: svn+ssh://dev.eclipse.org/svnroot/rt/org.eclipse.jetty/jetty/trunk@993 7e9141cc-0065-0410-87d8-b60c137991c4
This commit is contained in:
parent
b5d16898e5
commit
298182f737
23
VERSION.txt
23
VERSION.txt
|
@ -1,24 +1,25 @@
|
|||
jetty-7.0.1-SNAPSHOT
|
||||
+ Refactored continuation test harnessess
|
||||
+ Continuations ISE rather than ignore bad transitions
|
||||
+ Improved start.jar usage text for properties
|
||||
+ Promoted Jetty WebApp Verifier from Sandbox
|
||||
+ Promoted Jetty Centralized Logging from Sandbox
|
||||
+ 274251 DefaultServlet supports exact match mode.
|
||||
+ 288401 HttpExchange.cancel() Method Unimplemented
|
||||
+ 289265 Test harness for async input
|
||||
+ 289027 deobfuscate HttpClient SSL passwords
|
||||
+ 289265 Test harness for async input
|
||||
+ 289959 Improved ContextDeployer configuration
|
||||
+ 289960 start.jar assumes command line args are configs
|
||||
+ JETTY-937 More JVM bug work arounds. Insert pause if all else fails
|
||||
+ JETTY-1114 unsynchronised WebAppClassloader.getResource(String)
|
||||
+ JETTY-1122 Handle multi-byte utf that causes buffer overflow
|
||||
+ JETTY-1129 Filter control characters out of StdErrLog
|
||||
+ Fixed XSS issue in CookieDump demo servlet.
|
||||
+ 291019 Fix default DEBUG option; "-D.DEBUG=true" now works
|
||||
+ 291340 Race condition in onException() notifications
|
||||
+ 291543 make bin/*.sh scripts executable in distribution
|
||||
+ 291589 Update jetty-rewrite demo
|
||||
+ JETTY-937 More JVM bug work arounds. Insert pause if all else fails
|
||||
+ JETTY-1114 unsynchronised WebAppClassloader.getResource(String)
|
||||
+ JETTY-1121 Merge Multipart query parameters
|
||||
+ JETTY-1122 Handle multi-byte utf that causes buffer overflow
|
||||
+ JETTY-1129 Filter control characters out of StdErrLog
|
||||
+ Continuations ISE rather than ignore bad transitions
|
||||
+ Fixed XSS issue in CookieDump demo servlet.
|
||||
+ Improved start.jar usage text for properties
|
||||
+ Promoted Jetty Centralized Logging from Sandbox
|
||||
+ Promoted Jetty WebApp Verifier from Sandbox
|
||||
+ Refactored continuation test harnessess
|
||||
|
||||
jetty-7.0.0.v20091005 5 October 2009
|
||||
291340 Race condition in onException() notifications
|
||||
|
|
|
@ -38,6 +38,7 @@ import javax.servlet.ServletResponse;
|
|||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletRequestWrapper;
|
||||
|
||||
import org.eclipse.jetty.util.LazyList;
|
||||
import org.eclipse.jetty.util.MultiMap;
|
||||
import org.eclipse.jetty.util.StringUtil;
|
||||
import org.eclipse.jetty.util.TypeUtil;
|
||||
|
@ -101,16 +102,17 @@ public class MultiPartFilter implements Filter
|
|||
|
||||
String boundary="--"+value(content_type.substring(content_type.indexOf("boundary=")));
|
||||
byte[] byteBoundary=(boundary+"--").getBytes(StringUtil.__ISO_8859_1);
|
||||
// cross-container
|
||||
MultiMap params = new MultiMap(request.getParameterMap());
|
||||
|
||||
// jetty-specific but more efficient
|
||||
/*MultiMap params = new MultiMap();
|
||||
if(srequest instanceof org.eclipse.jetty.server.Request)
|
||||
MultiMap params = new MultiMap();
|
||||
for (Iterator i = request.getParameterMap().entrySet().iterator();i.hasNext();)
|
||||
{
|
||||
org.eclipse.jetty.server.Request req = ((org.eclipse.jetty.server.Request)srequest);
|
||||
req.getUri().decodeQueryTo(params, req.getQueryEncoding());
|
||||
}*/
|
||||
Map.Entry entry=(Map.Entry)i.next();
|
||||
Object value=entry.getValue();
|
||||
if (value instanceof String[])
|
||||
params.addValues(entry.getKey(),(String[])value);
|
||||
else
|
||||
params.add(entry.getKey(),value);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
|
@ -193,7 +195,7 @@ public class MultiPartFilter implements Filter
|
|||
if(_fileOutputBuffer>0)
|
||||
out = new BufferedOutputStream(out, _fileOutputBuffer);
|
||||
request.setAttribute(name,file);
|
||||
params.put(name, filename);
|
||||
params.add(name, filename);
|
||||
|
||||
if (_deleteFiles)
|
||||
{
|
||||
|
@ -319,6 +321,7 @@ public class MultiPartFilter implements Filter
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
private String value(String nameEqualsValue)
|
||||
{
|
||||
|
@ -346,11 +349,13 @@ public class MultiPartFilter implements Filter
|
|||
public void destroy()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------------- */
|
||||
/* ------------------------------------------------------------------------------- */
|
||||
private static class Wrapper extends HttpServletRequestWrapper
|
||||
{
|
||||
String encoding="UTF-8";
|
||||
MultiMap map;
|
||||
String _encoding=StringUtil.__UTF8;
|
||||
MultiMap _params;
|
||||
|
||||
/* ------------------------------------------------------------------------------- */
|
||||
/** Constructor.
|
||||
|
@ -359,13 +364,14 @@ public class MultiPartFilter implements Filter
|
|||
public Wrapper(HttpServletRequest request, MultiMap map)
|
||||
{
|
||||
super(request);
|
||||
this.map=map;
|
||||
this._params=map;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------------- */
|
||||
/**
|
||||
* @see javax.servlet.ServletRequest#getContentLength()
|
||||
*/
|
||||
@Override
|
||||
public int getContentLength()
|
||||
{
|
||||
return 0;
|
||||
|
@ -375,14 +381,18 @@ public class MultiPartFilter implements Filter
|
|||
/**
|
||||
* @see javax.servlet.ServletRequest#getParameter(java.lang.String)
|
||||
*/
|
||||
@Override
|
||||
public String getParameter(String name)
|
||||
{
|
||||
Object o=map.get(name);
|
||||
Object o=_params.get(name);
|
||||
if (!(o instanceof byte[]) && LazyList.size(o)>0)
|
||||
o=LazyList.get(o,0);
|
||||
|
||||
if (o instanceof byte[])
|
||||
{
|
||||
try
|
||||
{
|
||||
String s=new String((byte[])o,encoding);
|
||||
String s=new String((byte[])o,_encoding);
|
||||
return s;
|
||||
}
|
||||
catch(Exception e)
|
||||
|
@ -390,13 +400,8 @@ public class MultiPartFilter implements Filter
|
|||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
else if (o instanceof String)
|
||||
return (String)o;
|
||||
else if (o instanceof String[])
|
||||
{
|
||||
String[] s = (String[])o;
|
||||
return s.length>0 ? s[0] : null;
|
||||
}
|
||||
else if (o!=null)
|
||||
return String.valueOf(o);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -404,27 +409,30 @@ public class MultiPartFilter implements Filter
|
|||
/**
|
||||
* @see javax.servlet.ServletRequest#getParameterMap()
|
||||
*/
|
||||
@Override
|
||||
public Map getParameterMap()
|
||||
{
|
||||
return map;
|
||||
return Collections.unmodifiableMap(_params.toStringArrayMap());
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------------- */
|
||||
/**
|
||||
* @see javax.servlet.ServletRequest#getParameterNames()
|
||||
*/
|
||||
@Override
|
||||
public Enumeration getParameterNames()
|
||||
{
|
||||
return Collections.enumeration(map.keySet());
|
||||
return Collections.enumeration(_params.keySet());
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------------- */
|
||||
/**
|
||||
* @see javax.servlet.ServletRequest#getParameterValues(java.lang.String)
|
||||
*/
|
||||
@Override
|
||||
public String[] getParameterValues(String name)
|
||||
{
|
||||
List l=map.getValues(name);
|
||||
List l=_params.getValues(name);
|
||||
if (l==null || l.size()==0)
|
||||
return new String[0];
|
||||
String[] v = new String[l.size()];
|
||||
|
@ -435,7 +443,7 @@ public class MultiPartFilter implements Filter
|
|||
{
|
||||
try
|
||||
{
|
||||
v[i]=new String((byte[])o,encoding);
|
||||
v[i]=new String((byte[])o,_encoding);
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
|
@ -452,10 +460,11 @@ public class MultiPartFilter implements Filter
|
|||
/**
|
||||
* @see javax.servlet.ServletRequest#setCharacterEncoding(java.lang.String)
|
||||
*/
|
||||
@Override
|
||||
public void setCharacterEncoding(String enc)
|
||||
throws UnsupportedEncodingException
|
||||
{
|
||||
encoding=enc;
|
||||
_encoding=enc;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -740,7 +740,9 @@ public class Dump extends HttpServlet
|
|||
pout.write("<br/>");
|
||||
|
||||
pout.write("<h2>Form to generate UPLOAD content</h2>");
|
||||
pout.write("<form method=\"POST\" enctype=\"multipart/form-data\" accept-charset=\"utf-8\" action=\""+response.encodeURL(getURI(request))+"\">");
|
||||
pout.write("<form method=\"POST\" enctype=\"multipart/form-data\" accept-charset=\"utf-8\" action=\""+
|
||||
response.encodeURL(getURI(request))+(request.getQueryString()==null?"":("?"+request.getQueryString()))+
|
||||
"\">");
|
||||
pout.write("TextField: <input type=\"text\" name=\"TextField\" value=\"comment\"/><br/>\n");
|
||||
pout.write("File 1: <input type=\"file\" name=\"file1\" /><br/>\n");
|
||||
pout.write("File 2: <input type=\"file\" name=\"file2\" /><br/>\n");
|
||||
|
|
Loading…
Reference in New Issue