【问题标题】:How to remove a parameter from HttpServletRequest request?如何从 HttpServletRequest 请求中删除参数?
【发布时间】:2014-10-21 19:07:26
【问题描述】:

在我的 Web 应用程序中,我发送两个参数:actionproductCode 从 JSP 到 Servlet。基于该操作,将进行一些处理。

现在,在执行操作后,我将控制权转发给 JSP。问题是当打开新的 JSP 时,URL 仍然包含 Servlet 的名称和参数。所以万一有人刷新页面,同样的动作会一次又一次地执行。

如果我能够以某种方式从 URL 中删除参数,那么我在 servlet 中处理了无参数情况。

谁能告诉我如何从请求对象中删除参数?

【问题讨论】:

  • 除非我遗漏了什么,否则您将重定向到另一个 URL。
  • 你不能这样做......转发是为了保留请求中的所有内容......如果你想从请求中删除一些东西,你需要使用重定向......
  • 请停止在请求中发送不需要的参数,在处理之前使用过滤器将其删除。

标签: java jsp servlets


【解决方案1】:

转发操作对客户端是透明的,并将请求转发到另一个处理程序进行处理。也许前锋并不是你想要做的。

【讨论】:

  • 嗨安德鲁,我认为你是正确的。我刚刚找到this,我想我应该使用重定向。非常感谢。
【解决方案2】:
【解决方案3】:

您不能从HttpServletRequest 中删除参数。参数的定义是它来自客户端(浏览器)。

也许您的意思是请求属性

为此,您可以使用:

request.getAttribute(String name)
request.setAttribute(String name, Object o)
request.removeAttribute(String name)

【讨论】:

  • 其实我的意思只是HttpServletRequest。
【解决方案4】:

您不能从 HttpServletRequest 中删除参数 - 但您可以通过为此参数传递新值来更改其值。

例如,登录后隐藏密码值,您可以通过这种方式转发到下一个 servlet/页面:

"*/PAM_show_orders?orderDate=2020-04-16&**password=+++***".

【讨论】:

    【解决方案5】:

    您可以做的是将该参数设置为空,并在执行任何操作之前检查该属性是否设置为空。这样您仍然可以使用请求转发。

    例如:

    request.setAttribute("Your_attribute",null);
    

    在执行操作时检查不为空可以使用

    String para=request.getAttribute("Your_attribute");
    if(para.equals(null)){
        //do this 
    }
    else{
        //do something else
    }
    

    【讨论】:

    • 这行不通。 .getAttribute("something") 将返回 null,因为您设置为 null 并且尝试从 null 使用 .equals() 方法会引发 NPE。
    【解决方案6】:

    当您的请求处理程序结束时,您可以使用:

    response.setParameter("action") = "";
    response.setParameter("productCode") = "";
    

    希望这会有所帮助。

    【讨论】:

    • response下没有setParameter()方法
    • 那甚至不是合法的 Java 代码。没有setParameter(),你不能给方法调用赋值。
    猜你喜欢
    • 2011-02-05
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    相关资源
    最近更新 更多