如何将参数添加到我的Java Servlet的现有HttpServletRequest中?

M S*_*ach 20 java servlets web-applications

我想在我的参数图中添加一个新参数HttpServletRequest.

以下代码

 request().getParameterMap().put("j_username", user);
 request().getParameterMap().put("j_password", pwd);
Run Code Online (Sandbox Code Playgroud)

创建此错误

no modifications are allowed to a locked parameter map
Run Code Online (Sandbox Code Playgroud)

这样做的正确方法是什么?

JB *_*zet 15

请求的参数是浏览器作为参数发送的值.没有理由改变它们.如果要将某个值与请求关联,请使用属性而不是参数.这具有额外的优点,即属性可以是任何对象而不仅仅是字符串:

request.setAttribute("user", new User(userName, password));
Run Code Online (Sandbox Code Playgroud)

如果您将请求转发到另一个资源,您可以添加参数(虽然我不会说这是一个好习惯):

request.getRequestDispatcher("/some/path?j_username=" + user + "&j_password=" + pwd).forward(request, response);
Run Code Online (Sandbox Code Playgroud)

但是,参数应该正确编码.

  • 实际上我想在请求中添加参数而不是属性。原因是我正在开发一些开源应用程序(xwiki)的扩展以满足我的需求,它需要请求中的参数,并且它获取的方式是 request.getParameter("paramName"); 原始请求来自另一个网络应用程序,我无法自行设置,因为它不了解它们 (4认同)
  • 这里有一篇很好的文章:http://ocpsoft.org/opensource/how-to-safely-add-modify-servlet-request-parameter-values/ (3认同)

Gre*_*ent 8

我遇到了类似的问题,并通过制作参数图的副本来解决它.

Map<String, String[]> params = new HashMap<String, String[]>(req.getParameterMap());
Run Code Online (Sandbox Code Playgroud)