我知道我可以使用HttpServletRequest.getParameter()
来获取网址参数值。
是否有可以设置/替换值的等效方法?
答案 0 :(得分:9)
不,没有。
您只能更改属性,而不能更改参数。
实现类似功能的唯一方法是包装请求(使用为getParameter返回其他内容的类)。
相关的好奇心:某些servlet容器中存在一个错误,允许您执行request.getParameterValues(name)[0] = "newValue"
,但这只会导致不一致。
答案 1 :(得分:6)
您可以将HttpServletRequest
替换为自定义HttpServletRequestWrapper
实现,使参数映射成为可修改的映射,该实现替换了链中早期放置的Filter
内的参数映射。
然而,这闻起来像是一种解决方法。在其中一条评论中,您声明要对参数进行编码(实际上:解码它们,因为它们已经编码)。你正在寻找解决方案的错误方向。对于GET
请求参数,编码需要在servletcontainer本身中设置(例如,在Tomcat的情况下,只需设置HTTP连接器的URIEncoding
属性)。对于POST
,您需要按ServletRequest#setCharacterEncoding()
进行设置。另请参阅this article中的详细解决方案(阅读整篇文章,了解完整图片)。
答案 2 :(得分:4)
没有。但是,你为什么要这样做呢?可能还有其他方法可以完成您需要做的事情。
答案 3 :(得分:4)
我认为没有。但是你可以以类似的方式使用setAttribute()方法;你只需要使用getAttribute() - 而不是getParameter() - 以便稍后获取值。
答案 4 :(得分:1)
请求参数通过HTTP从客户端提交给servlet或JSP。它们不是由服务器端代码设置的,因此不需要任何set方法(setParameter())。
此外,它还将增加无人可以更改请求参数的安全性。