无法在servlet中读取表单字段

3

您好,我是一名对Servlet环境比较新的人。我正在尝试使用以下方式向我的Servlet提交表单:

<form action="OnlineExam?q=saveQuestion" method="post" enctype="multipart/form-data">
        <fieldset>
        <legend>Question</legend>
        <textarea class="questionArea" id="question" name="question">Enter Question.</textarea>
        <br class="clearFormatting"/>
        Attach File<input type="file" name="file" />

        <input class="optionsInput" value="Option A" name="A" onfocus = "clearValues('A')" onblur = "setValues('A')"/>
        <br class="clearFormatting"/>

        <input class="optionsInput" value="Option B" name="B" onfocus = "clearValues('B')" onblur = "setValues('B')"/>
        <br class="clearFormatting"/>

        <input class="optionsInput" value="Option C" name="C" onfocus = "clearValues('C')" onblur = "setValues('C')"/>
        <br class="clearFormatting"/>

        <input class="optionsInput" value="Option D" name="D" onfocus = "clearValues('D')" onblur = "setValues('D')"/>
        <br/>

        <input type="submit" value="Save" />
        <input type="reset" value="Cancel" />
        <button style="display: none" onclick="return deleteQuestion()" >Delete</button>
        </fieldset>
        </form>

这个servlet大致是这样的:

protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
if(request.getParameter("q").equals("saveQuestion")){           
                saveQuestion(request);
            }
}

protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

public void saveQuestion(HttpServletRequest request){
                 Enumeration enum = request.getParameterNames();
                 while (enum.hasMoreElements()) {
                   String pName = (String) enum.nextElement();
                   String[] pValues = request.getParameterValues(pName);
                   System.out.print("<b>"+pName + "</b>: ");
                   for (int i=0;i<pValues.length;i++) {
                      System.out.print(pValues[i]);
                   }
                   out.print("<br>");
                 }
}

但它只打印了q参数,而没有其他表单字段。
我也尝试使用request.getParameter("question")来获取它们,但这也不起作用。那么我错在哪里了?实际上,我来自PHP背景,最近开始用Java编码,请帮忙。
提前感谢。
2个回答

4
当您使用enctype="multipart/form-data"时,无法像通常那样访问请求参数(即request.getParameter("question"))。您必须使用MultipartRequest对象。
并且您以POST方式提交表单,然后在servlet中将其重定向到doGet。为什么?为什么不直接在表单提交中使用GET方法。
使用MultipartRequest的演示:
String ph="images\\";
MultipartRequest req=new MultipartRequest(request, ph);
String question=req.getParameter("question");
System.out.println("Question: "+question);

我正在上传一个文件,所以我使用了POST。 - codeomnitrix
嘿,你能稍微解释一下如何使用multipartRequest对象来完成这个吗? - codeomnitrix
@codeomnitrix:我已经添加了一个小的演示代码。 - Harry Joy
好的,谢谢 Harry。我现在就去试试看。 - codeomnitrix

0
为什么你的表单操作看起来像是一个带有?q=saveQuestion的GET请求,而表单类型却是POST?也许这个GET参数在此次调用中被忽略了。

没有参数会被忽略。 - Harry Joy
哦,好的。反正那只是我的猜测 :) - midhunhk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接