我知道可以使用HttpServletRequest.getParameter()
方法获取URL参数值。
那么能否用相应的方法来设置/替换这个值呢?
不,没有。
你只能更改属性,而不能更改参数。
要实现类似的功能,唯一的方法是使用一个类来包装请求并返回其他内容(对于getParameter)。
相关的好奇心:在某些Servlet容器中存在一个错误,可以让你执行request.getParameterValues(name)[0] = "newValue"
,但这只会导致不一致性。
HttpServletRequest
替换为自定义的HttpServletRequestWrapper
实现,将parametermap变成可修改的映射,然后在链中早期放置一个Filter
来替换parametermap。
然而,这似乎是一种变通方法。在其中一条评论中,您表示希望对参数进行编码(实际上:对它们进行解码,因为它们已经被编码了)。您正在寻找错误的解决方案。对于GET
请求参数,编码需要在servlet容器本身中设置(例如Tomcat,在HTTP连接器的URIEncoding
属性中设置即可)。对于POST
,您需要通过ServletRequest#setCharacterEncoding()
进行设置。还请参阅此文章中的详细解决方案(但请先阅读整篇文章以了解完整的情况)。
请求参数是通过HTTP从客户端提交到servlet或JSP的。它们不是由服务器端代码设置的,因此不需要任何设置方法(setParameter())。
此外,这将增加安全性,防止任何人更改请求参数。