我有一个可以通过网址
访问的JSPhttp://localhost/products.jsp
(因此没有查询字符串),而该页面包含其他JSP:
<jsp:include page="product.jsp">
<jsp:param value="1" name="recordNumber"/>
</jsp:include>
在product.jsp
内,调用接收request
对象的Java方法:
NavigationUtils.getProductUrl(request)
该方法逻辑由请求参数驱动 我得到的是:
request.getQueryString()
返回null
request.getParameterMap()
有一个"recordNumber"
这是标准行为还是我做错了什么?
我已查找有关HttpServletRequest.getQueryString()和ServletRequest.getParameterMap()的文档,但我无法找到所描述的行为,也无法找到可能产生不同结果的容器相关处理
主要问题是我可能使用getParameterMap()而不是getQueryString()来破坏现有代码,所以任何建议都会有所帮助。
答案 0 :(得分:1)
查询字符串只不过是一种对请求中的参数进行编码的机制,但它并不是唯一的。通常,当浏览器向服务器发送GET请求时使用。另一种机制是在表单编码的POST请求的主体中。
在您的情况下,JSP希望包含另一个JSP的结果,这些结果都发生在服务器端。 servlet容器可以将参数从一个JSP传递到另一个JSP,而不必在查询字符串上对参数进行编码(这将是不必要的低效率)。
使用getParameter
或getParameterMap
是更通用的解决方案。使用getQueryString
只在特定情况下才有意义,因为这显然是你需要看的艺术品。