我使用以下utility
函数从cookie
获取价值:
public static long getClientTimezoneOffset(HttpServletRequest request)
{
long timeZoneOffset = 0;
if(request != null)
{
Cookie[] cookies = request.getCookies(); // throws null pointer exeception from here
if(cookies != null)
{
for(Cookie cookie : cookies)
{
if(cookie.getName().equals("timezoneOffset"))
{
try
{
timeZoneOffset = Long.parseLong(cookie.getValue());
}
catch (Exception ex)
{
ex.printStackTrace();
}
break;
}
}
}
}
return timeZoneOffset;
}
java.lang.NullPointerException at org.apache.catalina.connector.Request.parseCookies(Request.java:2943) at org.apache.catalina.connector.Request.convertCookies(Request.java:2958) at org.apache.catalina.connector.Request.getCookies(Request.java:1987) at org.apache.catalina.connector.RequestFacade.getCookies(RequestFacade.java:662) at javax.servlet.http.HttpServletRequestWrapper.getCookies(HttpServletRequestWrapper.java:69) at javax.servlet.http.HttpServletRequestWrapper.getCookies(HttpServletRequestWrapper.java:69) at javax.servlet.http.HttpServletRequestWrapper.getCookies(HttpServletRequestWrapper.java:69) at javax.servlet.http.HttpServletRequestWrapper.getCookies(HttpServletRequestWrapper.java:69)
我已检查过request
个对象,但它不是NULL
。它并不总是抛出异常,但有时候。这就是为什么难以弄清楚实际问题的原因。
我已经检查过类似的相关帖子,但这些都没有帮助。任何帮助表示赞赏。
答案 0 :(得分:2)
在8.029版本中看起来已修复此问题。请参阅此错误:https://bz.apache.org/bugzilla/show_bug.cgi?id=58578
您的Tomcat版本已经很老了,无论如何都可能需要更新。如果无法做到这一点,请在致电request.getContext() == null
之前查看是否检查request.getCookies()
。它可能只会在主机映射期间出现问题时发生,但如果没有更多信息,我无法告诉您确切的原因。通过一些额外的日志记录,您可以将好的请求的详细信息与坏的请求进行比较,并查看差异的位置。
编辑:
升级到 tomcat 8.0.36
解决了这个问题。