2011-11-01 18 views
5

C'è un modo per ottenere l'oggetto HttpServletRequest in un gestore Ring? Sto utilizzando Noir per sviluppare un'applicazione web. Ho bisogno di ottenere l'oggetto HttpServletRequest durante la gestione di un URI. Quindi uso la funzione (noir.request.ring-request) per recuperare la mappa di richiesta dell'anello che contiene: chiave di richiesta servlet, ma il valore è nullo. È questo il modo giusto per farlo o mi manca qualcosa?Come ottenere HttpServletRequest in un gestore Ring?

seguito è riportato il codice:

(ns my-app 
    (:use noir.request)) 
(defpage [:get "/app"] [] 
    (str (ring-request))) 

il risultato:

{:remote-addr "127.0.0.1", :scheme :http, :query-params {}, :session {}, :form-params {}, :multipart-params {}, :servlet #, :request-method :get, :query-string nil, :content-type nil, :cookies {"ring-session" {:value "eb509a65-d33a-40d2-9646-e2ff785428b0"}}, :uri "/app", :server-name "127.0.0.1", :params {}, :headers {"cookie" "ring-session=eb509a65-d33a-40d2-9646-e2ff785428b0", "accept-charset" "GBK,utf-8;q=0.7,*;q=0.3", "accept-language" "en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4", "accept-encoding" "gzip,deflate,sdch", "accept" "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "user-agent" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.106 Safari/535.2", "connection" "keep-alive", "host" "127.0.0.1:8080"}, :servlet-request #, :content-length nil, :server-port 8080, :character-encoding nil, :servlet-response #, :body #, :servlet-context #} 
+0

Fuori di interesse, che cosa stai cercando di fare per l'oggetto di richiesta? Forse c'è un altro modo per farlo. –

risposta

1

Sembra che la mappa richiesta anello è costruito sulla base della scheda che si sta utilizzando per il server web. Nel caso del molo, questo accade in ring.adapter.jetty:

https://github.com/ring-clojure/ring/blob/master/ring-jetty-adapter/src/ring/adapter/jetty.clj

Se fossi in te, vorrei creare il mio adattatore che aggiunge in modo esplicito ciò che è necessario alla mappa richiesta. In particolare si dovrebbe sostituire

request-map (servlet/build-request-map request)

con qualcosa di simile:

request-map (assoc (servlet/build-request-map request) :jetty-request request)
Problemi correlati