rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java
branchfx
changeset 969 df08556c5c7c
parent 845 859804c78010
parent 954 6448c284fe21
child 1004 04efef2a9c1e
     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 {