【问题标题】:httpservletrequest getCookies() or getHeader()httpservletrequest getCookies() 或 getHeader()
【发布时间】:2016-02-14 21:59:47
【问题描述】:

我想接受来自客户端的数据。 每种方法的优缺点是什么?

HttpServletRequest request = retriveRequest();
Cookie [] cookies = request.getCookies();
for (Cookie cookie : cookies) {
     if ("my-cookie-name".equals(cookie.getName())) {
          String value = cookie.getValue();
         //do something with the cookie's value.
     }
}

String request.getHeader("header-name");

当我读到How are cookies passed in the HTTP protocol?

Cookie 在请求(客户端 -> 服务器)和响应(服务器 -> 客户端)中作为 HTTP 标头传递。

【问题讨论】:

  • 如果没有设置 cookie,request.getCookies() 可能会返回 null,因此请确保在 'for' 循环之前检查 'cookies' 数组不为 null。
  • 有什么理由打折请求参数?

标签: java servlets


【解决方案1】:

getCookies,使您免于解析 Cookie 标头字符串,并从中创建一个 java 对象。否则,您将不得不执行以下操作:

String rawCookie = request.getHeader("Cookie");
String[] rawCookieParams = rawCookie.split(";");
for(String rawCookieNameAndValue :rawCookieParams)
{
  String[] rawCookieNameAndValuePair = rawCookieNameAndValue.split("=");
}
// so on and so forth. 

【讨论】:

  • 我同意你的看法,谢谢。这个案子怎么样?如果我只想传递数据怎么办。我通过 cookie 或只是标题传递它,都没有关系。例如 String str = request.getHeader("my-param");我不需要解析这个字符串,因为它是我需要的值。
  • 还有一件事,cookie 可用于存储来自站点的数据并在一段时间后发送此数据。如果我在没有 cookie 的情况下与服务器进行交换,我在哪里存储诸如“locale-param”、“preferred theme”之类的东西?
  • Locale 应该转到 Accept-Language 字段,例如 en/ja 等...对于自定义标头,您也可以定义自己的自定义标头。
  • 如何创建requestHttpServletRequest对象?
  • @Kavipriya request 只是 HttpServletRequest 的变量名。一样的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-05
  • 2013-06-14
  • 2010-11-25
  • 2018-09-25
  • 2023-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多