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

标签 java jsp servlets query-string jspinclude

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

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

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

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

最佳答案

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

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

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

关于java - JSP getQueryString() 和 getParameterMap() 返回不同的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29299314/

相关文章:

java - 打印从 servlet 传递的表中的完整行

java - 将生成的 REST 服务接口(interface)实现绑定(bind)到 servlet

java - 页面无法加载,Apache Tomcat 服务器错误

java - Java-无法播放某些Ogg剪辑

java - Java 中的异常。我们为什么要拥有多个可检查类和一个不可检查类呢?

java - JSP 飞机座位布局

hibernate - java.lang.ClassNotFoundException : javax. ws.rs.client.RxInvokerProvider

java - Java Servlet 中的 UTF-8 在部署到 Azure 网站时不起作用

java - 如何在 scene.write() 中写入 REST Assured 日志?

java - xml 中的 IntelliJ 14.1 日志记录输出