【问题标题】:Headers and Getters in HttpServletRequestHttpServletRequest 中的标头和获取器
【发布时间】:2017-02-27 17:43:29
【问题描述】:

我正在使用 HttpServletRequest,我必须输出该对象的所有标头和信息。

对于我正在使用的标题getHeadersNames()

Enumeration<String> headerEnums = servletRequest.getHeaderNames();
while (headerEnums.hasMoreElements()) {  
    String elementName = headerEnums.nextElement();
    String elementValue = servletRequest.getHeader(elementName);
    sb.append("Header.").append(elementName).append("=").append(elementValue).append(", ");
}

然后我使用 getter 检索所有参数,例如:

sb.append("getAuthType").append("=").append(servletRequest.getAuthType());

我从getContentType() 得到重复的参数,例如Header.content-typeContentType

我的问题:

  1. 有一种很好的方法可以输出所有servletRequest 参数而无需遍历headersattributes 和getter?喜欢 toString()?
  2. 如何避免在没有时间集的情况下检索重复的参数?
  3. 是否可以在 Headers 中包含一个其 getter 为空的标头?例如:content-type 存在于 Headers 但getContentType() 为空?

【问题讨论】:

  • docs.oracle.com/javaee/5/api/javax/servlet/… 会将所有请求参数作为 Map 返回。
  • @ramp 我很确定 OP 想要一个返回所有内容的方法 - 查询参数、标题等。
  • @SvetlinZarev,你是对的,因为帖子和代码都是关于标题的。我只是从字面上回答了这个问题:)
  • @ramp 谢谢,但是我找了一个返回所有东西的方法,我以为从标题和解释上就很清楚了,对不起。

标签: java servlets


【解决方案1】:

我的答案是在 Apache Tomcat (8.5) 的上下文中。

是否可以在 Headers 中包含一个其 getter 为空的标题?例如:headers 中存在 content-type 但getContentType()null

这是不可能的,除非有错误。这些方法查询包含标头的相同内部数据结构。

如何避免在没有时间集的情况下检索重复的参数?

您要查询相同的数据结构两次 - 所以这很简单 - 不要为同一件事询问两次。要么使用标头,要么使用 HttpServletRequest 中的方法。唯一的区别是,在使用这些方法时,您将获得一个默认值(如 -1,如果 Content-Length 未知),而如果您要求缺少标头,您将获得 NULL。

有一种很好的方法可以输出所有 ServletRequest 参数,而无需遍历标头、属性和 getter?喜欢 toString()

至少我不知道这种标准方法。

【讨论】:

    猜你喜欢
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多