我的問題是我有一個.html頁面中的窗體激活名爲CodeSubmission的servlet。 起初,我使用3.0 API(僅使用@WebServlet("/CodeSubmission")
)實現,但每當servlet被激活時,請求都沒有任何參數。 所以我決定嘗試一下,在一個全新的項目中使用2.5 API(通過手動將servlet添加到web.xml文件中),但是再次,無論何時調用servlet,請求都沒有任何參數。空的參數列表請求從.html後多部分/表單數據形式到servlets 2.5或3.0
我也認爲這是因爲文件上傳字段,但即使刪除它,選擇字段也不會作爲請求參數出現。
下面是HTML表單代碼:
<form action="CodeSubmission" method="POST" enctype="multipart/form-data">
<label for="compiler">Compilador:</label>
<select id="compiler">
<option value="c">C</option>
<option value="c++">C++</option>
<option value="scala7">Scala 2.7.7</option>
<option value="scala8">Scala 2.8.1</option>
<option value="java5">Java 1.5</option>
<option value="java6">Java 1.6</option>
</select>
<br />
<label for="code">Arquivo:</label>
<input id="code" type="file" size=80 />
<br />
<input type="submit" value="Enviar" />
</form>
這裏是測試代碼,以檢查參數:
System.out.println("Length: "+request.getContentLength());
System.out.println("Content Type: "+request.getContentType());
System.out.println("Method: "+request.getMethod());
Enumeration<String> attributeNames = request.getAttributeNames();
System.out.println("Request Attributes");
while (attributeNames.hasMoreElements()) {
String name = attributeNames.nextElement();
System.out.println(name + ": " + request.getAttribute(name));
}
Enumeration<String> paramNames = request.getParameterNames();
System.out.println("Request Parameters");
while (paramNames.hasMoreElements()) {
String name = paramNames.nextElement();
System.out.println(name + ": " + request.getParameter(name));
}
的request.getParameterNames()枚舉一向大小爲0 這裏是在使用Servlet 2.5加載文件並選擇選項後單擊「Enviar」按鈕時在控制檯中打印的內容:
Length: 44
Content Type: multipart/form-data; boundary=----WebKitFormBoundary4E3NYbsqXZZMWwcl
Method: POST
Request Attributes
Request Parameters
參見http://stackoverflow.com/questions/2422468/how-to-upload-files-in-jsp-servlet/2424824#2424824 – BalusC 2011-02-07 12:49:11