编辑:对于一个有效的示例,请查看this demo project

免责声明:我对构建Java Web应用程序一无所知。

我正在尝试将JWT与Clojure一起使用,但是我根本不知道该如何处理“ servlet”。到目前为止,我的想法是:


用“ Hello World”窗体创建一个WApplication

(defn make-hello-app [env]
  (let [wapp (WApplication. env)
        root (.getRoot wapp)]
    (.setTitle wapp "Hello world")
    (.addWidget root (WText. "Hello!!!!"))
    wapp))

创建一个从WtServlet继承的servlet。

(def servlet
  (proxy [WtServlet] []
    (createApplication [env]
      (make-hello-app env))))

启动码头并使用servlet。这是我不知道该怎么做。到目前为止,这是我最好的镜头:

(ns jwttest.core
  (:use compojure.core)
  (:use ring.adapter.jetty)
  (:import (org.eclipse.jetty.server Server))
  (:import (eu.webtoolkit.jwt WApplication WEnvironment WtServlet WText WPushButton WLineEdit WBreak)))

;; (the funcions above were defined here)

;; create a jetty server
(defn create-a-jetty-server []
  (let [connector (doto (SelectChannelConnector.)
                        (.setPort 8080)
                        (.setHost "localhost"))
     server (doto (Server.)
                  (.addConnector connector)
                  (.setSendDateHeader true))]
     server))

 ;; start the application
 (defn start-the-app []
   (let [server (create-a-jetty-server)]
      ;; ???? .addServlet ? How?
      (.start server)))



在我的project.clj中,我有:

[org.clojure/clojure "1.4.0"]
[eu.webtoolkit/jwt "3.2.0"]
[compojure "1.1.1"]
[ring "1.1.2"]


我知道ring可以从处理程序创建servlet,但是在这种情况下,我已经有一个servlet,所以...该怎么办?

注意:我的代码基于此very old post made in 2009

最佳答案

我仔细研究了一些Jetty APIRing / Noir码头处理代码,这是我发现的内容的摘要(并且没有机会进行测试)


Jetty Server有一个“ setHandler”方法,该方法需要一个处理程序(感谢Ring)
这里有一个ServletHandler类,看起来很适合上面的类,并且有许多类似addServlet的方法,它们看起来像它们在执行所需的工作。


您应该能够将处理程序设置为Servlet处理程序,然后从那里开始。

10-06 11:17