如何在java中刷新后防止重新提交

时间:2018-05-21 19:58:53

标签: java jquery html jsp

我有多个网页jsp,我用于重新提交刷新response.sendredirect(“blabla.jsp”),但是一个页面工作正常,另一个页面我按下提交它转到一个空白页面,行添加到数据库,这个问题的解决方案?谢谢

`

<% String UC1 = "INIT";

    if (request.getParameter("add_spec") != null) {
        UC1 = "ADD_SPEC";
    }
    if (UC1.equals("INIT")) {
        List<Speciality> specs = SpecialityController.INSTANCE.findAll();
%>

<%@include file="./WEB-INF/Add_Spec.jspf" %>
<%@include file="./WEB-INF/view_all_specs.jspf" %> 
<%}
    if (UC1.equals("ADD_SPEC")) {
        String spec = request.getParameter("speciality");

        SpecialityController.INSTANCE.create(new Speciality(spec));
        List<Speciality> specs = SpecialityController.INSTANCE.findAll();
          response.sendRedirect("main_admin.jsp");

%>

<%@include file="./WEB-INF/Add_Spec.jspf" %>
<%@include file="./WEB-INF/view_all_specs.jspf" %> 
<% }
%>

`

1 个答案:

答案 0 :(得分:1)

您可以使用Post/Redirect/Get模式。

  

当通过HTTP POST请求将Web表单提交给服务器时,   尝试在某些情况下刷新服务器响应的Web用户   用户代理可以导致原始POST请求的内容   重新提交,可能会导致意外结果,例如重复   网上购买。   为避免此问题,许多Web开发人员使用PRG   pattern - 而不是直接返回网页,POST操作返回重定向命令。

换句话说,当您提交数据时,您应重定向到您可以查看(获取)您刚刚添加的数据的页面。 / p>

这样,刷新就不会重新提交数据。

或者,您可以使用类似CSRF/XSRF的令牌。

虽然PHP中有this example,但你应该理解它的要点。

更新

更好的是,您可以查看CSRF https://services.teammentor.net/article/00000000-0000-0000-0000-000000040a2e

的此示例