我创建了简单的jsp servlet项目,当我提交jsp表单时,它将数据插入到指定的表中,但之后当我引用相同的jsp表单时,提交并将相同的数据插入到表中..
ItemUnit.jsp
<form method="POST" action='ItemUnitHandler' name="frmAddUser">
<input type="hidden" name="action" value="insert" />
<table style="width:95%;margin-top:70px;" align="center">
<tr>
<td style="width:10%"> </td>
<td style="width:30%" align="right">Item Unit :</td>
<td style="width:2%"> </td>
<td style="width:40%" align="left"><input type="text" name="itemUnitName" style="width:200px;" /></td>
<td style="width:18%"> </td>
</tr>
<tr><td colspan="5"> </td></tr>
<tr>
<td colspan="5" align="center">
<input type="submit" class="button-2" value="Insert"></input>
<input type="reset" class="button-2" value="Reset"></input>
</td>
</tr>
</table>
</form>
Servlet发布方法代码..
String action = request.getParameter("action");
System.out.println("action :action action : "+action);
if(action == null)
{
redirect = "ItemUnit.jsp";
}
else if(action.equalsIgnoreCase("insert"))
{
ItemUnit objItemUnit = new ItemUnit();
// System.out.println("request.getParameter : "+request.getParameter("itemUnitName"));
objItemUnit.setItemUnit(request.getParameter("itemUnitName"));
dao.addItemUnit(objItemUnit);
redirect = "ItemUnit.jsp";
}
请帮我解决这个问题...
答案 0 :(得分:2)
理想情况下,您应登陆静态结果页,而不是再次显示输入表单。我们的想法是强制浏览器切换到新的URL,以便刷新不会重新触发其他数据更新。这是最简单的解决方法。
但如果您更喜欢使用同一屏幕,则应使用隐藏令牌。您必须记录一些状态,因为您要区分彼此的2个请求:第一个和第二个请求(刷新)。
在您的逻辑中,第一次显示输入表单时会生成一个令牌。在来自同一会话的任何传入请求中,检查您是否已使用该令牌并使用它来确定这是否是第二次请求。下图将进一步说明。
<强>设置强>
<强>处理强>