> I have gotten your example to work with a bit of reading and > modification (and thank you, I was after an example http server, this > got me going):
A bit more hacking and it's possible to add/replace handlers after the server has been started: (import '(java.io IOException OutputStream) '(java.util Iterator List Set) '(com.sun.net.httpserver Headers HttpExchange HttpHandler) '(java.net InetSocketAddress) '(java.util.concurrent Executors) '(com.sun.net.httpserver HttpServer)) (defmacro with-response-print-stream [http-exchange var resp-code content-type & body] (let [ex-var (gensym) hdrs-var (gensym)] `(try (do (let [~hdrs-var (.getResponseHeaders ~http-exchange)] (.add ~hdrs-var "Content-type: " ~content-type)) (.sendResponseHeaders ~http-exchange ~resp-code 0) (let [~var (java.io.PrintStream. (.getResponseBody ~http-exchange))] [EMAIL PROTECTED] (.close ~var))) (catch Throwable ~ex-var (println (str "Error: " ~ex-var)))))) (defn start-server [port] (let [server (. HttpServer create (new InetSocketAddress port) 0)] (.setExecutor server (. Executors newCachedThreadPool)) (.start server) server)) (defn server-add-handler [#^HttpServer server context handler-fn] (let [handler (proxy [HttpHandler] [] (handle [#^HttpExchange exchange] (handler-fn exchange)))] (try (.removeContext server context) (catch Throwable ex :was-not-present)) (.createContext server context handler)) nil) (def server (start-server 8080)) (server-add-handler server "/" (fn [#^HttpExchange exchange] (with-response-print-stream exchange out 200 "text/html" (.println out (str "<b>bold</b> and <i>italic</i>")) (.println out (str "You should try: <a href=\"/stuff/something/to/find?a=b\">this</a>, or <a href=\"/time\">that</a> "))))) (server-add-handler server "/stuff" (fn [#^HttpExchange exchange] (with-response-print-stream exchange out 200 "text/plain" (.println out (str "You are in the /stuff context, asking for: " (.getRequestURI exchange)))))) (server-add-handler server "/time" (fn [#^HttpExchange exchange] (with-response-print-stream exchange out 200 "text/plain" (.println out (str "The time (at now) is: " (java.util.Date.)))))) ;; (.stop server 0) I'm new to clojure so I'm sure this isn't good form, but it it useful to me already. Kyle --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---