编辑:对于一个有效的示例,请查看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 API和Ring / Noir码头处理代码,这是我发现的内容的摘要(并且没有机会进行测试)
Jetty Server有一个“ setHandler”方法,该方法需要一个处理程序(感谢Ring)
这里有一个ServletHandler类,看起来很适合上面的类,并且有许多类似addServlet的方法,它们看起来像它们在执行所需的工作。
您应该能够将处理程序设置为Servlet处理程序,然后从那里开始。