1

我目前正在ArrayList's使用以下代码将一些从我的 servlet 传递到我的 JSP 页面。

    RequestDispatcher rd = null;
    request.setAttribute("date",al);
    request.setAttribute("bau",al1);
    request.setAttribute("project",al2);
    rd = request.getRequestDispatcher("ResourceChart.jsp");
    rd.forward(request,response);

问题是当我单击页面上的刷新时,再次传递相同的日期,我最终得到奇怪的结果。我是否也应该转发到 JSP 页面以避免 servlet 重新生成变量并传递它们?

实现这一点的最佳方法是什么?

4

1 回答 1

1

您显然正在刷新 POST 请求并忽略/确认浏览器的内置警告,即数据将被重新发送。在这种情况下,该doPost()方法确实会使用先前提交的数据重新执行,这些数据最终只会出现在数据库中的重复条目中。

避免在刷新 POST 请求时重复提交的规范方法是在 POST 请求之后发送重定向。重定向会隐式创建一个新的 GET 请求。然后刷新将导致仅重新执行 GET 请求,这是完全无害的。

为此,请doPost()用以下单行替换所有显示的问题行

response.sendRedirect(request.getContextPath() + "/ResourceChart");

(假设您的 servlet 映射到 的 URL 模式/ResourceChart

并创建一个新doGet()方法,在其中将所有已删除的行放回原处,以及准备列表的必要逻辑。您需要做的唯一更改是将 JSP 文件放在/WEB-INF文件夹中,以避免最终用户能够通过输入/猜测其 URL 而无需doGet()首先调用 servlet 来直接打开它。

request.getRequestDispatcher("/WEB-INF/ResourceChart.jsp").forward(request, response);

也可以看看:

于 2013-03-28T21:22:17.323 回答