【问题标题】:reloading a web page call the code another time重新加载网页再次调用代码
【发布时间】:2013-02-03 18:43:37
【问题描述】:

我正在使用 JSP 和 servlet 开发一个 Web 应用程序。

在我的 JSP 中,我有几种形式,如下所示

<form method="post" action="quotation">
<input type="submit" name="addStep" value="Add a Step" class="noLabel" />
</form>

我正在使用表单的“名称”属性在我的 servlet 的 doPost 方法中知道我应该调用哪个代码。

问题如下:

  • 我将我的 jsp 加载到我的 Web 服务器中
  • 我单击表单上的“添加步骤”按钮 => 应用了正确的代码
  • 如果我通过按地址栏上的“enter”重新加载网页,则再次应用相同的代码,因为我猜想 http 请求上的 addStep 属性没有重置

您知道如何重置请求属性(此处为 addStep)以防止这种行为发生吗?

这里是doPost方法:

protected void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {

    request.setAttribute(DATABASE_ATT, databaseData);
    this.getServletContext().getRequestDispatcher(VIEW)
            .forward(request, response);

}

【问题讨论】:

    标签: jsp jakarta-ee


    【解决方案1】:

    发布后,重定向(使用HttpServletResponse.sendRedirect())到显示表单的页面,这样刷新只会重新加载包含表单的页面,而不是重新提交表单。

    http://en.wikipedia.org/wiki/Post/Redirect/Get

    【讨论】:

    • 我明白你的意思,但我无法让它工作:(在我的 servlet doPost 方法中,我目前有 this.getServletContext().getRequestDispatcher(VIEW).forward(request , response); 怎么用sendRedirect方法呢?我尝试在转发前用response.sendRedirect("relativeHttpPage")设置相对html页面,但是不行
    • 然后编辑您的问题,显示您的代码,并告诉我们它的作用。
    • 现在一切正常。我通过“sendRedirect”调用更改了“转发”调用。我认为它不起作用是因为我的 doGet 方法有问题。谢谢!
    猜你喜欢
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多