JSP getQueryString() 和 getParameterMap() 返回不同的参数

JSP getQueryString() and getParameterMap() returning different parameters

我有一个 JSP 可以从 url 访问

http://localhost/products.jsp

(因此没有查询字符串),而该页面包含其他 JSP:

<jsp:include page="product.jsp">
    <jsp:param value="1" name="recordNumber"/>
</jsp:include>

product.jsp 中有一个对接收 request 对象的 Java 方法的调用:

NavigationUtils.getProductUrl(request)

该方法逻辑由请求参数驱动。
我得到的是:

  1. request.getQueryString() returns null
  2. request.getParameterMap() 有一个条目 "recordNumber"

这是标准行为还是我做错了什么?

我已经查阅了有关 HttpServletRequest.getQueryString() and ServletRequest.getParameterMap() 的文档,但我找不到所描述的行为,也找不到任何可能产生不同结果的容器相关处理的参考。

主要问题是我可能会使用 getParameterMap() 而不是 getQueryString() 破坏现有代码,因此任何相关建议都会有所帮助。

查询字符串只不过是一种对请求中的参数进行编码的机制,但它并不是唯一的。通常,在浏览器向服务器发送 GET 请求时使用。另一种机制是在表单编码的正文中 POST 请求。

在您的例子中,JSP 想要包含另一个 JSP 的结果,这一切都发生在服务器端。 servlet 容器可以将参数从一个 JSP 传递到另一个,而不必在查询字符串上对参数进行编码(这会不必要地低效)。

使用getParametergetParameterMap 是更通用的解决方案。使用 getQueryString 只有在特定情况下才真正有意义,因为这显然是您需要看起来艺术的东西。