seperate JSScope and update for new Tree interfaces
[org.ibex.xt-crawshaw.git] / src / java / org / ibex / xt / Servlet.java
index 42de0ba..1a7ae61 100644 (file)
@@ -1,21 +1,17 @@
 package org.ibex.xt;
 
 import java.io.*;
-import java.net.*;
 import java.util.*;
 import javax.servlet.*;
 import javax.servlet.http.*;
 
-import org.ibex.util.*;
 import org.ibex.util.Collections;
 import org.ibex.js.*;
 
 import org.prevayler.*;
-import org.prevayler.implementation.snapshot.*;
 
 public class Servlet extends HttpServlet {
 
-    private String path;
     private Prevayler prevayler;
     private JS prevalent;
     private ServletContext cx = null;
@@ -37,12 +33,39 @@ public class Servlet extends HttpServlet {
 
     public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { doGet(request, response); }
     public void doGet(HttpServletRequest rq, HttpServletResponse rs) throws IOException {
-        String path = cx.getRealPath(rq.getServletPath());
+        String src = rq.getServletPath();
         Servlet.Scope scope = new Servlet.Scope(cx, rq, rs, prevayler);
-        rs.getWriter().write("beginning output...");
-        try { Template.wrap(Template.parse(path, scope), scope).out(rs.getWriter()); }
-        catch (Exception e) { e.printStackTrace(); System.out.println("e = "+e); }
-        rs.getWriter().write("...output ends.");
+        PrintWriter w = new PrintWriter(rs.getWriter());
+        try {
+            while (src != null) {
+                try {
+                    StringWriter buffer = new StringWriter();
+                    Template t = Template.parse(cx.getRealPath(src), scope);
+                    Template.wrap(t, scope).out(buffer);
+                    w.write(buffer.toString());
+                    src = null;
+                } catch (Template.RedirectSignal r) {
+                    src = r.getTarget();
+                }
+            }
+        } catch (Template.Signal s) {
+            // exit silently
+        } catch (JSLeaf.Exn e) {
+            w.print("\n"+src+": ");
+            w.println(e.getMessage());
+            System.out.println(e);
+        } catch (FileNotFoundException e) {
+            w.print("\nfile not found: ");
+            w.println(e.getMessage());
+            System.out.println(e);
+        } catch (IOException e) {
+            w.print("\nio error: ");
+            w.println(e.getMessage());
+            e.printStackTrace();
+        } catch (Exception e) {
+            System.out.println("Unexpected Exception:");
+            e.printStackTrace();
+        }
     }
 
     public static class Scope extends Template.Scope {