如何从HttpServletRequest请求中删除参数?

5
在我的Web应用程序中,我正在从JSP向Servlet发送两个参数:actionproductCode。根据该操作将进行一些处理。
现在,在执行操作后,我正在将控件转发到JSP。问题是,当打开新的JSP时,URL仍然包含Servlet的名称和参数。因此,如果有人刷新页面,则会再次执行相同的操作。
如果我能够从URL中删除参数,则可以在servlet中处理无参数情况。
请问有人可以告诉我如何从请求对象中删除参数吗?

1
除非我漏掉了什么,否则你会发送一个重定向到另一个URL。 - Elliott Frisch
1
你不能这样做...转发旨在保留请求中的所有内容...如果你想从请求中删除某些内容,你需要使用重定向。 - dharam
请在请求中停止发送不需要的参数,使用过滤器在处理之前将它们移除。 - user2173738
6个回答

2

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

也许您指的是请求的属性

对于这个,您可以使用:

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

实际上,我只是指HttpServletRequest。 - c2tarun

1

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


1
嗨,安德鲁,我认为你是正确的。我刚刚发现了这个,我想我应该使用重定向。非常感谢。 - c2tarun


0

您无法从HttpServletRequest中删除参数,但可以通过传递此参数的新值来更改其值。

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

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

-1
你可以将该参数设置为null,并在执行任何操作之前检查该属性是否已设置为null。这样,您仍然可以使用请求转发。
例如:
request.setAttribute("Your_attribute",null);

在执行操作时检查非空可以使用以下方法:

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

1
这样不行。.getAttribute("something")会返回null,因为您将其设置为null并尝试使用从null抛出NPE的.equals()方法。 - Leo

-5

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

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

希望这能帮到你。

response下没有setParameter()方法。 - Newbie
这甚至不是合法的Java代码。没有 setParameter() 方法,也不能给方法调用赋值。 - Chris Suszyński

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接