rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java
1.1 --- a/rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java Thu Mar 14 09:22:28 2013 +0100
1.2 +++ b/rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java Thu Apr 11 20:44:46 2013 +0200
1.3 @@ -102,9 +102,9 @@
1.4 }
1.5 HttpServer s = initServer(".", true);
1.6 int last = startpage.lastIndexOf('/');
1.7 + String prefix = startpage.substring(0, last);
1.8 String simpleName = startpage.substring(last);
1.9 - s.getServerConfiguration().addHttpHandler(new Page(resources, startpage), simpleName);
1.10 - s.getServerConfiguration().addHttpHandler(new Page(resources, null), "/");
1.11 + s.getServerConfiguration().addHttpHandler(new SubTree(resources, prefix), "/");
1.12 try {
1.13 launchServerAndBrwsr(s, simpleName);
1.14 } catch (URISyntaxException | InterruptedException ex) {
1.15 @@ -181,7 +181,16 @@
1.16 if (r.httpPath.equals(request.getRequestURI())) {
1.17 LOG.log(Level.INFO, "Serving HttpResource for {0}", request.getRequestURI());
1.18 response.setContentType(r.httpType);
1.19 - copyStream(r.httpContent, response.getOutputStream(), null);
1.20 + r.httpContent.reset();
1.21 + String[] params = null;
1.22 + if (r.parameters.length != 0) {
1.23 + params = new String[r.parameters.length];
1.24 + for (int i = 0; i < r.parameters.length; i++) {
1.25 + params[i] = request.getParameter(r.parameters[i]);
1.26 + }
1.27 + }
1.28 +
1.29 + copyStream(r.httpContent, response.getOutputStream(), null, params);
1.30 }
1.31 }
1.32 }
1.33 @@ -319,11 +328,15 @@
1.34 }
1.35 if (ch == '$' && params.length > 0) {
1.36 int cnt = is.read() - '0';
1.37 - if (cnt == 'U' - '0') {
1.38 + if (baseURL != null && cnt == 'U' - '0') {
1.39 os.write(baseURL.getBytes("UTF-8"));
1.40 - }
1.41 - if (cnt >= 0 && cnt < params.length) {
1.42 - os.write(params[cnt].getBytes("UTF-8"));
1.43 + } else {
1.44 + if (cnt >= 0 && cnt < params.length) {
1.45 + os.write(params[cnt].getBytes("UTF-8"));
1.46 + } else {
1.47 + os.write('$');
1.48 + os.write(cnt + '0');
1.49 + }
1.50 }
1.51 } else {
1.52 os.write(ch);
1.53 @@ -479,7 +492,7 @@
1.54 }
1.55
1.56 private static class Page extends HttpHandler {
1.57 - private final String resource;
1.58 + final String resource;
1.59 private final String[] args;
1.60 private final Res res;
1.61
1.62 @@ -491,10 +504,7 @@
1.63
1.64 @Override
1.65 public void service(Request request, Response response) throws Exception {
1.66 - String r = resource;
1.67 - if (r == null) {
1.68 - r = request.getHttpHandlerPath();
1.69 - }
1.70 + String r = computePage(request);
1.71 if (r.startsWith("/")) {
1.72 r = r.substring(1);
1.73 }
1.74 @@ -518,6 +528,28 @@
1.75 response.setStatus(404);
1.76 }
1.77 }
1.78 +
1.79 + protected String computePage(Request request) {
1.80 + String r = resource;
1.81 + if (r == null) {
1.82 + r = request.getHttpHandlerPath();
1.83 + }
1.84 + return r;
1.85 + }
1.86 + }
1.87 +
1.88 + private static class SubTree extends Page {
1.89 +
1.90 + public SubTree(Res res, String resource, String... args) {
1.91 + super(res, resource, args);
1.92 + }
1.93 +
1.94 + @Override
1.95 + protected String computePage(Request request) {
1.96 + return resource + request.getHttpHandlerPath();
1.97 + }
1.98 +
1.99 +
1.100 }
1.101
1.102 private static class VM extends HttpHandler {