code: public void init(HttpServletRequest request) {
  		resetTimers();
  		
  		if (request != null) {
  			String p = request.getPathInfo();
  			final int pathLength = (p == null ? 0 : p.length());
  			
  			final StringBuffer urlSb = request.getRequestURL();
  			String simpleUrl = urlSb.toString(); // without qs
  			
  			String qs = request.getQueryString();
  			if (qs != null) urlSb.append("?").append(qs);
  			final String fullUrl = urlSb.toString();
  			contextUrl.set(fullUrl);
  		
  			requestCookies.remove();
  			responseCookies.remove();
  			
  			StringBuilder cookiesDump = new StringBuilder();
  			Map<String, Cookie> cookiez = requestCookies.get();
  			for (javax.servlet.http.Cookie c : Check.ifNull(request.getCookies(), new javax.servlet.http.Cookie[0])) {
  				cookiez.put(c.getName(), new BasicClientCookie(c.getName(), c.getValue()));
  				cookiesDump.append(c.toString()).append(";");
  			}
  	
  			String xForwardedFor = request.getHeader(HEADER_X_FORWARDED_FOR);
  			clientIp.set(xForwardedFor != null ? xForwardedFor : request.getRemoteAddr());
  			
  			String xForwardedUrl = request.getHeader(HEADER_X_FORWARDED_URL);
  			if (xForwardedUrl != null) {
  				int i = xForwardedUrl.lastIndexOf("?");
  				simpleUrl = (i == -1 ? xForwardedUrl : xForwardedUrl.substring(0, i));
  			}
  			
  			try {
  				simpleUrl = URLDecoder.decode(simpleUrl, "UTF-8"); // convert "%xx" stuff before working with lengths
  			} catch (UnsupportedEncodingException e) {
  				log.error(e.toString());
  			}
  			contextPath.set(simpleUrl.substring(0, simpleUrl.length() - pathLength));
  
  			if (verbose) log.info(">>> Time 0 [" + fullUrl + "]. cookies from client: " + cookiesDump.toString());
  		}
  		
  		initialized.set(true);
  	}
docs: /* request - client cookies -> thread local