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

时间:2015-03-27 11:09:03

标签: java jsp servlets query-string jspinclude

我有一个可以通过网址

访问的JSP
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()返回null
  2. request.getParameterMap()有一个"recordNumber"
  3. 条目

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

    我已查找有关HttpServletRequest.getQueryString()ServletRequest.getParameterMap()的文档,但我无法找到所描述的行为,也无法找到可能产生不同结果的容器相关处理

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

1 个答案:

答案 0 :(得分:1)

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

在您的情况下,JSP希望包含另一个JSP的结果,这些结果都发生在服务器端。 servlet容器可以将参数从一个JSP传递到另一个JSP,而不必在查询字符串上对参数进行编码(这将是不必要的低效率)。

使用getParametergetParameterMap是更通用的解决方案。使用getQueryString只在特定情况下才有意义,因为这显然是你需要看的艺术品。