2

好吧,我很困惑。我相信它会返回指向原始地图的指针?

    private HttpServletRequest originalRequest;
    Map params = originalRequest.getParameterMap();
      params.remove("parameter-to-remove");
      params.put("parameter-to-add", "<a value>");

现在 originalRequest 中的参数会在这些操作之后发生变化吗?还是它只是将值复制到参数中,而我对它们做什么并不重要,而 originalRequest 中的任何内容都不会改变?

4

2 回答 2

4

返回的地图是不可变的地图,这可能是您没有看到反映的更改的原因。

根据 getParameterMap javadoc

一个不可变的 java.util.Map 包含参数名称作为键和参数值作为映射值。参数映射中的键是字符串类型。参数映射中的值是字符串数组类型。

如果你想为请求设置一些值,你应该使用setAttribute

于 2012-11-20T03:58:15.763 回答
1

不可以,您不得删除或添加任何请求参数到请求对象。它们必须保留(当它们到达服务器时),直到请求对象超出范围(在请求处理周期结束之后)。

从逻辑上讲,如果您被允许做类似的事情,那么请求对象将不再代表原始请求。在整个请求处理周期中,我们要处理的是客户端发出的请求,而不是被篡改的请求。

您应该改用的方法是void setAttribute(java.lang.String name, java.lang.Object o).

于 2012-11-20T04:15:32.163 回答