嘿我试图在用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方法发布表单。
答案 0 :(得分:6)
您的q
中doPost
的价值应该不在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);
}
}
答案 1 :(得分:4)
如果您将数据POST到servlet。 <{1}}将被调用。
在doPost
内,您可以访问请求参数
doPost()
答案 2 :(得分:4)
这解决了吗?
我面临同样的问题。 我试过了
Enumeration paramNames = request.getParameterNames();
while(paramNames.hasMoreElements()) {
System.out.println((String)paramNames.nextElement());
}
它显示0个元素,因此servlet不会读取表单数据。
我在其他帖子中得到了答案。
enctype=multipart/form-data
造成了这种情况。从表单中删除后,能够读取数据。
答案 3 :(得分:1)
单击表单上的“提交”按钮时,将调用servlet的doPost方法 - 这取决于您在HTML页面中放置“表单”的方法。 URL参数(q = saveQuestion)仍可供doPost方法中的代码使用。您似乎认为URL参数将由doGet方法处理,而表单参数将由doPost方法处理。事实并非如此。
答案 4 :(得分:1)
我知道这是一个旧帖子,但是当我搜索时无法找到答案,所以我发布了我的解决方案,可能会遇到同样的问题,因为他们的servlet的dopost函数中的表单参数获取null。 / p>
使用request.getParameters(“param1”)时,我遇到类似的问题,获取空值;功能。经过几个小时的游戏,我意识到我使用的param1是我请求的输入标签的ID。那是错的。我必须使用输入标记的NAME属性来获取输入框的正确值。就是这样。我只需要添加一个名称并使用此名称获取参数,这就解决了问题。
希望这有助于某人。
答案 5 :(得分:0)
Vinit尝试下面的代码
request.getParameter("param1");
答案 6 :(得分:0)
doPost() {
processRequest(request, response);
//to do
}
删除/评论processRequest(request, response)
然后重试。现在你不应该得到空值。