Java 在servlet中读取表单数据。使用post方法发布数据,并使用?q=test1调用servlet

Java 在servlet中读取表单数据。使用post方法发布数据,并使用?q=test1调用servlet,java,servlets,post,Java,Servlets,Post,嘿,我正在尝试读取用post方法发送的servlet中的表单数据。这个servlet被称为OnlineExam?q=saveQuestion。现在servlet的工作方式是: public class OnlineExam extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,

嘿,我正在尝试读取用post方法发送的servlet中的表单数据。这个servlet被称为
OnlineExam?q=saveQuestion
。现在servlet的工作方式是:

public class OnlineExam extends HttpServlet {
protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
if(request.getParameter("q").equals("saveQuestion")){
                /*
                 * Save the question provided with the form as well as save the uploaded file if any.
                 */
                saveQuestion(request);
            }
}

protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
//      doGet(request, response);
        saveQuestion(request);
    }
public String saveQuestion(HttpServletRequest request){         
        System.out.println(request.getParameter("question"));

        return "";

    }       
}
HTML格式:

<form action="OnlineExam?q=saveQuestion" method="post">
        <fieldset>
        <legend>Question</legend>
        <textarea class="questionArea" id="question" name="question">Enter Question.</textarea>
        <br class="clearFormatting"/>               
        <input class="optionsInput" value="optionA" name="optionA" onfocus = "clearValues('optionA')" onblur = "setValues('optionA')"/>
        <br class="clearFormatting"/>

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

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

        <input class="optionsInput" value="optionD" name="optionD" onfocus = "clearValues('optionD')" onblur = "setValues('optionD')"/>
        <br/>
        <input class="optionsInput" value="answer" name="answer" onfocus="clearValues('answer')" onblur="setValues('answer')"/>     
        <input type="submit" value="Save" />
        <input type="reset" value="Cancel" />
        <button style="display: none" onclick="return deleteQuestion()" >Delete</button>
        </fieldset>
        </form>

问题:
输入问题。





删除
因此,任何人都可以说明servlet实际上是如何被调用的。我的意思是什么是控制流,即在这个servlet中如何工作

我如何读取servlet中的param1


ps:我不想用get方法发布表单。

如果您将数据发布到servlet。
doPost
将被调用

doPost()内部
您可以访问请求参数,如

request.getParameter("param1");
请尝试下面的代码
request.getParameter(“param1”);

当您单击表单上的“提交”按钮时,将调用servlet的doPost方法-这取决于您在HTML页面的“表单”上放置的方法。在doPost方法中,URL参数(q=saveQuestion)仍然可用于您的代码。您似乎认为URL参数将由doGet方法处理,而表单参数将由doPost方法处理。事实并非如此。

您应该在
doPost
中获得
q
的值,而不是在
doGet
中。因为您使用了
method=“post”
,所以在servlet中,
doPost
不是调用
doGet
的。删除
doGet
中的代码,然后将其插入
doPost
。而您的
doPost
必须与下面的代码类似

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    if(request.getParameter("q").equals("saveQuestion")){
        saveQuestion(request);
    }
}
这个问题解决了吗

我也面临同样的问题。 我试过了

它显示了0个元素,所以表单数据并没有被servlet读取

我在另一条线上得到了答案。
enctype=multipart/form data
导致此问题。从表单中删除后,可以读取数据

doPost() {
  processRequest(request, response);
  //to do
}

删除/comment
processRequest(请求,响应)
并重试。现在,您不应该得到空值。

我知道这是一个旧线程,但在搜索时找不到答案,因此我发布了我的解决方案,供可能有人使用,他们的servlet的dopost函数中的表单参数可能存在相同的空值问题

我在使用request.getParameters(“param1”)时遇到了类似的获取空值的问题;功能。玩了几个小时后,我意识到我使用的param1是我请求的输入标记的ID。那是错误的。我必须使用输入标记的NAME属性来获得输入框的正确值。就这些。我只需要添加一个名称,然后使用这个名称获取参数,这就解决了这个问题



希望这对某人有所帮助。

嘿,实际上我正在尝试与你所写的相同的方法。那只是一个打字错误。请参见已编辑的问题。谢谢你的回答。你能试着删除吗?q=saveQuestion#(只是一个没有尝试过的建议)。与其在表单中添加参数“q”作为表单中的隐藏字段,不如在表单中添加参数“q”。不,我不能保证,实际上servlet也在根据get做一些其他工作parameters@PhilipRego,再次阅读我的答案-它是getParameter而不是getAttribute。推翻否决票。看起来你也否决了其他几个答案。也要检查这些。从doPost中删除doGET调用,正如doPost中提到的,它没有任何用处。只需从doPost中删除doGet调用。我已经从doPost中删除了doGet调用,但它仍然显示nullHey jigar。我刚刚对问题进行了更改。请查看它。谢谢你这么好:)嘿,我已经添加了问题的实际源代码。请查看已编辑的问题,但为什么我无法获取表单的表单字段。即使调用了doPost servlet,您确定要调用doPost方法吗?您是否尝试过枚举paramNames=request.getParameterNames();while(paramNames.hasMoreElements()){System.out.println((String)paramNames.nextElement());}来查看哪些参数到达servlet?这并不能回答问题。嘿,大家好,我需要一种方法来读取get data(即q=savequestion)和post form数据。那么,如何阅读和解析这两种语言呢?@jvperrin,英语不是我的母语。所以,我对你的否决票非常失望。我没有否决你,我只是编辑了你的文章以使其更具可读性。感谢你的解决方案,我是java世界的新手,我将其更改为name,但仍然得到null值:(我使用的是name.still nullHttpServletRequest.getAttribute(“optionA”)没有得到表单输入的否决票
doPost() {
  processRequest(request, response);
  //to do
}