response.sendRedirect Vs getRequestDispatcher

时间:2013-11-28 11:16:58

标签: java jsp servlets

我有一个名为'insert'的servlet,它在数据库中插入数据。

在这个servlet的末尾,我有一个getRequestDispatcher,它将用户发送到一个名为'outcome.jsp'的页面。我的servlet还使用request.setAttribute("Message", "bla bla bla");

向outcome.jsp发送变量

在outcome.jsp中我有request.getAttribute("Message");,我向用户显示消息的值。

在浏览器网址上总是有我的servlet的网址(http://www.site.com/insert),因此用户可以使用浏览器的重新加载按钮并插入1000000000次。

我尝试使用response.sendRedirect但我无法使用request.setAttribute,我需要它来显示有关插入结果的消息

如何避免我的servlet的url显示在浏览器URL上,以便不允许用户使用重新加载按钮进行无限插入?

谢谢

2 个答案:

答案 0 :(得分:0)

如果使用response.sendRedirect(),则会启动一个新请求,因此您无法访问为先前请求设置的数据,以显示您必须使用查询参数的数据,该数据将附加到URl

   response.sendRedirect("/outcome.jsp?Message=bla bla")

在您的jsp页面中,您需要阅读

request.getParameter("Message")

答案 1 :(得分:0)

您使用的两种方法中的哪一种仍然会遇到相同的问题(即使在sendRedirect()的情况下,通过用户捕获和再现请求标头)。双重插入检查应单独进行。

通常,如果要禁用客户端的双重条目,可以创建令牌并将其发送到客户端。当客户端想要插入时,您可以检查此令牌是否有效,然后执行插入(然后从有效列表中删除令牌)。

这只是众多方式中的一种......

希望这有帮助