2011-02-05 28 views
0

我的問題是我有一個.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 
+0

參見http://stackoverflow.com/questions/2422468/how-to-upload-files-in-jsp-servlet/2424824#2424824 – BalusC 2011-02-07 12:49:11

回答

1

multipart/form-data對參數有不同的編碼方案。對於servelt 2.5,你應該使用commons-fileupload。使用servlet 3.0,您仍然可以使用它,或使用request.getPart(..)。你也應該註釋你的servlet與@MultiPartConfig

相關問題