X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fjava%2Forg%2Fibex%2Fxt%2FServlet.java;h=78d1d916e4c57545963fb295df50a4ecee30b0fe;hb=HEAD;hp=42de0bafc3f54c23e3042afb3b90e5d45367abc9;hpb=1a9695b5601cd90a65c743c859931d7146bdeed3;p=org.ibex.xt-crawshaw.git diff --git a/src/java/org/ibex/xt/Servlet.java b/src/java/org/ibex/xt/Servlet.java index 42de0ba..78d1d91 100644 --- a/src/java/org/ibex/xt/Servlet.java +++ b/src/java/org/ibex/xt/Servlet.java @@ -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,42 @@ 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); + + rs.setContentType("text/xml"); + 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) { + w.print("Unexpected error occurred."); + System.out.println("Unexpected Exception:"); + e.printStackTrace(); + } } public static class Scope extends Template.Scope { @@ -70,13 +96,13 @@ public class Servlet extends HttpServlet { //#end return super.get(key); } - public void put(Object key, Object val) throws JSExn { + public Object put(Object key, Object val) throws JSExn { //#switch(JS.toString(key)) case "created": throw new JSExn("can not set session.created"); case "accessed": throw new JSExn("can not set session.accessed"); case "invalidate": throw new JSExn("can not set session.invalidate"); //#end - super.put(key, val); + return super.put(key, val); } public Object callMethod(Object method, final Object a, final Object b, Object c, Object[] rest, int nargs) throws JSExn { @@ -102,9 +128,10 @@ public class Servlet extends HttpServlet { private List keys = null; public Object get(Object key) { return request.getSession(true).getAttribute(JS.toString(key)); } - public void put(Object key, Object val) { + public Object put(Object key, Object val) { if (val == null) request.getSession(true).removeAttribute(JS.toString(key)); - else request.setAttribute(JS.toString(key), val); } + else request.setAttribute(JS.toString(key), val); + return null; } public Collection keys() { return keys == null ? keys = Collections.list(request.getSession(true).getAttributeNames()) : keys; } }; @@ -115,8 +142,8 @@ public class Servlet extends HttpServlet { return keys == null ? keys = Collections.list(request.getHeaderNames()) : keys; } }; private JS responseHeader = new JS() { - public void put(Object key, Object val) { - response.setHeader(JS.toString(key), JS.toString(val)); } + public Object put(Object key, Object val) { + response.setHeader(JS.toString(key), JS.toString(val)); return null; } }; @@ -124,8 +151,8 @@ public class Servlet extends HttpServlet { private class Sub extends JS { Object key; Sub(Object key) { this.key = key; } - public void put(Object key, Object val) throws JSExn { - Scope.this.put(JS.toString(this.key) + "." + JS.toString(key), val); } + public Object put(Object key, Object val) throws JSExn { + return Scope.this.put(JS.toString(this.key) + "." + JS.toString(key), val); } public Object get(Object key) throws JSExn { return Scope.this.get(JS.toString(this.key) + "." + JS.toString(key)); } public Object call(Object a0, Object a1, Object a2, Object[] rest, int nargs) throws JSExn { @@ -180,14 +207,14 @@ public class Servlet extends HttpServlet { //#end return null; } - public void put(Object key, Object val) throws JSExn { + public Object put(Object key, Object val) throws JSExn { try { //#switch(JS.toString(key)) - case "transaction": transaction((JS)val); case "response.code": response.setStatus(JS.toInt(val)); case "response.redirect": response.sendRedirect(JS.toString(val)); case "response.contentType": response.setContentType(JS.toString(val)); //#end + return null; } catch (IOException e) { throw new JSExn(e); }