HttpServletRequest - SetParameter

时间:2010-02-23 16:05:48

标签: java encoding servlets

我知道我可以使用HttpServletRequest.getParameter()来获取网址参数值。

是否有可以设置/替换值的等效方法?

5 个答案:

答案 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())。

此外,它还将增加无人可以更改请求参数的安全性。