【问题标题】:Unable to read form field in servlet [duplicate]无法读取 servlet 中的表单字段 [重复]
【发布时间】:2011-08-16 23:45:00
【问题描述】:

嘿,我对 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 编码,所以请帮忙。

提前致谢

【问题讨论】:

    标签: java servlets form-fields


    【解决方案1】:

    当您使用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
    • 嘿,你能解释一下如何用 multipartRequest 对象做到这一点
    • @codeomnitrix:我添加了一个小演示代码。
    • kk 谢谢哈利,我正要试试这个。
    【解决方案2】:

    为什么您的表单操作看起来像带有 ?q=saveQuestion 的 GET 请求,而表单类型是 POST?可能在此调用中忽略了 GET 参数。

    【讨论】:

    • 没有参数不会被忽略。
    • 哦,好的。反正只是猜测:)
    猜你喜欢
    • 2013-04-12
    • 2015-11-29
    • 1970-01-01
    • 2013-07-22
    • 2016-05-02
    • 2016-03-05
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多