在刷新jsp页面时再次提交

时间:2014-02-15 10:51:55

标签: java jsp servlets

我创建了简单的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%">&nbsp;</td>
            <td style="width:30%" align="right">Item Unit :</td>
            <td style="width:2%">&nbsp;</td>
            <td style="width:40%" align="left"><input type="text" name="itemUnitName" style="width:200px;" /></td>
            <td style="width:18%">&nbsp;</td>
        </tr>
        <tr><td colspan="5">&nbsp;</td></tr>
        <tr>
            <td colspan="5" align="center">
                <input type="submit" class="button-2" value="Insert"></input> &nbsp;&nbsp;&nbsp;
                <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";
}

请帮我解决这个问题...

1 个答案:

答案 0 :(得分:2)

理想情况下,您应登陆静态结果页,而不是再次显示输入表单。我们的想法是强制浏览器切换到新的URL,以便刷新不会重新触发其他数据更新。这是最简单的解决方法。

但如果您更喜欢使用同一屏幕,则应使用隐藏令牌。您必须记录一些状态,因为您要区分彼此的2个请求:第一个和第二个请求(刷新)。

在您的逻辑中,第一次显示输入表单时会生成一个令牌。在来自同一会话的任何传入请求中,检查您是否已使用该令牌并使用它来确定这是否是第二次请求。下图将进一步说明。

<强>设置

enter image description here

<强>处理

enter image description here