@Override public String get(String name) { Data data = get_(name); return data != null ? data.get() : null; }
@Override public synchronized MultiData params_() { if (!parsedParams) { if (!rQuery.isEmpty()) { PARSER.parseParams(input(), params, query_().range()); } parsedParams = true; } return _params; }
private Handler findHandler(HttpExchangeImpl x) { Buf buf = x.input(); Range action = x.verb_().range(); Range path = x.path_().range(); // serveStaticFileIfExists(x, buf, path); long hash = hash(buf.bytes(), action, path); synchronized (this) { SimpleList<Route> candidates = routes.get(hash); candidates = routes.get(hash); if (candidates != null) { for (int i = 0; i < candidates.size(); i++) { Route route = candidates.get(i); if (BytesUtil.matches(buf.bytes(), action, route.action, true) && BytesUtil.startsWith(buf.bytes(), path, route.path, true)) { int pos = path.start + route.path.length; if (path.limit() == pos || buf.get(pos) == '/') { x.setSubpath(pos, path.limit()); return route.handler; } } } } if (genericHandler != null) { x.setSubpath(path.start, path.limit()); return genericHandler; } } throw x.notFound(); }
@Override public synchronized String uri() { return uri_().get(); }
@Override public synchronized String path() { if (path == null) { path = path_().get(); } return path; }
@Override public synchronized String protocol() { return protocol_().get(); }
@Override public synchronized byte[] body() { return body_().get().getBytes(); }
@Override public synchronized String verb() { return isGet.value ? "GET" : verb_().get(); }
@Override public synchronized String query() { return query_().get(); }
@Override public synchronized String subpath() { String subp = subpath_().get(); return !U.isEmpty(subp) ? subp : "/"; }