繁体   English   中英

response.sendRedirect与getRequestDispatcher

[英]response.sendRedirect Vs getRequestDispatcher

我有一个Servlet,称为“插入”,可将数据插入db。

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

在result.jsp中,我有一个request.getAttribute("Message"); 我向用户展示Message的价值。

在浏览器url上始终有我的servlet的URL( http://www.site.com/insert ),因此用户可以使用浏览器的reload按钮并进行插入1000000000次。

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

如何避免在浏览器的网址上显示我的servlet的网址,以免用户使用重载按钮进行无限插入?

谢谢

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

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

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

request.getParameter("Message")

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

通常,如果要禁用客户端的重复输入,则可以创建令牌并将其发送给客户端。 当客户要插入时,可以检查此令牌是否有效,然后进行插入(然后从有效列表中删除令牌)。

那只是许多方式之一。

希望这可以帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM