diff -r 859804c78010 -r df08556c5c7c rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java --- a/rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java Thu Mar 14 09:22:28 2013 +0100 +++ b/rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java Thu Apr 11 20:44:46 2013 +0200 @@ -102,9 +102,9 @@ } HttpServer s = initServer(".", true); int last = startpage.lastIndexOf('/'); + String prefix = startpage.substring(0, last); String simpleName = startpage.substring(last); - s.getServerConfiguration().addHttpHandler(new Page(resources, startpage), simpleName); - s.getServerConfiguration().addHttpHandler(new Page(resources, null), "/"); + s.getServerConfiguration().addHttpHandler(new SubTree(resources, prefix), "/"); try { launchServerAndBrwsr(s, simpleName); } catch (URISyntaxException | InterruptedException ex) { @@ -181,7 +181,16 @@ if (r.httpPath.equals(request.getRequestURI())) { LOG.log(Level.INFO, "Serving HttpResource for {0}", request.getRequestURI()); response.setContentType(r.httpType); - copyStream(r.httpContent, response.getOutputStream(), null); + r.httpContent.reset(); + String[] params = null; + if (r.parameters.length != 0) { + params = new String[r.parameters.length]; + for (int i = 0; i < r.parameters.length; i++) { + params[i] = request.getParameter(r.parameters[i]); + } + } + + copyStream(r.httpContent, response.getOutputStream(), null, params); } } } @@ -319,11 +328,15 @@ } if (ch == '$' && params.length > 0) { int cnt = is.read() - '0'; - if (cnt == 'U' - '0') { + if (baseURL != null && cnt == 'U' - '0') { os.write(baseURL.getBytes("UTF-8")); - } - if (cnt >= 0 && cnt < params.length) { - os.write(params[cnt].getBytes("UTF-8")); + } else { + if (cnt >= 0 && cnt < params.length) { + os.write(params[cnt].getBytes("UTF-8")); + } else { + os.write('$'); + os.write(cnt + '0'); + } } } else { os.write(ch); @@ -479,7 +492,7 @@ } private static class Page extends HttpHandler { - private final String resource; + final String resource; private final String[] args; private final Res res; @@ -491,10 +504,7 @@ @Override public void service(Request request, Response response) throws Exception { - String r = resource; - if (r == null) { - r = request.getHttpHandlerPath(); - } + String r = computePage(request); if (r.startsWith("/")) { r = r.substring(1); } @@ -518,6 +528,28 @@ response.setStatus(404); } } + + protected String computePage(Request request) { + String r = resource; + if (r == null) { + r = request.getHttpHandlerPath(); + } + return r; + } + } + + private static class SubTree extends Page { + + public SubTree(Res res, String resource, String... args) { + super(res, resource, args); + } + + @Override + protected String computePage(Request request) { + return resource + request.getHttpHandlerPath(); + } + + } private static class VM extends HttpHandler {